client function use the new API

This commit is contained in:
ziirish 2015-03-25 19:59:59 +01:00
parent 6312205a30
commit e72e078084
6 changed files with 113 additions and 9 deletions

104
burpui/api/client.py Normal file
View file

@ -0,0 +1,104 @@
# -*- coding: utf8 -*-
import json
from burpui import app, bui
from burpui.api import api
from flask.ext.restful import reqparse, Resource
from flask.ext.login import current_user, login_required
from flask import jsonify
@api.resource('/api/client-tree.json/<name>/<int:backup>', '/api/<server>/client-tree.json/<name>/<int:backup>')
class ClientTree(Resource):
def __init__(self):
self.parser = reqparse.RequestParser()
self.parser.add_argument('server', type=str)
self.parser.add_argument('root', type=str)
@login_required
def get(self, server=None, name=None, backup=None):
"""
WebService: return a specific client files tree
:param name: the client name (mandatory)
:param backup: the backup number (mandatory)
"""
if not server:
server = self.parser.parse_args()['server']
j = []
if not name or not backup:
return jsonify(results=j)
root = self.parser.parse_args()['root']
try:
if bui.acl_handler and\
(not bui.acl_handler.get_acl().is_admin(current_user.name)\
and not bui.acl_handler.get_acl().is_client_allowed(current_user.name, name, server)):
raise BUIserverException('Sorry, you are not allowed to view this client')
j = bui.cli.get_tree(name, backup, root, agent=server)
except BUIserverException, e:
err = [[2, str(e)]]
return jsonify(notif=err)
return jsonify(results=j)
@api.resource('/api/client-stat.json/<name>', '/api/<server>/client-stat.json/<name>', '/api/client-stat.json/<name>/<int:backup>', '/api/<server>/client-stat.json/<name>/<int:backup>')
class ClientStats(Resource):
def __init__(self):
self.parser = reqparse.RequestParser()
self.parser.add_argument('server', type=str)
@login_required
def get(self, server=None, name=None, backup=None):
"""
WebService: return a specific client detailed report
"""
if not server:
server = self.parser.parse_args()['server']
j = []
if not name:
err = [[1, 'No client defined']]
return jsonify(notif=err)
if bui.acl_handler and not bui.acl_handler.get_acl().is_client_allowed(current_user.name, name, server):
err = [[2, 'You don\'t have rights to view this client stats']]
return jsonify(notif=err)
if backup:
try:
j = bui.cli.get_backup_logs(backup, name, agent=server)
except BUIserverException, e:
err = [[2, str(e)]]
return jsonify(notif=err)
else:
try:
cl = bui.cli.get_client(name, agent=server)
except BUIserverException, e:
err = [[2, str(e)]]
return jsonify(notif=err)
for c in cl:
j.append(bui.cli.get_backup_logs(c['number'], name, agent=server))
return jsonify(results=j)
@api.resource('/api/client.json/<name>', '/api/<server>/client.json/<name>')
class ClientReport(Resource):
def __init__(self):
self.parser = reqparse.RequestParser()
self.parser.add_argument('server', type=str)
@login_required
def get(self, server=None, name=None):
"""
WebService: return a specific client backups overview
"""
if not server:
server = self.parser.parse_args()['server']
try:
if bui.acl_handler and ( \
not bui.acl_handler.get_acl().is_admin(current_user.name) \
and not bui.acl_handler.get_acl().is_client_allowed(current_user.name, name, server)):
raise BUIserverException('Sorry, you cannot access this client')
j = bui.cli.get_client(name, agent=server)
except BUIserverException, e:
err = [[2, str(e)]]
return jsonify(notif=err)
return jsonify(results=j)

View file

@ -45,9 +45,9 @@ var anim = function(elem, timeout) {
{% if not login -%}
var _check_running = function() {
{% if server -%}
url = '{{ url_for("backup_running", server=server) }}';
url = '{{ api.url_for(BackupRunning, server=server) }}';
{% else -%}
url = '{{ url_for("backup_running") }}';
url = '{{ api.url_for(BackupRunning) }}';
{% endif -%}
$.getJSON(url, function(data) {
if (data.results) {
@ -69,7 +69,7 @@ var _clients_bh = new Bloodhound({
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 10,
prefetch: {
url: '{{ url_for("clients_json") }}',
url: '{{ api.url_for(ClientsStats) }}',
filter: function(list) {
if (list.results) {
return list.results;
@ -100,7 +100,7 @@ var _{{ srv }}_bh = new Bloodhound({
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 10,
prefetch: {
url: '{{ url_for("clients_json", server=srv) }}',
url: '{{ api.url_for(ClientsStats, server=srv) }}',
filter: function(list) {
if (list.results) {
return list.results;

View file

@ -34,7 +34,7 @@ var _client = function() {
chart_unified.yAxis.tickFormat(d3.format(',.0f'));
}
url = '{{ url_for("client_stat_json", name=cname, backup=nbackup, server=server) }}';
url = '{{ api.url_for(ClientStats, name=cname, backup=nbackup, server=server) }}';
$.getJSON(url, function(d) {
j = d.results;
var _fields = [];

View file

@ -56,7 +56,7 @@
},
source: function() {
r = [];
$.getJSON('{{ url_for("client_tree", name=cname, backup=nbackup, server=server) }}', function(data) {
$.getJSON('{{ api.url_for(ClientTree, name=cname, backup=nbackup, server=server) }}', function(data) {
if (!data.results) {
if (data.notif) {
$.each(data.notif, function(i, n) {
@ -84,7 +84,7 @@
r = [];
p = node.key;
if (p !== "/") p += '/';
$.getJSON('{{ url_for("client_tree", name=cname, backup=nbackup, server=server) }}?root='+p, function(data) {
$.getJSON('{{ api.url_for(ClientTree, name=cname, backup=nbackup, server=server) }}?root='+p, function(data) {
if (!data.results) {
if (data.notif) {
$.each(data.notif, function(i, n) {

View file

@ -73,7 +73,7 @@ var _client = function() {
_chart_stats.bars.forceY([0]);
}
url = '{{ url_for("client_stat_json", name=cname, server=server) }}';
url = '{{ api.url_for(ClientStats, name=cname, server=server) }}';
$.getJSON(url, function(d) {
var _fields = [ 'dir', 'files', 'hardlink', 'softlink', 'files_enc', 'meta', 'meta_enc', 'special', 'efs', 'vssheader', 'vssheader_enc', 'vssfooter', 'vssfooter_enc' ];
var stats = true;

View file

@ -24,7 +24,7 @@
var _client_table = $('#table-client').dataTable( {
ajax: {
url: '{{ url_for("client_json", name=cname, server=server) }}',
url: '{{ api.url_for(ClientReport, name=cname, server=server) }}',
dataSrc: function (data) {
if (!data.results) {
$('#table-client').hide();