mirror of
https://github.com/ziirish/burp-ui.git
synced 2026-05-15 06:05:58 -06:00
lint
This commit is contained in:
parent
b23a107a62
commit
7f2832d1fa
81 changed files with 399 additions and 396 deletions
|
|
@ -12,8 +12,7 @@ jQuery/Bootstrap
|
|||
"""
|
||||
import os
|
||||
import sys
|
||||
|
||||
from argparse import ArgumentParser, REMAINDER
|
||||
from argparse import REMAINDER, ArgumentParser
|
||||
|
||||
ROOT = os.path.dirname(os.path.realpath(__file__))
|
||||
# Try to load modules from our current env first
|
||||
|
|
@ -79,7 +78,7 @@ def parse_args(mode=True, name=None):
|
|||
unknown = []
|
||||
|
||||
if options.version:
|
||||
from burpui.desc import __title__, __version__, __release__
|
||||
from burpui.desc import __release__, __title__, __version__
|
||||
|
||||
ver = "{}: v{}".format(mname or __title__, __version__)
|
||||
if options.log:
|
||||
|
|
@ -153,6 +152,7 @@ def server(options=None, unknown=None):
|
|||
|
||||
def agent(options=None):
|
||||
import trio
|
||||
|
||||
from burpui.engines.agent import BUIAgent as Agent
|
||||
from burpui.utils import lookup_file
|
||||
|
||||
|
|
@ -172,6 +172,7 @@ def agent(options=None):
|
|||
|
||||
def monitor(options=None):
|
||||
import trio
|
||||
|
||||
from burpui.engines.monitor import MonitorPool
|
||||
from burpui.utils import lookup_file
|
||||
|
||||
|
|
|
|||
|
|
@ -8,8 +8,7 @@
|
|||
|
||||
"""
|
||||
import pickle # noqa
|
||||
|
||||
from urllib.parse import unquote, quote, urlparse, urljoin # noqa
|
||||
from urllib.parse import quote, unquote, urljoin, urlparse # noqa
|
||||
|
||||
text_type = str
|
||||
string_types = (str,)
|
||||
|
|
|
|||
|
|
@ -8,22 +8,22 @@
|
|||
|
||||
|
||||
"""
|
||||
import hashlib
|
||||
import os
|
||||
import sys
|
||||
import uuid
|
||||
import hashlib
|
||||
|
||||
from flask import Blueprint, Response, request, current_app, session, abort, g
|
||||
from flask_restx import Api as ApiPlus
|
||||
from flask_login import current_user
|
||||
from importlib import import_module
|
||||
from functools import wraps
|
||||
from importlib import import_module
|
||||
|
||||
from flask import Blueprint, Response, abort, current_app, g, request, session
|
||||
from flask_login import current_user
|
||||
from flask_restx import Api as ApiPlus
|
||||
|
||||
from .._compat import to_bytes
|
||||
from ..desc import __version__, __release__, __url__, __doc__
|
||||
from ..config import config
|
||||
from ..desc import __doc__, __release__, __url__, __version__
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..exceptions import BUIserverException
|
||||
from ..config import config
|
||||
from ..tools.logging import logger
|
||||
|
||||
bui = current_app # type: BUIServer
|
||||
|
|
|
|||
|
|
@ -7,20 +7,21 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
from . import api
|
||||
import json
|
||||
|
||||
from flask import current_app
|
||||
from flask_babel import gettext
|
||||
from flask_login import current_user
|
||||
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..sessions import session_manager
|
||||
from ..misc.acl.meta import meta_grants
|
||||
from ..sessions import session_manager
|
||||
from ..utils import NOTIF_OK
|
||||
from .custom import fields, Resource
|
||||
from . import api
|
||||
from .custom import Resource, fields
|
||||
|
||||
# from ..exceptions import BUIserverException
|
||||
|
||||
from flask import current_app
|
||||
from flask_login import current_user
|
||||
from flask_babel import gettext
|
||||
|
||||
import json
|
||||
|
||||
bui = current_app # type: BUIServer
|
||||
ns = api.namespace("admin", "Admin methods")
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
from . import api
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from .custom import Resource
|
||||
from ..exceptions import BUIserverException
|
||||
|
||||
from flask import current_app
|
||||
from flask_login import current_user
|
||||
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..exceptions import BUIserverException
|
||||
from . import api
|
||||
from .custom import Resource
|
||||
|
||||
bui = current_app # type: BUIServer
|
||||
ns = api.namespace("backup", "Backup methods")
|
||||
|
||||
|
|
|
|||
|
|
@ -10,17 +10,17 @@
|
|||
import os
|
||||
import re
|
||||
|
||||
from . import api, cache_key, force_refresh
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from .custom import fields, Resource
|
||||
from ..decorators import browser_cache
|
||||
from ..ext.cache import cache
|
||||
from ..exceptions import BUIserverException
|
||||
|
||||
from flask_restx.marshalling import marshal
|
||||
from flask_restx import inputs
|
||||
from flask import current_app, request
|
||||
from flask_login import current_user
|
||||
from flask_restx import inputs
|
||||
from flask_restx.marshalling import marshal
|
||||
|
||||
from ..decorators import browser_cache
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..exceptions import BUIserverException
|
||||
from ..ext.cache import cache
|
||||
from . import api, cache_key, force_refresh
|
||||
from .custom import Resource, fields
|
||||
|
||||
bui = current_app # type: BUIServer
|
||||
ns = api.namespace("client", "Client methods")
|
||||
|
|
|
|||
|
|
@ -7,18 +7,18 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
from . import api, cache_key, force_refresh
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from .custom import fields, Resource
|
||||
from .client import ClientLabels
|
||||
from ..ext.cache import cache
|
||||
from ..exceptions import BUIserverException
|
||||
from ..decorators import browser_cache
|
||||
from ..filter import mask
|
||||
|
||||
from flask import current_app, g
|
||||
from flask_login import current_user
|
||||
|
||||
from ..decorators import browser_cache
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..exceptions import BUIserverException
|
||||
from ..ext.cache import cache
|
||||
from ..filter import mask
|
||||
from . import api, cache_key, force_refresh
|
||||
from .client import ClientLabels
|
||||
from .custom import Resource, fields
|
||||
|
||||
bui = current_app # type: BUIServer
|
||||
ns = api.namespace("clients", "Clients methods")
|
||||
|
||||
|
|
@ -229,7 +229,7 @@ class RunningBackup(Resource):
|
|||
res = [x for x in res if x in allowed]
|
||||
running = False
|
||||
if isinstance(res, dict):
|
||||
for (_, run) in res.items():
|
||||
for _, run in res.items():
|
||||
running = running or (len(run) > 0)
|
||||
if running:
|
||||
break
|
||||
|
|
@ -776,7 +776,7 @@ class AllClients(Resource):
|
|||
else:
|
||||
for serv in bui.client.servers:
|
||||
grants[serv] = "all"
|
||||
for (serv, clients) in grants.items():
|
||||
for serv, clients in grants.items():
|
||||
if not isinstance(clients, list):
|
||||
clients = clients_cache.get(serv, [])
|
||||
ret += [{"name": x, "agent": serv} for x in clients]
|
||||
|
|
|
|||
|
|
@ -9,15 +9,15 @@
|
|||
|
||||
"""
|
||||
import flask_restx.fields
|
||||
|
||||
from flask_restx.fields import * # noqa # pylint: disable=locally-disabled, wildcard-import, unused-wildcard-import
|
||||
|
||||
from .my_fields import (
|
||||
DateTime,
|
||||
DateTimeHuman,
|
||||
BackupNumber,
|
||||
SafeString,
|
||||
DateTime,
|
||||
DateTimeHuman, # noqa
|
||||
LocalizedString,
|
||||
) # noqa
|
||||
SafeString,
|
||||
)
|
||||
|
||||
__all__ = flask_restx.fields.__all__ + (
|
||||
DateTime,
|
||||
|
|
|
|||
|
|
@ -9,15 +9,15 @@
|
|||
|
||||
"""
|
||||
import datetime
|
||||
|
||||
import arrow
|
||||
from flask import escape
|
||||
from flask_babel import gettext as _
|
||||
from flask_restx import fields
|
||||
from tzlocal import get_localzone
|
||||
|
||||
from ...ext.i18n import get_locale
|
||||
|
||||
from flask_restx import fields
|
||||
from flask_babel import gettext as _
|
||||
from flask import escape
|
||||
from tzlocal import get_localzone
|
||||
|
||||
TZ = str(get_localzone())
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -7,22 +7,22 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
from . import api, cache_key, force_refresh
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from .custom import fields, Resource
|
||||
from .client import ClientLabels
|
||||
from ..filter import mask
|
||||
from ..exceptions import BUIserverException
|
||||
from ..decorators import browser_cache
|
||||
from ..ext.cache import cache
|
||||
from ..ext.i18n import LANGUAGES
|
||||
|
||||
from flask import flash, get_flashed_messages, url_for, current_app, session
|
||||
from flask_login import current_user
|
||||
|
||||
import random
|
||||
import re
|
||||
|
||||
from flask import current_app, flash, get_flashed_messages, session, url_for
|
||||
from flask_login import current_user
|
||||
|
||||
from ..decorators import browser_cache
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..exceptions import BUIserverException
|
||||
from ..ext.cache import cache
|
||||
from ..ext.i18n import LANGUAGES
|
||||
from ..filter import mask
|
||||
from . import api, cache_key, force_refresh
|
||||
from .client import ClientLabels
|
||||
from .custom import Resource, fields
|
||||
|
||||
bui = current_app # type: BUIServer
|
||||
ns = api.namespace("misc", "Misc methods")
|
||||
|
||||
|
|
@ -213,7 +213,7 @@ class Counters(Resource):
|
|||
)
|
||||
else:
|
||||
found = False
|
||||
for (_, cls) in running.items():
|
||||
for _, cls in running.items():
|
||||
if client in cls:
|
||||
found = True
|
||||
break
|
||||
|
|
@ -346,7 +346,7 @@ class Live(Resource):
|
|||
else:
|
||||
running = bui.client.is_one_backup_running()
|
||||
if isinstance(running, dict):
|
||||
for (serv, clients) in running.items():
|
||||
for serv, clients in running.items():
|
||||
for client in clients:
|
||||
# ACL
|
||||
if mask.has_filters(current_user) and not mask.is_client_allowed(
|
||||
|
|
@ -533,15 +533,15 @@ class About(Resource):
|
|||
srv = bui.client.get_server_version(server)
|
||||
multi = {}
|
||||
if isinstance(cli, dict):
|
||||
for (name, val) in cli.items():
|
||||
for name, val in cli.items():
|
||||
multi[name] = {"client": val}
|
||||
if isinstance(srv, dict):
|
||||
for (name, val) in srv.items():
|
||||
for name, val in srv.items():
|
||||
multi[name]["server"] = val
|
||||
if not multi:
|
||||
res["burp"].append({"client": cli, "server": srv})
|
||||
else:
|
||||
for (name, val) in multi.items():
|
||||
for name, val in multi.items():
|
||||
tmp = val
|
||||
tmp.update({"name": name})
|
||||
res["burp"].append(tmp)
|
||||
|
|
@ -841,7 +841,7 @@ class History(Resource):
|
|||
]
|
||||
else:
|
||||
grants[serv] = "all"
|
||||
for (serv, clients) in grants.items():
|
||||
for serv, clients in grants.items():
|
||||
if not isinstance(clients, list):
|
||||
if data and serv in data:
|
||||
clients = data[serv].keys()
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
from flask import session, current_app, request
|
||||
from flask import current_app, request, session
|
||||
from flask_login import current_user
|
||||
from werkzeug.datastructures import MultiDict
|
||||
|
||||
from . import api
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..ext.i18n import LANGUAGES
|
||||
from .custom import fields, Resource
|
||||
from . import api
|
||||
from .custom import Resource, fields
|
||||
|
||||
bui = current_app # type: BUIServer
|
||||
ns = api.namespace("preferences", "Preferences methods")
|
||||
|
|
|
|||
|
|
@ -9,20 +9,20 @@
|
|||
"""
|
||||
import select
|
||||
import struct
|
||||
|
||||
from . import api
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from .custom import fields, Resource
|
||||
from ..exceptions import BUIserverException
|
||||
|
||||
from zlib import adler32
|
||||
from time import gmtime, strftime, time
|
||||
from flask import Response, send_file, make_response, after_this_request, current_app
|
||||
from zlib import adler32
|
||||
|
||||
from flask import Response, after_this_request, current_app, make_response, send_file
|
||||
from flask_login import current_user
|
||||
from flask_restx import inputs
|
||||
from werkzeug.datastructures import Headers
|
||||
from werkzeug.exceptions import HTTPException
|
||||
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..exceptions import BUIserverException
|
||||
from . import api
|
||||
from .custom import Resource, fields
|
||||
|
||||
bui = current_app # type: BUIServer
|
||||
ns = api.namespace("restore", "Restore methods")
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
# -*- coding: utf8 -*-
|
||||
|
||||
# This is a submodule we can also use "from ..api import api"
|
||||
from . import api, cache_key, force_refresh
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from .custom import fields, Resource
|
||||
from ..filter import mask
|
||||
from ..ext.cache import cache
|
||||
from ..decorators import browser_cache
|
||||
from ..exceptions import BUIserverException
|
||||
|
||||
from flask import current_app, g
|
||||
from flask_login import current_user
|
||||
|
||||
from ..decorators import browser_cache
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..exceptions import BUIserverException
|
||||
from ..ext.cache import cache
|
||||
from ..filter import mask
|
||||
from . import api, cache_key, force_refresh
|
||||
from .custom import Resource, fields
|
||||
|
||||
bui = current_app # type: BUIServer
|
||||
ns = api.namespace("servers", "Servers methods")
|
||||
|
||||
|
|
|
|||
|
|
@ -9,27 +9,28 @@
|
|||
"""
|
||||
import json
|
||||
|
||||
from . import api
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..ext.cache import cache
|
||||
from .custom import Resource
|
||||
from .._compat import unquote
|
||||
from ..utils import NOTIF_INFO
|
||||
|
||||
from flask_babel import gettext as _, refresh
|
||||
from flask import (
|
||||
jsonify,
|
||||
request,
|
||||
url_for,
|
||||
current_app,
|
||||
g,
|
||||
session,
|
||||
jsonify,
|
||||
render_template_string,
|
||||
request,
|
||||
session,
|
||||
url_for,
|
||||
)
|
||||
from flask_babel import gettext as _
|
||||
from flask_babel import refresh
|
||||
from flask_login import current_user
|
||||
from flask_restx import inputs
|
||||
from jinja2 import Environment, meta
|
||||
|
||||
from .._compat import unquote
|
||||
from ..datastructures import ImmutableMultiDict, MultiDict
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..ext.cache import cache
|
||||
from ..utils import NOTIF_INFO
|
||||
from . import api
|
||||
from .custom import Resource
|
||||
|
||||
TEMPLATE_EXCLUDES = ["client", "agent"]
|
||||
|
||||
|
|
@ -1026,7 +1027,6 @@ class ClientSettings(Resource):
|
|||
},
|
||||
)
|
||||
class PathExpander(Resource):
|
||||
|
||||
parser = ns.parser()
|
||||
parser.add_argument("path", required=True, help="No 'path' provided")
|
||||
parser.add_argument("source", required=False, help="Which file is it included in")
|
||||
|
|
|
|||
|
|
@ -10,36 +10,36 @@
|
|||
import os
|
||||
import select
|
||||
import struct
|
||||
|
||||
from . import api, cache_key, force_refresh
|
||||
from .misc import History
|
||||
from .custom import Resource
|
||||
from .client import node_fields
|
||||
from .clients import RunningBackup, ClientsReport, RunningClients
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..ext.cache import cache
|
||||
from ..config import config
|
||||
from ..decorators import browser_cache
|
||||
from ..tasks import perform_restore, load_all_tree, delete_client, force_scheduling_now
|
||||
|
||||
from datetime import timedelta
|
||||
from time import time
|
||||
from zlib import adler32
|
||||
|
||||
from flask import (
|
||||
url_for,
|
||||
Response,
|
||||
current_app,
|
||||
after_this_request,
|
||||
send_file,
|
||||
request,
|
||||
current_app,
|
||||
g,
|
||||
request,
|
||||
send_file,
|
||||
session,
|
||||
url_for,
|
||||
)
|
||||
from flask_babel import gettext as _
|
||||
from flask_restx import inputs
|
||||
from flask_login import current_user
|
||||
from datetime import timedelta
|
||||
from flask_restx import inputs
|
||||
from werkzeug.datastructures import Headers
|
||||
|
||||
from ..config import config
|
||||
from ..decorators import browser_cache
|
||||
from ..engines.server import BUIServer # noqa
|
||||
from ..ext.cache import cache
|
||||
from ..tasks import delete_client, force_scheduling_now, load_all_tree, perform_restore
|
||||
from . import api, cache_key, force_refresh
|
||||
from .client import node_fields
|
||||
from .clients import ClientsReport, RunningBackup, RunningClients
|
||||
from .custom import Resource
|
||||
from .misc import History
|
||||
|
||||
try:
|
||||
from .ext.ws import socketio # noqa
|
||||
|
||||
|
|
|
|||
|
|
@ -9,19 +9,19 @@ jQuery/Bootstrap
|
|||
|
||||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
"""
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
import time
|
||||
import logging
|
||||
|
||||
from .desc import __version__, __release__
|
||||
from .desc import __release__, __version__
|
||||
from .extensions import (
|
||||
create_celery,
|
||||
create_db,
|
||||
create_websocket,
|
||||
parse_db_setting,
|
||||
get_redis_server,
|
||||
parse_db_setting,
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -53,18 +53,19 @@ def create_app(conf=None, verbose=0, logfile=None, **kwargs):
|
|||
:returns: A :class:`burpui.engines.server.BUIServer` object
|
||||
"""
|
||||
from flask import g, request, session
|
||||
from flask_login import LoginManager
|
||||
from flask_babel import gettext
|
||||
from .thirdparty.flask_bower import Bower
|
||||
from .utils import ReverseProxied, lookup_file, is_uuid
|
||||
from .tools.logging import logger
|
||||
from .security import basic_login_from_request
|
||||
from flask_login import LoginManager
|
||||
|
||||
from .engines.server import BUIServer as BurpUI
|
||||
from .sessions import session_manager
|
||||
from .filter import mask
|
||||
from .ext.cache import cache
|
||||
from .ext.i18n import babel, get_locale
|
||||
from .filter import mask
|
||||
from .misc.auth.handler import BUIanon
|
||||
from .security import basic_login_from_request
|
||||
from .sessions import session_manager
|
||||
from .thirdparty.flask_bower import Bower
|
||||
from .tools.logging import logger
|
||||
from .utils import ReverseProxied, is_uuid, lookup_file
|
||||
|
||||
gunicorn = kwargs.get("gunicorn", True)
|
||||
unittest = kwargs.get("unittest", False)
|
||||
|
|
@ -179,6 +180,7 @@ def create_app(conf=None, verbose=0, logfile=None, **kwargs):
|
|||
"false",
|
||||
]:
|
||||
from redis import Redis
|
||||
|
||||
from .ext.session import sess
|
||||
|
||||
host, port, pwd = get_redis_server(app)
|
||||
|
|
@ -299,7 +301,7 @@ def create_app(conf=None, verbose=0, logfile=None, **kwargs):
|
|||
|
||||
if not celery_worker:
|
||||
from .api import api, apibp
|
||||
from .routes import view, mypad
|
||||
from .routes import mypad, view
|
||||
|
||||
app.jinja_env.globals.update(
|
||||
isinstance=isinstance,
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ jQuery/Bootstrap
|
|||
import os
|
||||
import sys
|
||||
import time
|
||||
|
||||
import click
|
||||
|
||||
if os.getenv("BUI_MODE") in ["server", "ws"] or "websocket" in sys.argv:
|
||||
|
|
@ -59,10 +60,11 @@ app = create_app(
|
|||
)
|
||||
|
||||
try:
|
||||
from .extensions import create_db
|
||||
from .ext.sql import db
|
||||
from flask_migrate import Migrate
|
||||
|
||||
from .ext.sql import db
|
||||
from .extensions import create_db
|
||||
|
||||
# This may have been reseted by create_app
|
||||
if isinstance(app.database, bool):
|
||||
app.config["WITH_SQL"] = app.database
|
||||
|
|
@ -470,13 +472,14 @@ def setup_burp(
|
|||
if msg:
|
||||
_die(msg, "setup-burp")
|
||||
|
||||
from .misc.parser.utils import Config
|
||||
from .misc.backend.utils.constant import BURP_LISTEN_OPTION, BURP_BIND_MULTIPLE
|
||||
from .app import get_redis_server
|
||||
from .config import BUIConfig
|
||||
import difflib
|
||||
import tempfile
|
||||
|
||||
from .app import get_redis_server
|
||||
from .config import BUIConfig
|
||||
from .misc.backend.utils.constant import BURP_BIND_MULTIPLE, BURP_LISTEN_OPTION
|
||||
from .misc.parser.utils import Config
|
||||
|
||||
if monitor:
|
||||
monconf = BUIConfig(monitor)
|
||||
monconf_orig = []
|
||||
|
|
@ -595,10 +598,11 @@ def setup_burp(
|
|||
if redis:
|
||||
try:
|
||||
# detect missing modules
|
||||
import redis as redis_client # noqa
|
||||
import celery # noqa
|
||||
import socket
|
||||
|
||||
import celery # noqa
|
||||
import redis as redis_client # noqa
|
||||
|
||||
if (
|
||||
"redis" not in app.conf.options["Production"]
|
||||
or "redis" in app.conf.options["Production"]
|
||||
|
|
@ -974,7 +978,6 @@ exclude_comp=gz
|
|||
bconfagent = os.devnull
|
||||
|
||||
if not os.path.exists(bconfagent):
|
||||
|
||||
agenttpl = """
|
||||
password = abcdefgh
|
||||
"""
|
||||
|
|
@ -1039,9 +1042,9 @@ def diag(client, host, tips):
|
|||
if msg:
|
||||
_die(msg, "diag")
|
||||
|
||||
from .app import get_redis_server
|
||||
from .misc.backend.utils.constant import BURP_LISTEN_OPTION
|
||||
from .misc.parser.utils import Config
|
||||
from .app import get_redis_server
|
||||
|
||||
def _value_in_option(value, option, section="Production"):
|
||||
if section not in app.conf.options:
|
||||
|
|
@ -1057,10 +1060,11 @@ def diag(client, host, tips):
|
|||
):
|
||||
try:
|
||||
# detect missing modules
|
||||
import redis as redis_client # noqa
|
||||
import celery # noqa
|
||||
import socket
|
||||
|
||||
import celery # noqa
|
||||
import redis as redis_client # noqa
|
||||
|
||||
rhost, rport, _ = get_redis_server(app)
|
||||
ret = -1
|
||||
for res in socket.getaddrinfo(
|
||||
|
|
@ -1345,9 +1349,10 @@ def diag(client, host, tips):
|
|||
)
|
||||
def sysinfo(verbose, load):
|
||||
"""Returns a couple of system informations to help debugging."""
|
||||
from .desc import __release__, __version__
|
||||
import platform
|
||||
|
||||
from .desc import __release__, __version__
|
||||
|
||||
msg = None
|
||||
if load:
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -7,9 +7,10 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
import codecs
|
||||
import os
|
||||
import re
|
||||
import codecs
|
||||
|
||||
import configobj
|
||||
import validate
|
||||
|
||||
|
|
@ -114,7 +115,6 @@ class BUIConfig(dict):
|
|||
found = False
|
||||
for line in ori:
|
||||
if re.match(r"^\s*(#|;)+\s*\[{}\]".format(section), line):
|
||||
|
||||
config.write("[{}]\n".format(section))
|
||||
found = True
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -7,9 +7,8 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
import time
|
||||
import datetime
|
||||
|
||||
import time
|
||||
from functools import wraps
|
||||
|
||||
|
||||
|
|
@ -30,13 +29,13 @@ def browser_cache(expires=None):
|
|||
|
||||
"""
|
||||
from wsgiref.handlers import format_date_time
|
||||
|
||||
from flask import g
|
||||
from flask_restx.utils import unpack
|
||||
|
||||
def cache_decorator(view):
|
||||
@wraps(view)
|
||||
def cache_func(*args, **kwargs):
|
||||
|
||||
resp, code, headers = unpack(view(*args, **kwargs))
|
||||
now = datetime.datetime.now()
|
||||
|
||||
|
|
|
|||
|
|
@ -7,23 +7,22 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
import os
|
||||
import struct
|
||||
import sys
|
||||
import ssl
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import ssl
|
||||
import struct
|
||||
import sys
|
||||
import time
|
||||
from functools import partial
|
||||
|
||||
import trio
|
||||
|
||||
from functools import partial
|
||||
|
||||
from ..exceptions import BUIserverException
|
||||
from ..misc.backend.interface import BUIbackend
|
||||
from .._compat import pickle, to_bytes, to_unicode
|
||||
from ..config import config
|
||||
from ..desc import __version__
|
||||
from ..exceptions import BUIserverException
|
||||
from ..misc.backend.interface import BUIbackend
|
||||
|
||||
# TODO: sendfile is not yet supported by trio
|
||||
# try:
|
||||
|
|
@ -269,8 +268,8 @@ class BUIAgent(BUIbackend):
|
|||
if j["args"]:
|
||||
if "pickled" in j and j["pickled"]:
|
||||
# de-serialize arguments if needed
|
||||
import hmac
|
||||
import hashlib
|
||||
import hmac
|
||||
from base64 import b64decode
|
||||
|
||||
pickles = to_bytes(j["args"])
|
||||
|
|
|
|||
|
|
@ -7,25 +7,24 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
import ssl
|
||||
import trio
|
||||
import json
|
||||
import math
|
||||
import struct
|
||||
import logging
|
||||
import datetime
|
||||
|
||||
import json
|
||||
import logging
|
||||
import math
|
||||
import ssl
|
||||
import struct
|
||||
from functools import partial
|
||||
from itertools import count
|
||||
|
||||
import trio
|
||||
from async_generator import asynccontextmanager
|
||||
|
||||
from .._compat import to_bytes, to_unicode
|
||||
from ..config import config
|
||||
from ..desc import __version__
|
||||
from ..exceptions import BUIserverException
|
||||
from ..misc.backend.utils.burp2 import Monitor
|
||||
from ..config import config
|
||||
from .._compat import to_bytes, to_unicode
|
||||
from ..tools.logging import logger
|
||||
from ..desc import __version__
|
||||
|
||||
|
||||
CONNECTION_COUNTER = count()
|
||||
|
||||
|
|
|
|||
|
|
@ -7,22 +7,21 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
import logging # noqa
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import logging # noqa
|
||||
import warnings
|
||||
|
||||
from ..tools.logging import logger
|
||||
from ..misc.auth.handler import UserAuthHandler
|
||||
from ..misc.acl.handler import ACLloader
|
||||
from ..misc.audit.handler import BUIauditLoader
|
||||
from ..config import config
|
||||
from ..plugins import PluginManager
|
||||
|
||||
from datetime import timedelta
|
||||
|
||||
from flask import Flask
|
||||
|
||||
from ..config import config
|
||||
from ..misc.acl.handler import ACLloader
|
||||
from ..misc.audit.handler import BUIauditLoader
|
||||
from ..misc.auth.handler import UserAuthHandler
|
||||
from ..plugins import PluginManager
|
||||
from ..tools.logging import logger
|
||||
|
||||
BUI_DEFAULTS = {
|
||||
"Global": {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
"""
|
||||
from flask_caching import Cache
|
||||
|
||||
|
||||
cache = Cache(
|
||||
config={
|
||||
"CACHE_TYPE": "simple",
|
||||
|
|
|
|||
|
|
@ -10,8 +10,9 @@
|
|||
from flask import request, session
|
||||
from flask_babel import Babel
|
||||
from flask_login import current_user
|
||||
from ..config import config
|
||||
|
||||
from .._compat import to_unicode
|
||||
from ..config import config
|
||||
|
||||
babel = Babel()
|
||||
|
||||
|
|
|
|||
|
|
@ -7,9 +7,10 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
from ..config import config
|
||||
from flask_socketio import SocketIO
|
||||
|
||||
from ..config import config
|
||||
|
||||
options = {}
|
||||
options["async_mode"] = config.get("WS_ASYNC_MODE", "gevent")
|
||||
|
||||
|
|
|
|||
|
|
@ -57,9 +57,10 @@ def create_db(myapp, cli=False, unittest=False, create=True, celery_worker=False
|
|||
"""
|
||||
if myapp.config["WITH_SQL"]:
|
||||
try:
|
||||
from .ext.sql import db
|
||||
from sqlalchemy.exc import OperationalError
|
||||
from sqlalchemy_utils.functions import database_exists
|
||||
|
||||
from .ext.sql import db
|
||||
from .models import lazy_loading
|
||||
|
||||
lazy_loading()
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
from .ext.i18n import LANGUAGES, get_locale
|
||||
|
||||
from flask_wtf import FlaskForm
|
||||
from flask_babel import lazy_gettext as __
|
||||
from wtforms import StringField, PasswordField, BooleanField, SelectField, validators
|
||||
from flask_wtf import FlaskForm
|
||||
from wtforms import BooleanField, PasswordField, SelectField, StringField, validators
|
||||
|
||||
from .ext.i18n import LANGUAGES, get_locale
|
||||
|
||||
|
||||
class LoginForm(FlaskForm):
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# -*- coding: utf8 -*-
|
||||
from .meta import meta_grants, BUIaclGrant
|
||||
from ...utils import NOTIF_ERROR, NOTIF_OK, NOTIF_WARN, __
|
||||
from .interface import BUIaclLoader
|
||||
from ...utils import NOTIF_OK, NOTIF_WARN, NOTIF_ERROR, __
|
||||
from .meta import BUIaclGrant, meta_grants
|
||||
|
||||
|
||||
class ACLloader(BUIaclLoader):
|
||||
|
|
|
|||
|
|
@ -1,12 +1,11 @@
|
|||
# -*- coding: utf8 -*-
|
||||
import os
|
||||
from collections import OrderedDict
|
||||
from importlib import import_module
|
||||
|
||||
from .interface import BUIacl, BUIaclLoader
|
||||
from .meta import meta_grants
|
||||
|
||||
from importlib import import_module
|
||||
from collections import OrderedDict
|
||||
|
||||
|
||||
class ACLloader(BUIaclLoader):
|
||||
section = name = "ACL"
|
||||
|
|
|
|||
|
|
@ -7,9 +7,8 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
from abc import ABCMeta, abstractmethod, abstractproperty
|
||||
|
||||
import logging
|
||||
from abc import ABCMeta, abstractmethod, abstractproperty
|
||||
|
||||
|
||||
class BUIaclLoader(object, metaclass=ABCMeta):
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
from .interface import BUIacl
|
||||
from ...utils import make_list
|
||||
import fnmatch
|
||||
import json
|
||||
import re
|
||||
|
||||
from ...config import config
|
||||
from ...ext.cache import cache
|
||||
|
||||
import re
|
||||
import json
|
||||
import fnmatch
|
||||
from ...utils import make_list
|
||||
from .interface import BUIacl
|
||||
|
||||
PARSE_EXCLUDE_KEYS = ["agents", "clients", "ro", "rw", "order", "exclude"]
|
||||
PARSE_RESERVED_KEYS = ["ro", "rw", "order", "exclude"]
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
# -*- coding: utf8 -*-
|
||||
import re
|
||||
import logging
|
||||
import re
|
||||
|
||||
from .interface import BUIaudit, BUIauditLogger as BUIauditLoggerInterface
|
||||
from ...tools.logging import logger as parent_logger
|
||||
from .interface import BUIaudit
|
||||
from .interface import BUIauditLogger as BUIauditLoggerInterface
|
||||
|
||||
|
||||
class BUIauditLoader(BUIaudit):
|
||||
|
|
|
|||
|
|
@ -1,13 +1,14 @@
|
|||
# -*- coding: utf8 -*-
|
||||
import os
|
||||
import inspect
|
||||
|
||||
from .interface import BUIaudit, BUIauditLogger as BUIauditLoggerInterface
|
||||
|
||||
from importlib import import_module
|
||||
import os
|
||||
from collections import OrderedDict
|
||||
from importlib import import_module
|
||||
|
||||
from flask_login import current_user
|
||||
|
||||
from .interface import BUIaudit
|
||||
from .interface import BUIauditLogger as BUIauditLoggerInterface
|
||||
|
||||
|
||||
class BUIauditLoader(BUIaudit):
|
||||
"""See :class:`burpui.misc.audit.interface.BUIaudit`"""
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
|
||||
"""
|
||||
import logging
|
||||
|
||||
from abc import ABCMeta, abstractmethod
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,10 +2,11 @@
|
|||
import re
|
||||
|
||||
from flask_login import AnonymousUserMixin
|
||||
from .interface import BUIhandler, BUIuser, BUIloader
|
||||
from ...utils import NOTIF_ERROR, NOTIF_OK, NOTIF_WARN, __
|
||||
from werkzeug.security import check_password_hash, generate_password_hash
|
||||
|
||||
from ...utils import NOTIF_ERROR, NOTIF_OK, NOTIF_WARN, __
|
||||
from .interface import BUIhandler, BUIloader, BUIuser
|
||||
|
||||
|
||||
class BasicLoader(BUIloader):
|
||||
"""The :class:`burpui.misc.auth.basic.BasicLoader` class loads the *Basic*
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
# -*- coding: utf8 -*-
|
||||
import os
|
||||
from collections import OrderedDict
|
||||
from importlib import import_module
|
||||
|
||||
from flask import session
|
||||
from flask_login import AnonymousUserMixin
|
||||
|
||||
from ...sessions import session_manager
|
||||
from ...utils import is_uuid
|
||||
from .interface import BUIhandler, BUIuser
|
||||
from ..acl.interface import BUIacl
|
||||
|
||||
from importlib import import_module
|
||||
from flask import session
|
||||
from collections import OrderedDict
|
||||
from flask_login import AnonymousUserMixin
|
||||
from .interface import BUIhandler, BUIuser
|
||||
|
||||
ACL_METHODS = BUIacl.__abstractmethods__
|
||||
|
||||
|
|
|
|||
|
|
@ -7,9 +7,10 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
from flask_login import UserMixin, AnonymousUserMixin
|
||||
from abc import ABCMeta, abstractmethod, abstractproperty
|
||||
|
||||
from flask_login import AnonymousUserMixin, UserMixin
|
||||
|
||||
from ...tools.logging import logger
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,21 +1,21 @@
|
|||
# -*- coding: utf8 -*-
|
||||
import ssl
|
||||
|
||||
from flask_login import AnonymousUserMixin
|
||||
|
||||
from .interface import BUIhandler, BUIuser, BUIloader
|
||||
from ...utils import __
|
||||
|
||||
import ssl
|
||||
from .interface import BUIhandler, BUIloader, BUIuser
|
||||
|
||||
try:
|
||||
from ldap3 import (
|
||||
Server,
|
||||
Connection,
|
||||
Tls,
|
||||
ALL,
|
||||
RESTARTABLE,
|
||||
AUTO_BIND_TLS_BEFORE_BIND,
|
||||
AUTO_BIND_NONE,
|
||||
AUTO_BIND_TLS_BEFORE_BIND,
|
||||
RESTARTABLE,
|
||||
SIMPLE,
|
||||
Connection,
|
||||
Server,
|
||||
Tls,
|
||||
)
|
||||
except ImportError:
|
||||
raise ImportError("Unable to load 'ldap3' module")
|
||||
|
|
@ -74,7 +74,7 @@ class LdapLoader(BUIloader):
|
|||
)
|
||||
except:
|
||||
pass
|
||||
for (opt, key) in mapping.items():
|
||||
for opt, key in mapping.items():
|
||||
setattr(self, opt, conf.safe_get(key, "force_string", section=self.section))
|
||||
|
||||
if self.validate and self.validate.lower() in ["none", "optional", "required"]:
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
# -*- coding: utf8 -*-
|
||||
import pwd
|
||||
import pam
|
||||
|
||||
import pam
|
||||
from flask_login import AnonymousUserMixin
|
||||
from .interface import BUIhandler, BUIuser, BUIloader
|
||||
|
||||
from ...utils import __
|
||||
from .interface import BUIhandler, BUIloader, BUIuser
|
||||
|
||||
|
||||
class LocalLoader(BUIloader):
|
||||
|
|
|
|||
|
|
@ -7,25 +7,26 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
import re
|
||||
import os
|
||||
import socket
|
||||
import time
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import socket
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
||||
from .interface import BUIbackend
|
||||
from ..parser.burp1 import Parser
|
||||
from ...utils import human_readable as _hr, BUIcompress, utc_to_local
|
||||
from ...security import sanitize_string
|
||||
from ...exceptions import BUIserverException
|
||||
from ..._compat import unquote, to_unicode, to_bytes
|
||||
|
||||
import time
|
||||
from shlex import quote
|
||||
|
||||
from ..._compat import to_bytes, to_unicode, unquote
|
||||
from ...exceptions import BUIserverException
|
||||
from ...security import sanitize_string
|
||||
from ...utils import BUIcompress
|
||||
from ...utils import human_readable as _hr
|
||||
from ...utils import utc_to_local
|
||||
from ..parser.burp1 import Parser
|
||||
from .interface import BUIbackend
|
||||
|
||||
|
||||
class Burp(BUIbackend):
|
||||
"""The :class:`burpui.misc.backend.burp1.Burp` class provides a consistent
|
||||
|
|
@ -510,7 +511,7 @@ class Burp(BUIbackend):
|
|||
|
||||
found = False
|
||||
# this method is not optimal, but it is easy to read and to maintain
|
||||
for (key, regex) in lookup_easy.items():
|
||||
for key, regex in lookup_easy.items():
|
||||
reg = re.search(regex, line)
|
||||
if reg:
|
||||
found = True
|
||||
|
|
@ -526,7 +527,7 @@ class Burp(BUIbackend):
|
|||
tmp = reg.group(1).split(":")
|
||||
tmp.reverse()
|
||||
fields = [0] * 4
|
||||
for (i, val) in enumerate(tmp):
|
||||
for i, val in enumerate(tmp):
|
||||
fields[i] = int(val)
|
||||
seconds = 0
|
||||
seconds += fields[0]
|
||||
|
|
@ -543,7 +544,7 @@ class Burp(BUIbackend):
|
|||
if found:
|
||||
continue
|
||||
|
||||
for (key, regex) in lookup_complex.items():
|
||||
for key, regex in lookup_complex.items():
|
||||
reg = re.search(regex, line)
|
||||
if reg:
|
||||
# self.logger.debug("match[1]: '{0}'".format(reg.group(1)))
|
||||
|
|
|
|||
|
|
@ -7,21 +7,21 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
import re
|
||||
import os
|
||||
import time
|
||||
import json
|
||||
|
||||
import os
|
||||
import re
|
||||
import time
|
||||
from collections import OrderedDict
|
||||
|
||||
from ..._compat import to_unicode
|
||||
from ...exceptions import BUIserverException
|
||||
from ...utils import human_readable as _hr
|
||||
from ...utils import utc_to_local
|
||||
from ..parser.burp2 import Parser
|
||||
from .burp1 import Burp as Burp1
|
||||
from .interface import BUIbackend
|
||||
from .utils.burp2 import Monitor
|
||||
from .utils.constant import BURP_REVERSE_COUNTERS, BURP_STATUS_FORMAT_V2
|
||||
from ..parser.burp2 import Parser
|
||||
from ...utils import human_readable as _hr, utc_to_local
|
||||
from ...exceptions import BUIserverException
|
||||
from ..._compat import to_unicode
|
||||
|
||||
|
||||
# Some functions are the same as in Burp1 backend
|
||||
|
|
@ -301,7 +301,7 @@ class Burp(Burp1):
|
|||
result[name] = counter["count"]
|
||||
else:
|
||||
result[name] = {}
|
||||
for (key, val) in counts.items():
|
||||
for key, val in counts.items():
|
||||
if val in counter:
|
||||
result[name][key] = counter[val]
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
"""
|
||||
import os
|
||||
import re
|
||||
|
||||
from abc import ABCMeta, abstractmethod
|
||||
|
||||
from ...tools.logging import logger
|
||||
|
|
|
|||
|
|
@ -1,19 +1,18 @@
|
|||
# -*- coding: utf8 -*-
|
||||
import re
|
||||
import socket
|
||||
import errno
|
||||
import json
|
||||
import re
|
||||
import socket
|
||||
import struct
|
||||
|
||||
from werkzeug.datastructures import ImmutableMultiDict as _ImmutableMultiDict
|
||||
|
||||
from .interface import BUIbackend
|
||||
from ..parser.interface import BUIparser
|
||||
from ...exceptions import BUIserverException
|
||||
from ..._compat import pickle, to_unicode, to_bytes
|
||||
from ...decorators import implement
|
||||
from ..._compat import pickle, to_bytes, to_unicode
|
||||
from ...datastructures import ImmutableMultiDict
|
||||
|
||||
from ...decorators import implement
|
||||
from ...exceptions import BUIserverException
|
||||
from ..parser.interface import BUIparser
|
||||
from .interface import BUIbackend
|
||||
|
||||
INTERFACE_METHODS = BUIbackend.__abstractmethods__
|
||||
PARSER_INTERFACE_METHODS = BUIparser.__abstractmethods__
|
||||
|
|
@ -556,8 +555,8 @@ class NClient(BUIbackend):
|
|||
):
|
||||
"""See :func:`burpui.misc.backend.interface.BUIbackend.store_conf_cli`"""
|
||||
# serialize data as it is a nested dict
|
||||
import hmac
|
||||
import hashlib
|
||||
import hmac
|
||||
from base64 import b64encode
|
||||
|
||||
if not isinstance(data, (_ImmutableMultiDict, ImmutableMultiDict)):
|
||||
|
|
@ -599,8 +598,8 @@ class NClient(BUIbackend):
|
|||
def store_conf_srv(self, data, conf=None, agent=None):
|
||||
"""See :func:`burpui.misc.backend.interface.BUIbackend.store_conf_srv`"""
|
||||
# serialize data as it is a nested dict
|
||||
import hmac
|
||||
import hashlib
|
||||
import hmac
|
||||
from base64 import b64encode
|
||||
|
||||
if not isinstance(data, (_ImmutableMultiDict, ImmutableMultiDict)):
|
||||
|
|
|
|||
|
|
@ -7,26 +7,26 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import json
|
||||
import ssl
|
||||
import time
|
||||
import trio
|
||||
import struct
|
||||
|
||||
import time
|
||||
from asyncio import iscoroutinefunction
|
||||
from functools import partial
|
||||
|
||||
from .burp2 import Burp as Burp2
|
||||
from .interface import BUIbackend, BUIBACKEND_INTERFACE_METHODS
|
||||
from .utils.constant import BURP_STATUS_FORMAT_V2
|
||||
from ..parser.burp2 import Parser
|
||||
from ...exceptions import BUIserverException
|
||||
import trio
|
||||
|
||||
from ..._compat import to_bytes, to_unicode
|
||||
from ...decorators import implement, usetriorun
|
||||
from ...utils import utc_to_local
|
||||
from ..._compat import to_unicode, to_bytes
|
||||
from ...exceptions import BUIserverException
|
||||
from ...tools.logging import logger
|
||||
from ...utils import utc_to_local
|
||||
from ..parser.burp2 import Parser
|
||||
from .burp2 import Burp as Burp2
|
||||
from .interface import BUIBACKEND_INTERFACE_METHODS, BUIbackend
|
||||
from .utils.constant import BURP_STATUS_FORMAT_V2
|
||||
|
||||
BUI_DEFAULTS = {
|
||||
"Parallel": {
|
||||
|
|
@ -136,7 +136,6 @@ class Connector:
|
|||
return result
|
||||
|
||||
async def status(self, query, timeout=None, cache=True):
|
||||
|
||||
request = {
|
||||
"query": query,
|
||||
"timeout": timeout,
|
||||
|
|
|
|||
|
|
@ -7,11 +7,10 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
import datetime
|
||||
import json
|
||||
import re
|
||||
import subprocess
|
||||
import json
|
||||
import datetime
|
||||
|
||||
from select import select
|
||||
|
||||
from ...._compat import to_bytes, to_unicode
|
||||
|
|
@ -21,8 +20,8 @@ from ....tools.logging import logger
|
|||
from .constant import (
|
||||
BURP_LIST_BATCH,
|
||||
BURP_MINIMAL_VERSION,
|
||||
BURP_STATUS_FORMAT_V2,
|
||||
BURP_STATUS_DELIMITER,
|
||||
BURP_STATUS_FORMAT_V2,
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -5,19 +5,18 @@
|
|||
:synopsis: Burp-UI configuration file parser for Burp1.
|
||||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
"""
|
||||
import re
|
||||
import os
|
||||
import json
|
||||
import codecs
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
|
||||
from glob import glob
|
||||
|
||||
from .doc import Doc
|
||||
from .utils import Config
|
||||
from .openssl import OSSLConf, OSSLAuth
|
||||
from ...exceptions import BUIserverException
|
||||
from ...utils import NOTIF_ERROR, NOTIF_OK, NOTIF_WARN
|
||||
from .doc import Doc
|
||||
from .openssl import OSSLAuth, OSSLConf
|
||||
from .utils import Config
|
||||
|
||||
|
||||
class Parser(Doc):
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@
|
|||
:synopsis: Burp-UI configuration file parser for Burp2.
|
||||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
"""
|
||||
from ..backend.utils.constant import BURP_BIND_MULTIPLE, BURP_LISTEN_OPTION
|
||||
from .burp1 import Parser as Burp1
|
||||
from ..backend.utils.constant import BURP_LISTEN_OPTION, BURP_BIND_MULTIPLE
|
||||
|
||||
|
||||
def __(string):
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@
|
|||
:synopsis: Burp-UI configuration file parser OpenSSL configuration.
|
||||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
"""
|
||||
import codecs
|
||||
import os
|
||||
import re
|
||||
import codecs
|
||||
import subprocess
|
||||
|
||||
from hashlib import md5
|
||||
|
||||
from OpenSSL import crypto
|
||||
|
||||
from ...tools.logging import logger
|
||||
|
|
|
|||
|
|
@ -6,20 +6,18 @@
|
|||
|
||||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
"""
|
||||
import codecs
|
||||
import os
|
||||
import re
|
||||
import codecs
|
||||
import shutil
|
||||
|
||||
from copy import copy
|
||||
from hashlib import md5
|
||||
from collections import OrderedDict
|
||||
from copy import copy
|
||||
from glob import glob
|
||||
from hashlib import md5
|
||||
|
||||
from ...utils import NOTIF_ERROR, NOTIF_OK, NOTIF_WARN
|
||||
from ...security import sanitize_string
|
||||
from ...datastructures import MultiDict
|
||||
|
||||
from ...security import sanitize_string
|
||||
from ...utils import NOTIF_ERROR, NOTIF_OK, NOTIF_WARN
|
||||
|
||||
RESET_IDENTIFIER = "_reset_bui_CUSTOM"
|
||||
BEGIN_TEMPLATES = "BURP-UI TEMPLATES"
|
||||
|
|
@ -1514,7 +1512,6 @@ class Config(File):
|
|||
return False
|
||||
|
||||
def _parse(self):
|
||||
|
||||
orig = self.files.copy()
|
||||
for root, conf in orig.items():
|
||||
conf.parse()
|
||||
|
|
|
|||
|
|
@ -9,9 +9,10 @@
|
|||
"""
|
||||
import datetime
|
||||
|
||||
from .ext.sql import db
|
||||
from flask import current_app, session
|
||||
|
||||
from .engines.server import BUIServer # noqa
|
||||
from .ext.sql import db
|
||||
|
||||
app = current_app # type: BUIServer
|
||||
|
||||
|
|
|
|||
|
|
@ -7,34 +7,34 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
import re
|
||||
import math
|
||||
import re
|
||||
import uuid
|
||||
|
||||
from flask import (
|
||||
request,
|
||||
render_template,
|
||||
redirect,
|
||||
url_for,
|
||||
abort,
|
||||
flash,
|
||||
Blueprint,
|
||||
session,
|
||||
abort,
|
||||
current_app,
|
||||
flash,
|
||||
g,
|
||||
redirect,
|
||||
render_template,
|
||||
request,
|
||||
session,
|
||||
url_for,
|
||||
)
|
||||
from flask_login import login_user, login_required, logout_user, current_user
|
||||
from flask_babel import gettext as _, refresh as refresh_babel
|
||||
from flask_babel import gettext as _
|
||||
from flask_babel import refresh as refresh_babel
|
||||
from flask_login import current_user, login_required, login_user, logout_user
|
||||
|
||||
from .desc import __url__, __doc__
|
||||
from .engines.server import BUIServer # noqa
|
||||
from .sessions import session_manager
|
||||
from ._compat import quote
|
||||
from .forms import LoginForm
|
||||
from .desc import __doc__, __url__
|
||||
from .engines.server import BUIServer # noqa
|
||||
from .exceptions import BUIserverException
|
||||
from .forms import LoginForm
|
||||
from .security import is_safe_url, sanitize_string
|
||||
from .sessions import session_manager
|
||||
from .utils import human_readable as _hr
|
||||
from .security import sanitize_string, is_safe_url
|
||||
|
||||
|
||||
bui = current_app # type: BUIServer
|
||||
view = Blueprint("view", "burpui", template_folder="templates")
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
from ._compat import to_unicode, urlparse, urljoin
|
||||
from ._compat import to_unicode, urljoin, urlparse
|
||||
|
||||
|
||||
def sanitize_string(string, strict=True, paranoid=False):
|
||||
|
|
@ -45,7 +45,7 @@ def basic_login_from_request(request, app):
|
|||
return None
|
||||
auth = request.authorization
|
||||
if auth:
|
||||
from flask import session, g
|
||||
from flask import g, session
|
||||
|
||||
app.logger.debug("Found Basic user: {}".format(auth.username))
|
||||
refresh = True
|
||||
|
|
@ -55,6 +55,7 @@ def basic_login_from_request(request, app):
|
|||
user = app.uhandler.user(auth.username, refresh)
|
||||
if user and user.active and user.login(auth.password):
|
||||
from flask_login import login_user
|
||||
|
||||
from .sessions import session_manager
|
||||
|
||||
if "login" in session and session["login"] != auth.username:
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
import datetime
|
||||
import re
|
||||
import uuid
|
||||
import datetime
|
||||
|
||||
from flask import session, request
|
||||
from flask import request, session
|
||||
|
||||
# used for completion
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -9,21 +9,21 @@ jQuery/Bootstrap
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
"""
|
||||
import os
|
||||
from datetime import datetime, timedelta
|
||||
from time import gmtime, sleep, strftime
|
||||
|
||||
from flask import current_app
|
||||
from datetime import timedelta, datetime
|
||||
from celery.schedules import crontab
|
||||
from celery.utils.log import get_task_logger
|
||||
from time import gmtime, strftime, sleep
|
||||
from flask import current_app
|
||||
|
||||
from burpui._compat import to_unicode # noqa
|
||||
from burpui.api.client import ClientTreeAll # noqa
|
||||
from burpui.config import config # noqa
|
||||
from burpui.ext.tasks import celery # noqa
|
||||
from burpui.ext.cache import cache # noqa
|
||||
from burpui.sessions import session_manager # noqa
|
||||
from burpui.engines.server import BUIServer # noqa
|
||||
from burpui.exceptions import BUIserverException, TooManyRecordsException # noqa
|
||||
from burpui.api.client import ClientTreeAll # noqa
|
||||
from burpui.ext.cache import cache # noqa
|
||||
from burpui.ext.tasks import celery # noqa
|
||||
from burpui.sessions import session_manager # noqa
|
||||
from burpui.utils import NOTIF_ERROR
|
||||
|
||||
try:
|
||||
|
|
|
|||
4
burpui/thirdparty/flask_bower.py
vendored
4
burpui/thirdparty/flask_bower.py
vendored
|
|
@ -342,9 +342,10 @@ library. If this is what you want to do, use the GNU Lesser General
|
|||
Public License instead of this License.
|
||||
"""
|
||||
import os
|
||||
from flask import abort, json, send_file, Blueprint, current_app, url_for
|
||||
import sys
|
||||
|
||||
from flask import Blueprint, abort, current_app, json, send_file, url_for
|
||||
|
||||
|
||||
def validate_parameter(param):
|
||||
if ".." in param or param.startswith("/"):
|
||||
|
|
@ -421,7 +422,6 @@ def overlay_url_for(endpoint, filename=None, **values):
|
|||
default_url_for_args["filename"] = filename
|
||||
|
||||
if endpoint == "static" or endpoint.endswith(".static"):
|
||||
|
||||
if os.path.sep in filename:
|
||||
filename_parts = filename.split(os.path.sep)
|
||||
component = filename_parts[0]
|
||||
|
|
|
|||
|
|
@ -7,14 +7,13 @@
|
|||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
|
||||
"""
|
||||
import os
|
||||
import datetime
|
||||
import math
|
||||
import os
|
||||
import string
|
||||
import sys
|
||||
import datetime
|
||||
import zipfile
|
||||
import tarfile
|
||||
|
||||
import zipfile
|
||||
from uuid import UUID
|
||||
|
||||
NOTIF_OK = 0
|
||||
|
|
|
|||
14
docs/_themes/flask_theme_support.py
vendored
14
docs/_themes/flask_theme_support.py
vendored
|
|
@ -1,18 +1,18 @@
|
|||
# flasky extensions. flasky pygments style based on tango style
|
||||
from pygments.style import Style
|
||||
from pygments.token import (
|
||||
Keyword,
|
||||
Name,
|
||||
Comment,
|
||||
String,
|
||||
Error,
|
||||
Generic,
|
||||
Keyword,
|
||||
Literal,
|
||||
Name,
|
||||
Number,
|
||||
Operator,
|
||||
Generic,
|
||||
Whitespace,
|
||||
Punctuation,
|
||||
Other,
|
||||
Literal,
|
||||
Punctuation,
|
||||
String,
|
||||
Whitespace,
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@
|
|||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
import sys
|
||||
import os
|
||||
import shlex
|
||||
import sys
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
from __future__ import with_statement
|
||||
|
||||
import logging
|
||||
from logging.config import fileConfig
|
||||
|
||||
from alembic import context
|
||||
from sqlalchemy import engine_from_config, pool
|
||||
from logging.config import fileConfig
|
||||
import logging
|
||||
|
||||
# this is the Alembic Config object, which provides
|
||||
# access to the values within the .ini file in use.
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ Create Date: 2016-07-18 11:22:27.613921
|
|||
revision = "225d9b2f0fb1"
|
||||
down_revision = None
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
|
||||
|
||||
def upgrade():
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ Create Date: 2018-10-03 11:47:20.028686
|
|||
revision = "4445080944ee"
|
||||
down_revision = "695dcbd29d4f"
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
|
||||
|
||||
def upgrade():
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ Create Date: 2017-02-12 14:51:38.147422
|
|||
revision = "56de018f4d88"
|
||||
down_revision = "fc07e3fa0086"
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
|
||||
|
||||
def upgrade():
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ Create Date: 2018-10-02 13:56:57.660204
|
|||
revision = "695dcbd29d4f"
|
||||
down_revision = "56de018f4d88"
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
|
||||
|
||||
def upgrade():
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ Create Date: 2016-08-30 11:47:35.513396
|
|||
revision = "7f317474332d"
|
||||
down_revision = "225d9b2f0fb1"
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
|
||||
|
||||
def upgrade():
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ Create Date: 2017-01-30 16:09:53.367166
|
|||
revision = "fc07e3fa0086"
|
||||
down_revision = "7f317474332d"
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
|
||||
|
||||
def upgrade():
|
||||
|
|
|
|||
|
|
@ -10,10 +10,9 @@ jQuery/Bootstrap
|
|||
|
||||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
"""
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
|
||||
from argparse import ArgumentParser
|
||||
|
||||
ROOT = os.path.dirname(os.path.realpath(__file__))
|
||||
|
|
@ -63,7 +62,7 @@ def parse_args(name=None):
|
|||
|
||||
if options.version:
|
||||
from burpui_agent import __title__
|
||||
from burpui_agent.desc import __version__, __release__
|
||||
from burpui_agent.desc import __release__, __version__
|
||||
|
||||
ver = "{}: v{}".format(mname or __title__, __version__)
|
||||
if options.log:
|
||||
|
|
@ -84,9 +83,9 @@ def main():
|
|||
|
||||
def agent(options=None):
|
||||
import trio
|
||||
from burpui_agent._compat import patch_json
|
||||
from burpui_agent.engines.agent import BUIAgent as Agent
|
||||
from burpui_agent.utils import lookup_file
|
||||
from burpui_agent._compat import patch_json
|
||||
|
||||
patch_json()
|
||||
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@
|
|||
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from setuptools import setup, find_packages
|
||||
from setuptools import find_packages, setup
|
||||
|
||||
# only used to build the package
|
||||
CWD = os.path.dirname(os.path.realpath(__file__))
|
||||
|
|
@ -126,9 +126,9 @@ from burpui_agent.desc import (
|
|||
__author__,
|
||||
__author_email__,
|
||||
__description__,
|
||||
__license__,
|
||||
__url__,
|
||||
__version__,
|
||||
__license__,
|
||||
)
|
||||
|
||||
name = __title__
|
||||
|
|
|
|||
|
|
@ -10,10 +10,9 @@ jQuery/Bootstrap
|
|||
|
||||
.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>
|
||||
"""
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
|
||||
from argparse import ArgumentParser
|
||||
|
||||
ROOT = os.path.dirname(os.path.realpath(__file__))
|
||||
|
|
@ -63,7 +62,7 @@ def parse_args(name=None):
|
|||
|
||||
if options.version:
|
||||
from burpui_monitor import __title__
|
||||
from burpui_monitor.desc import __version__, __release__
|
||||
from burpui_monitor.desc import __release__, __version__
|
||||
|
||||
ver = "{}: v{}".format(mname or __title__, __version__)
|
||||
if options.log:
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@
|
|||
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from setuptools import setup, find_packages
|
||||
from setuptools import find_packages, setup
|
||||
|
||||
# only used to build the package
|
||||
CWD = os.path.dirname(os.path.realpath(__file__))
|
||||
|
|
@ -128,9 +128,9 @@ from burpui_monitor.desc import (
|
|||
__author__,
|
||||
__author_email__,
|
||||
__description__,
|
||||
__license__,
|
||||
__url__,
|
||||
__version__,
|
||||
__license__,
|
||||
)
|
||||
|
||||
name = __title__
|
||||
|
|
|
|||
|
|
@ -2,10 +2,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import sys
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
from setuptools import setup, find_packages
|
||||
from setuptools import find_packages, setup
|
||||
|
||||
# only used to build the package
|
||||
ROOT = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', '..')
|
||||
|
|
@ -18,7 +18,6 @@ Burp-UI Meta package for ##TPL## requirements
|
|||
"""
|
||||
|
||||
from burpui_##TPL## import __author__, __author_email__, __description__, \
|
||||
__url__, __title__, __version__, __license__
|
||||
name = __title__
|
||||
author = __author__
|
||||
author_email = __author_email__
|
||||
|
|
|
|||
18
setup.py
18
setup.py
|
|
@ -2,16 +2,16 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import os
|
||||
import sys
|
||||
|
||||
from subprocess import check_output, call, STDOUT
|
||||
from distutils import log
|
||||
from distutils.core import Command
|
||||
from setuptools import setup, find_packages
|
||||
from setuptools.command.develop import develop
|
||||
from setuptools.command.sdist import sdist
|
||||
from setuptools.command.install import install
|
||||
from subprocess import STDOUT, call, check_output
|
||||
|
||||
from setuptools import find_packages, setup
|
||||
from setuptools.command.bdist_egg import bdist_egg
|
||||
from setuptools.command.develop import develop
|
||||
from setuptools.command.egg_info import egg_info
|
||||
from setuptools.command.install import install
|
||||
from setuptools.command.sdist import sdist
|
||||
|
||||
ROOT = os.path.join(os.path.dirname(os.path.realpath(__file__)))
|
||||
DEVNULL = open(os.devnull, "wb")
|
||||
|
|
@ -248,10 +248,10 @@ sys.path.insert(0, os.path.join(ROOT))
|
|||
from burpui.desc import (
|
||||
__author__,
|
||||
__author_email__,
|
||||
__description__,
|
||||
__url__,
|
||||
__description__, # noqa
|
||||
__title__,
|
||||
) # noqa
|
||||
__url__,
|
||||
)
|
||||
|
||||
name = __title__
|
||||
author = __author__
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf8 -*-
|
||||
import pytest
|
||||
import os
|
||||
import tempfile
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
import pytest
|
||||
|
||||
from burpui import create_app as BUIinit # noqa
|
||||
from burpui.misc.parser.burp2 import Parser # noqa
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
import os
|
||||
from urllib.request import urlopen
|
||||
|
||||
import pytest
|
||||
|
||||
from flask import url_for
|
||||
from urllib.request import urlopen
|
||||
|
||||
from burpui import create_app
|
||||
|
||||
|
|
@ -26,8 +25,8 @@ def app():
|
|||
|
||||
|
||||
def test_server_is_up_and_running(live_server):
|
||||
import socket
|
||||
import errno
|
||||
import socket
|
||||
|
||||
try:
|
||||
url = url_for("view.home", _external=True)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import os
|
||||
import pytest
|
||||
|
||||
import pytest
|
||||
from flask import url_for
|
||||
|
||||
from burpui.app import create_app
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import os
|
||||
import pytest
|
||||
|
||||
import pytest
|
||||
from flask import url_for
|
||||
|
||||
from burpui.app import create_app
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import os
|
||||
import pytest
|
||||
import tempfile
|
||||
|
||||
import pytest
|
||||
from flask import url_for
|
||||
|
||||
from burpui.app import create_app
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
import os
|
||||
import pytest
|
||||
from tempfile import mkstemp
|
||||
|
||||
import configobj
|
||||
import pytest
|
||||
|
||||
from burpui.config import BUIConfig
|
||||
|
||||
# import validate
|
||||
|
||||
from tempfile import mkstemp
|
||||
|
||||
from burpui.config import BUIConfig
|
||||
|
||||
TEST_CONFIG = b"""
|
||||
[Global]
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import os
|
||||
import pytest
|
||||
|
||||
import pytest
|
||||
from flask import url_for
|
||||
|
||||
from burpui.app import create_app
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import os
|
||||
import tempfile
|
||||
|
||||
from burpui.misc.parser.utils import OptionMulti, OptionInt
|
||||
from burpui.misc.parser.utils import OptionInt, OptionMulti
|
||||
|
||||
|
||||
def test_confsrv(parser):
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import os
|
||||
import pytest
|
||||
import mockredis
|
||||
|
||||
import mockredis
|
||||
import pytest
|
||||
from flask import url_for
|
||||
|
||||
from burpui.app import create_app
|
||||
|
|
@ -75,10 +75,11 @@ def test_current_session(app):
|
|||
# with c.session_transaction() as sess:
|
||||
# sess['authenticated'] = True
|
||||
|
||||
from burpui.sessions import session_manager
|
||||
from datetime import datetime
|
||||
|
||||
from burpui.ext.sql import db
|
||||
from burpui.models import Session
|
||||
from datetime import datetime
|
||||
from burpui.sessions import session_manager
|
||||
|
||||
session_manager.store_session("toto")
|
||||
assert session_manager.session_expired() is False
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import os
|
||||
import pytest
|
||||
|
||||
import pytest
|
||||
from flask import url_for
|
||||
|
||||
from burpui.app import create_app
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue