fix bugs + cosmetic for #16

This commit is contained in:
ziirish 2014-09-15 12:18:12 +02:00
parent 433c822c0b
commit 1286b64367
10 changed files with 71 additions and 39 deletions

View file

@ -15,7 +15,6 @@ class Burp(BUIbackend):
def __init__(self, app=None, conf=None):
self.app = app
self.servers = {}
self.servers_status = {}
self.app.config['SERVERS'] = []
if conf:
config = ConfigParser.ConfigParser()
@ -35,12 +34,7 @@ class Burp(BUIbackend):
self.app.logger.debug(self.servers)
for key, serv in self.servers.iteritems():
self.servers_status[key] = {'clients': [], 'alive': serv.ping()}
self.app.config['SERVERS'].append(key)
if not serv.connected:
continue
for c in serv.get_all_clients(key):
self.servers_status[key]['clients'].append(c['name'])
"""
Utilities functions
@ -112,9 +106,7 @@ class NClient(BUIbackend):
self.port = port
self.password = password
self.ssl = ssl
self.nok = False
self.connected = False
self.retry = False
self.app = app
def conn(self):
@ -123,7 +115,6 @@ class NClient(BUIbackend):
return
self.sock = socket.create_connection((self.host, self.port))
self.connected = True
self.retry = False
self.app.logger.debug('OK, connected to agent %s:%s', self.host, self.port)
except Exception, e:
self.connected = False
@ -135,15 +126,15 @@ class NClient(BUIbackend):
return res
def close(self):
self.sock.close()
if self.connected:
self.sock.close()
self.connected = False
def do_command(self, data=None):
self.conn()
res = []
res = '[]'
if not data:
return
old_data = data
return res
try:
data['password'] = self.password
raw = json.dumps(data)
@ -151,39 +142,38 @@ class NClient(BUIbackend):
self.sock.sendall(struct.pack('!Q', length))
self.sock.sendall(raw)
self.app.logger.debug("Sending: %s", raw)
#time.sleep(1)
res = self.recvall(2)
self.app.logger.debug("recv: '%s'", res)
if 'OK' != res:
tmp = self.recvall(2)
self.app.logger.debug("recv: '%s'", tmp)
if 'OK' != tmp:
self.app.logger.debug('Ooops, unsuccessful!')
return res
self.app.logger.debug("Data sent successfully")
lengthbuf = self.recvall(8)
lengthbuf = self.recvall(8, False)
length, = struct.unpack('!Q', lengthbuf)
res = self.recvall(length)
except Exception, e:
self.app.logger.error(str(e))
if not self.retry:
self.retry = True
res = self.do_command(old_data)
finally:
self.close()
return res
return res
def recvall(self, length=1024):
def recvall(self, length=1024, debug=True, timeout=5):
buf = b''
bsize = 1024
received = 0
tries = 0
if length < bsize:
bsize = length
while received < length:
while received < length and tries < timeout:
newbuf = self.sock.recv(bsize)
if not newbuf:
tries += 1
time.sleep(0.1)
continue
buf += newbuf
received += len(newbuf)
self.app.logger.debug('result (%d/%d): %s', length, len(buf), buf)
if debug:
self.app.logger.debug('result (%d/%d): %s', length, len(buf), buf)
return buf
"""

View file

@ -81,8 +81,8 @@ def render_live_tpl(server=None, name=None):
@login_required
def servers_json():
r = []
for serv in bui.cli.servers_status:
r.append({'name': serv, 'clients': len(bui.cli.servers_status[serv]['clients']), 'alive': bui.cli.servers_status[serv]['alive']})
for serv in bui.cli.servers:
r.append({'name': serv, 'clients': len(bui.cli.servers[serv].get_all_clients(serv)), 'alive': bui.cli.servers[serv].ping()})
return jsonify(results=r)
@app.route('/api/live.json')

View file

@ -4,9 +4,16 @@
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
{% include "small_topbar.html" %}
<ul class="breadcrumb" style="margin-bottom: 5px;">
{% if server -%}
<li><a href="{{ url_for('home') }}">Home</a></li>
<li><a href="{{ url_for('clients', server=server) }}">{{ server }} clients</a></li>
<li><a href="{{ url_for('client', name=cname, server=server) }}">{{ cname }} overview</a></li>
<li class="active">Backup n°{{ nbackup|mypad }} overview</li>
{% else -%}
<li><a href="{{ url_for('home') }}">Home</a></li>
<li><a href="{{ url_for('client', name=cname) }}">{{ cname }} overview</a></li>
<li class="active">Backup n°{{ nbackup|mypad }} overview</li>
{% endif -%}
</ul>
<br />
<h1 class="page-header">Backup n°{{ nbackup|mypad }} of {{ cname }}</h1>

View file

@ -4,10 +4,17 @@
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
{% include "small_topbar.html" %}
<ul class="breadcrumb" style="margin-bottom: 5px;">
<li><a href="{{ url_for('home') }}">Home</a></li>
{% if server -%}
<li><a href="{{ url_for('home') }}">Home</a></li>
<li><a href="{{ url_for('clients', server=server) }}">{{ server }} clients</a></li>
<li><a href="{{ url_for('client', name=cname, server=server) }}">{{ cname }} overview</a></li>
<li class="active">Backup n°{{ nbackup|mypad }} overview</li>
{% else -%}
<li><a href="{{ url_for('home') }}">Home</a></li>
<li><a href="{{ url_for('client', name=cname) }}">{{ cname }} overview</a></li>
<li class="active">Backup n°{{ nbackup|mypad }} overview</li>
</ul>
<li class="active">Backup n°{{ nbackup|mypad }} overview</li>
{% endif -%}
</ul>
<br />
<h1 class="page-header">Backup n°{{ nbackup|mypad }} of {{ cname }}</h1>
<div class="row">

View file

@ -4,8 +4,14 @@
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
{% include "small_topbar.html" %}
<ul class="breadcrumb" style="margin-bottom: 5px;">
{% if server -%}
<li><a href="{{ url_for('home') }}">Home</a></li>
<li><a href="{{ url_for('clients', server=server) }}">{{ server }} clients</a></li>
<li class="active">{{ cname }} overview</li>
{% else -%}
<li><a href="{{ url_for('home') }}">Home</a></li>
<li class="active">{{ cname }} overview</li>
{% endif -%}
</ul>
<br />
<h1 class="page-header">{{ cname }}</h1>

View file

@ -3,10 +3,16 @@
{% include "notifications.html" %}
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
{% include "small_topbar.html" %}
<ul class="breadcrumb" style="margin-bottom: 5px;">
<li><a href="{{ url_for('home') }}">Home</a></li>
<ul class="breadcrumb" style="margin-bottom: 5px;">
{% if server -%}
<li><a href="{{ url_for('home') }}">Home</a></li>
<li><a href="{{ url_for('clients', server=server) }}">{{ server }} clients</a></li>
<li class="active">{{ cname }} overview</li>
</ul>
{% else -%}
<li><a href="{{ url_for('home') }}">Home</a></li>
<li class="active">{{ cname }} overview</li>
{% endif -%}
</ul>
<br />
<h1 class="page-header">{{ cname }}</h1>

View file

@ -4,7 +4,12 @@
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
{% include "small_topbar.html" %}
<ul class="breadcrumb" style="margin-bottom: 5px;">
{% if server -%}
<li><a href="{{ url_for('home') }}">Home</a></li>
<li class="active">{{ server }} clients</li>
{% else -%}
<li class="active">Home</li>
{% endif -%}
</ul>
<br />
<h1 class="page-header">Global server report</h1>

View file

@ -3,9 +3,14 @@
{% include "notifications.html" %}
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
{% include "small_topbar.html" %}
<ul class="breadcrumb" style="margin-bottom: 5px;">
<li class="active">Home</li>
</ul>
<ul class="breadcrumb" style="margin-bottom: 5px;">
{% if server -%}
<li><a href="{{ url_for('home') }}">Home</a></li>
<li class="active">{{ server }} clients</li>
{% else -%}
<li class="active">Home</li>
{% endif -%}
</ul>
<br />
<h1 class="page-header">Clients</h1>

View file

@ -23,11 +23,13 @@ var _servers = function() {
$.each(data.results, function(j, c) {
cl = '';
glyph = 'glyphicon-ok';
href = '{{ url_for("clients") }}?server='+c.name;
if (!c.alive) {
cl = ' danger';
glyph = 'glyphicon-remove';
href = '#';
}
$('#table-servers > tbody:last').append('<tr class="clickable'+cl+'" style="cursor: pointer;"><td><a href="{{ url_for("clients") }}?server='+c.name+'" style="color: inherit; text-decoration: inherit;">'+c.name+'</a></td><td>'+c.clients+'</td><td><span class="glyphicon '+glyph+'"></span></td></tr>');
$('#table-servers > tbody:last').append('<tr class="clickable'+cl+'" style="cursor: pointer;"><td><a href="'+href+'" style="color: inherit; text-decoration: inherit;">'+c.name+'</a></td><td>'+c.clients+'</td><td><span class="glyphicon '+glyph+'"></span></td></tr>');
});
});
};

View file

@ -12,9 +12,13 @@
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
{% if not config.STANDALONE -%}
<li class="detail"><a href="{{ url_for('home') }}"><span class="glyphicon glyphicon-hdd"></span><span class="dtl hidden-md hidden-lg">&nbsp;Servers</span></a></li>
{% endif -%}
<li class="detail {% if not server %}active{% endif %}"><a href="{{ url_for('home') }}"><span class="glyphicon glyphicon-hdd"></span><span class="dtl hidden-md hidden-lg">&nbsp;Servers</span></a></li>
{% if server -%}
<li class="detail{% if clients %} active{% endif %}"><a href="{{ url_for('clients', server=server) }}"><span class="glyphicon glyphicon-tasks"></span><span class="dtl hidden-md hidden-lg">&nbsp;Clients</span></a></li>
{% endif -%}
{% else -%}
<li class="detail{% if clients %} active{% endif %}"><a href="{{ url_for('home') }}"><span class="glyphicon glyphicon-tasks"></span><span class="dtl hidden-md hidden-lg">&nbsp;Clients</span></a></li>
{% endif -%}
<li class="detail disabled"><a href="#"><span class="glyphicon glyphicon-wrench"></span><span class="dtl hidden-md hidden-lg">&nbsp;Settings</span></a></li>
<li class="detail{% if live %} active{% endif %}"><a href="{{ url_for('live_monitor', server=server) }}"><span id="toblink" class="glyphicon glyphicon-screenshot"></span><span class="dtl hidden-md hidden-lg">&nbsp;Live monitor</span></a></li>
{% if current_user and current_user.is_authenticated() -%}