mirror of
https://github.com/ziirish/burp-ui.git
synced 2026-05-21 06:45:24 -06:00
client function use the new API
This commit is contained in:
parent
6312205a30
commit
e72e078084
6 changed files with 113 additions and 9 deletions
104
burpui/api/client.py
Normal file
104
burpui/api/client.py
Normal 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)
|
||||
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 = [];
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue