Internal server error when backup is running

Hello,

When burp backup is running (doing backups), burp-ui fails with error 500:

ERROR in app.log_exception [/usr/local/lib/python2.7/dist-packages/flask/app.py:1560]:
Exception on /api/clients/stats [GET]
--------------------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/local/lib/python2.7/dist-packages/burpui/api/__init__.py", line 69, in decorated_view
    return func(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask_restplus/api.py", line 313, in wrapper
    resp = resource(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask/views.py", line 84, in view
    return self.dispatch_request(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask_restplus/resource.py", line 44, in dispatch_request
    resp = meth(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask_cache/__init__.py", line 297, in decorated_function
    rv = f(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/burpui/api/custom/namespace.py", line 31, in wrapper
    resp = f(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/burpui/api/clients.py", line 465, in get
    jso = bui.client.get_all_clients(agent=server)
  File "/usr/local/lib/python2.7/dist-packages/burpui/misc/backend/burp2.py", line 849, in get_all_clients
    cli['phase'] = client['phase']
KeyError: 'phase'

I've fixed it by:

Line 849 of backend/burp2.py contains:

    cli['phase'] = client['phase']

Changed to:

    if 'phase' in client:
        cli['phase'] = client['phase']

Should fix the problem.

Also:

  File "/usr/local/lib/python2.7/dist-packages/burpui/misc/backend/burp2.py", line 677, in get_counters
    for counter in backup['counters']:

Line 677:

    for counter in backup['counters']:

Replaced with:

    for counter in backup.get('counters', {}):

Hope it helps.

Edited by radixcl