From 7f2832d1fa1a2987659dbcf65b9bb1c611dbe67f Mon Sep 17 00:00:00 2001 From: ziirish Date: Sun, 19 Mar 2023 15:13:01 +0100 Subject: [PATCH] lint --- burpui/__main__.py | 7 ++-- burpui/_compat.py | 3 +- burpui/api/__init__.py | 16 ++++---- burpui/api/admin.py | 17 +++++---- burpui/api/backup.py | 10 ++--- burpui/api/client.py | 18 ++++----- burpui/api/clients.py | 22 +++++------ burpui/api/custom/fields.py | 10 ++--- burpui/api/custom/my_fields.py | 10 ++--- burpui/api/misc.py | 38 +++++++++---------- burpui/api/prefs.py | 6 +-- burpui/api/restore.py | 16 ++++---- burpui/api/servers.py | 16 ++++---- burpui/api/settings.py | 26 ++++++------- burpui/api/tasks.py | 36 +++++++++--------- burpui/app.py | 26 +++++++------ burpui/cli.py | 31 ++++++++------- burpui/config.py | 4 +- burpui/decorators.py | 5 +-- burpui/engines/agent.py | 17 ++++----- burpui/engines/monitor.py | 21 +++++----- burpui/engines/server.py | 17 ++++----- burpui/ext/cache.py | 1 - burpui/ext/i18n.py | 3 +- burpui/ext/ws.py | 3 +- burpui/extensions.py | 3 +- burpui/forms.py | 8 ++-- burpui/misc/acl/basic.py | 4 +- burpui/misc/acl/handler.py | 5 +-- burpui/misc/acl/interface.py | 3 +- burpui/misc/acl/meta.py | 12 +++--- burpui/misc/audit/basic.py | 5 ++- burpui/misc/audit/handler.py | 11 +++--- burpui/misc/audit/interface.py | 1 - burpui/misc/auth/basic.py | 5 ++- burpui/misc/auth/handler.py | 12 +++--- burpui/misc/auth/interface.py | 3 +- burpui/misc/auth/ldap.py | 18 ++++----- burpui/misc/auth/local.py | 5 ++- burpui/misc/backend/burp1.py | 31 +++++++-------- burpui/misc/backend/burp2.py | 18 ++++----- burpui/misc/backend/interface.py | 1 - burpui/misc/backend/multi.py | 19 +++++----- burpui/misc/backend/parallel.py | 23 ++++++----- burpui/misc/backend/utils/burp2.py | 7 ++-- burpui/misc/parser/burp1.py | 13 +++---- burpui/misc/parser/burp2.py | 2 +- burpui/misc/parser/openssl.py | 4 +- burpui/misc/parser/utils.py | 13 +++---- burpui/models.py | 3 +- burpui/routes.py | 32 ++++++++-------- burpui/security.py | 5 ++- burpui/sessions.py | 4 +- burpui/tasks.py | 14 +++---- burpui/thirdparty/flask_bower.py | 4 +- burpui/utils.py | 7 ++-- docs/_themes/flask_theme_support.py | 14 +++---- docs/conf.py | 2 +- migrations/env.py | 6 ++- migrations/versions/225d9b2f0fb1_initial.py | 2 +- .../4445080944ee_hidden_hosts_management.py | 2 +- .../versions/56de018f4d88_user_prefs.py | 2 +- .../695dcbd29d4f_increase_pref_value_size.py | 2 +- .../versions/7f317474332d_handle_sessions.py | 2 +- .../fc07e3fa0086_sql_compatibility.py | 2 +- .../burpui_agent-decoy/__main__.py | 7 ++-- pkgs/burp-ui-agent/setup.py | 6 +-- .../burpui_monitor-decoy/__main__.py | 5 +-- pkgs/burp-ui-monitor/setup.py | 6 +-- pkgs/burp-ui-tpl/setup.py | 5 +-- setup.py | 18 ++++----- tests/conftest.py | 5 ++- tests/functional/test_live_server.py | 5 +-- tests/unit/test_acl.py | 2 +- tests/unit/test_api.py | 2 +- tests/unit/test_basic_auth.py | 2 +- tests/unit/test_config.py | 9 +++-- tests/unit/test_login.py | 2 +- tests/unit/test_parser.py | 2 +- tests/unit/test_redis.py | 9 +++-- tests/unit/test_routes.py | 2 +- 81 files changed, 399 insertions(+), 396 deletions(-) diff --git a/burpui/__main__.py b/burpui/__main__.py index 67637aae..a3cb817e 100644 --- a/burpui/__main__.py +++ b/burpui/__main__.py @@ -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 diff --git a/burpui/_compat.py b/burpui/_compat.py index 9965ee41..7766240b 100644 --- a/burpui/_compat.py +++ b/burpui/_compat.py @@ -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,) diff --git a/burpui/api/__init__.py b/burpui/api/__init__.py index 94fa2e00..20dbc564 100644 --- a/burpui/api/__init__.py +++ b/burpui/api/__init__.py @@ -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 diff --git a/burpui/api/admin.py b/burpui/api/admin.py index abba9b85..12baff63 100644 --- a/burpui/api/admin.py +++ b/burpui/api/admin.py @@ -7,20 +7,21 @@ .. moduleauthor:: Ziirish """ -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") diff --git a/burpui/api/backup.py b/burpui/api/backup.py index 6d5808c9..9f0e985b 100644 --- a/burpui/api/backup.py +++ b/burpui/api/backup.py @@ -7,14 +7,14 @@ .. moduleauthor:: Ziirish """ -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") diff --git a/burpui/api/client.py b/burpui/api/client.py index 708a4f27..bea9ba08 100644 --- a/burpui/api/client.py +++ b/burpui/api/client.py @@ -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") diff --git a/burpui/api/clients.py b/burpui/api/clients.py index d3f0e758..285c1b5c 100644 --- a/burpui/api/clients.py +++ b/burpui/api/clients.py @@ -7,18 +7,18 @@ .. moduleauthor:: Ziirish """ -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] diff --git a/burpui/api/custom/fields.py b/burpui/api/custom/fields.py index 60401712..34d4a43f 100644 --- a/burpui/api/custom/fields.py +++ b/burpui/api/custom/fields.py @@ -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, diff --git a/burpui/api/custom/my_fields.py b/burpui/api/custom/my_fields.py index e14e02a8..17d1c2c0 100644 --- a/burpui/api/custom/my_fields.py +++ b/burpui/api/custom/my_fields.py @@ -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()) diff --git a/burpui/api/misc.py b/burpui/api/misc.py index b7c607da..f16da3fa 100644 --- a/burpui/api/misc.py +++ b/burpui/api/misc.py @@ -7,22 +7,22 @@ .. moduleauthor:: Ziirish """ -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() diff --git a/burpui/api/prefs.py b/burpui/api/prefs.py index 8cbf97c9..08d83bc2 100644 --- a/burpui/api/prefs.py +++ b/burpui/api/prefs.py @@ -7,14 +7,14 @@ .. moduleauthor:: Ziirish """ -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") diff --git a/burpui/api/restore.py b/burpui/api/restore.py index b628e1d4..cdc5ef65 100644 --- a/burpui/api/restore.py +++ b/burpui/api/restore.py @@ -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") diff --git a/burpui/api/servers.py b/burpui/api/servers.py index 80614f22..fd4d92c7 100644 --- a/burpui/api/servers.py +++ b/burpui/api/servers.py @@ -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") diff --git a/burpui/api/settings.py b/burpui/api/settings.py index f5929638..7e0d3628 100644 --- a/burpui/api/settings.py +++ b/burpui/api/settings.py @@ -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") diff --git a/burpui/api/tasks.py b/burpui/api/tasks.py index 8fc028ca..59d388e1 100644 --- a/burpui/api/tasks.py +++ b/burpui/api/tasks.py @@ -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 diff --git a/burpui/app.py b/burpui/app.py index b711afb5..1cf00aed 100644 --- a/burpui/app.py +++ b/burpui/app.py @@ -9,19 +9,19 @@ jQuery/Bootstrap .. moduleauthor:: Ziirish """ +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, diff --git a/burpui/cli.py b/burpui/cli.py index 2d0e14f2..b7cba2fd 100644 --- a/burpui/cli.py +++ b/burpui/cli.py @@ -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: diff --git a/burpui/config.py b/burpui/config.py index d6acec53..6c20e9c8 100644 --- a/burpui/config.py +++ b/burpui/config.py @@ -7,9 +7,10 @@ .. moduleauthor:: Ziirish """ +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: diff --git a/burpui/decorators.py b/burpui/decorators.py index d311167b..50abde93 100644 --- a/burpui/decorators.py +++ b/burpui/decorators.py @@ -7,9 +7,8 @@ .. moduleauthor:: Ziirish """ -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() diff --git a/burpui/engines/agent.py b/burpui/engines/agent.py index 05c500e5..aff799b5 100644 --- a/burpui/engines/agent.py +++ b/burpui/engines/agent.py @@ -7,23 +7,22 @@ .. moduleauthor:: Ziirish """ -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"]) diff --git a/burpui/engines/monitor.py b/burpui/engines/monitor.py index dbfb5e67..4e85ae05 100644 --- a/burpui/engines/monitor.py +++ b/burpui/engines/monitor.py @@ -7,25 +7,24 @@ .. moduleauthor:: Ziirish """ -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() diff --git a/burpui/engines/server.py b/burpui/engines/server.py index 31010f8f..a8c9aa4b 100644 --- a/burpui/engines/server.py +++ b/burpui/engines/server.py @@ -7,22 +7,21 @@ .. moduleauthor:: Ziirish """ +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": { diff --git a/burpui/ext/cache.py b/burpui/ext/cache.py index e10b3bf5..0ce2440b 100644 --- a/burpui/ext/cache.py +++ b/burpui/ext/cache.py @@ -9,7 +9,6 @@ """ from flask_caching import Cache - cache = Cache( config={ "CACHE_TYPE": "simple", diff --git a/burpui/ext/i18n.py b/burpui/ext/i18n.py index c933702d..24af2ec7 100644 --- a/burpui/ext/i18n.py +++ b/burpui/ext/i18n.py @@ -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() diff --git a/burpui/ext/ws.py b/burpui/ext/ws.py index 39d42bc4..79f98e0d 100644 --- a/burpui/ext/ws.py +++ b/burpui/ext/ws.py @@ -7,9 +7,10 @@ .. moduleauthor:: Ziirish """ -from ..config import config from flask_socketio import SocketIO +from ..config import config + options = {} options["async_mode"] = config.get("WS_ASYNC_MODE", "gevent") diff --git a/burpui/extensions.py b/burpui/extensions.py index 46883867..b0642e30 100644 --- a/burpui/extensions.py +++ b/burpui/extensions.py @@ -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() diff --git a/burpui/forms.py b/burpui/forms.py index c940b7f2..18217a58 100644 --- a/burpui/forms.py +++ b/burpui/forms.py @@ -7,11 +7,11 @@ .. moduleauthor:: Ziirish """ -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): diff --git a/burpui/misc/acl/basic.py b/burpui/misc/acl/basic.py index 5fc7e50b..dd072d14 100644 --- a/burpui/misc/acl/basic.py +++ b/burpui/misc/acl/basic.py @@ -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): diff --git a/burpui/misc/acl/handler.py b/burpui/misc/acl/handler.py index 0900f110..97d2d769 100644 --- a/burpui/misc/acl/handler.py +++ b/burpui/misc/acl/handler.py @@ -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" diff --git a/burpui/misc/acl/interface.py b/burpui/misc/acl/interface.py index 09392394..7985b5ad 100644 --- a/burpui/misc/acl/interface.py +++ b/burpui/misc/acl/interface.py @@ -7,9 +7,8 @@ .. moduleauthor:: Ziirish """ -from abc import ABCMeta, abstractmethod, abstractproperty - import logging +from abc import ABCMeta, abstractmethod, abstractproperty class BUIaclLoader(object, metaclass=ABCMeta): diff --git a/burpui/misc/acl/meta.py b/burpui/misc/acl/meta.py index b99e3667..ac914941 100644 --- a/burpui/misc/acl/meta.py +++ b/burpui/misc/acl/meta.py @@ -7,14 +7,14 @@ .. moduleauthor:: Ziirish """ -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"] diff --git a/burpui/misc/audit/basic.py b/burpui/misc/audit/basic.py index 538b21f0..1b6228a0 100644 --- a/burpui/misc/audit/basic.py +++ b/burpui/misc/audit/basic.py @@ -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): diff --git a/burpui/misc/audit/handler.py b/burpui/misc/audit/handler.py index aa76c704..4a5d43b3 100644 --- a/burpui/misc/audit/handler.py +++ b/burpui/misc/audit/handler.py @@ -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`""" diff --git a/burpui/misc/audit/interface.py b/burpui/misc/audit/interface.py index de3b80a6..7dc9cb29 100644 --- a/burpui/misc/audit/interface.py +++ b/burpui/misc/audit/interface.py @@ -8,7 +8,6 @@ """ import logging - from abc import ABCMeta, abstractmethod diff --git a/burpui/misc/auth/basic.py b/burpui/misc/auth/basic.py index 899ff7f2..0dd12ad9 100644 --- a/burpui/misc/auth/basic.py +++ b/burpui/misc/auth/basic.py @@ -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* diff --git a/burpui/misc/auth/handler.py b/burpui/misc/auth/handler.py index cdb53585..a2694f87 100644 --- a/burpui/misc/auth/handler.py +++ b/burpui/misc/auth/handler.py @@ -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__ diff --git a/burpui/misc/auth/interface.py b/burpui/misc/auth/interface.py index f1ab432e..b2f63f24 100644 --- a/burpui/misc/auth/interface.py +++ b/burpui/misc/auth/interface.py @@ -7,9 +7,10 @@ .. moduleauthor:: Ziirish """ -from flask_login import UserMixin, AnonymousUserMixin from abc import ABCMeta, abstractmethod, abstractproperty +from flask_login import AnonymousUserMixin, UserMixin + from ...tools.logging import logger diff --git a/burpui/misc/auth/ldap.py b/burpui/misc/auth/ldap.py index 15347342..6bcda2ea 100644 --- a/burpui/misc/auth/ldap.py +++ b/burpui/misc/auth/ldap.py @@ -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"]: diff --git a/burpui/misc/auth/local.py b/burpui/misc/auth/local.py index 94107e2d..702ae633 100644 --- a/burpui/misc/auth/local.py +++ b/burpui/misc/auth/local.py @@ -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): diff --git a/burpui/misc/backend/burp1.py b/burpui/misc/backend/burp1.py index 320bbfd2..44617c10 100644 --- a/burpui/misc/backend/burp1.py +++ b/burpui/misc/backend/burp1.py @@ -7,25 +7,26 @@ .. moduleauthor:: Ziirish """ -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))) diff --git a/burpui/misc/backend/burp2.py b/burpui/misc/backend/burp2.py index 312673ba..daf4106c 100644 --- a/burpui/misc/backend/burp2.py +++ b/burpui/misc/backend/burp2.py @@ -7,21 +7,21 @@ .. moduleauthor:: Ziirish """ -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: diff --git a/burpui/misc/backend/interface.py b/burpui/misc/backend/interface.py index 40400674..87194ef1 100644 --- a/burpui/misc/backend/interface.py +++ b/burpui/misc/backend/interface.py @@ -9,7 +9,6 @@ """ import os import re - from abc import ABCMeta, abstractmethod from ...tools.logging import logger diff --git a/burpui/misc/backend/multi.py b/burpui/misc/backend/multi.py index 7e378c15..7e33c971 100644 --- a/burpui/misc/backend/multi.py +++ b/burpui/misc/backend/multi.py @@ -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)): diff --git a/burpui/misc/backend/parallel.py b/burpui/misc/backend/parallel.py index fcf4e7a8..daa44950 100644 --- a/burpui/misc/backend/parallel.py +++ b/burpui/misc/backend/parallel.py @@ -7,26 +7,26 @@ .. moduleauthor:: Ziirish """ +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, diff --git a/burpui/misc/backend/utils/burp2.py b/burpui/misc/backend/utils/burp2.py index f2653b9a..061256b5 100644 --- a/burpui/misc/backend/utils/burp2.py +++ b/burpui/misc/backend/utils/burp2.py @@ -7,11 +7,10 @@ .. moduleauthor:: Ziirish """ +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, ) diff --git a/burpui/misc/parser/burp1.py b/burpui/misc/parser/burp1.py index 4ff03307..27f6ad27 100644 --- a/burpui/misc/parser/burp1.py +++ b/burpui/misc/parser/burp1.py @@ -5,19 +5,18 @@ :synopsis: Burp-UI configuration file parser for Burp1. .. moduleauthor:: Ziirish """ -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): diff --git a/burpui/misc/parser/burp2.py b/burpui/misc/parser/burp2.py index b771ef55..e1111d50 100644 --- a/burpui/misc/parser/burp2.py +++ b/burpui/misc/parser/burp2.py @@ -5,8 +5,8 @@ :synopsis: Burp-UI configuration file parser for Burp2. .. moduleauthor:: Ziirish """ +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): diff --git a/burpui/misc/parser/openssl.py b/burpui/misc/parser/openssl.py index d86dfcf6..b770a9cb 100644 --- a/burpui/misc/parser/openssl.py +++ b/burpui/misc/parser/openssl.py @@ -5,12 +5,12 @@ :synopsis: Burp-UI configuration file parser OpenSSL configuration. .. moduleauthor:: Ziirish """ +import codecs import os import re -import codecs import subprocess - from hashlib import md5 + from OpenSSL import crypto from ...tools.logging import logger diff --git a/burpui/misc/parser/utils.py b/burpui/misc/parser/utils.py index 7c561fb4..801dbd67 100644 --- a/burpui/misc/parser/utils.py +++ b/burpui/misc/parser/utils.py @@ -6,20 +6,18 @@ .. moduleauthor:: Ziirish """ +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() diff --git a/burpui/models.py b/burpui/models.py index c97783d6..cab05097 100644 --- a/burpui/models.py +++ b/burpui/models.py @@ -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 diff --git a/burpui/routes.py b/burpui/routes.py index e7aad753..74d8f28f 100644 --- a/burpui/routes.py +++ b/burpui/routes.py @@ -7,34 +7,34 @@ .. moduleauthor:: Ziirish """ -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") diff --git a/burpui/security.py b/burpui/security.py index 702e1034..abbbce12 100644 --- a/burpui/security.py +++ b/burpui/security.py @@ -7,7 +7,7 @@ .. moduleauthor:: Ziirish """ -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: diff --git a/burpui/sessions.py b/burpui/sessions.py index b578ce66..46b1d3bf 100644 --- a/burpui/sessions.py +++ b/burpui/sessions.py @@ -7,11 +7,11 @@ .. moduleauthor:: Ziirish """ +import datetime import re import uuid -import datetime -from flask import session, request +from flask import request, session # used for completion try: diff --git a/burpui/tasks.py b/burpui/tasks.py index b80128de..d5b026b1 100644 --- a/burpui/tasks.py +++ b/burpui/tasks.py @@ -9,21 +9,21 @@ jQuery/Bootstrap .. moduleauthor:: Ziirish """ 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: diff --git a/burpui/thirdparty/flask_bower.py b/burpui/thirdparty/flask_bower.py index 6e1936f4..80a2c599 100644 --- a/burpui/thirdparty/flask_bower.py +++ b/burpui/thirdparty/flask_bower.py @@ -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] diff --git a/burpui/utils.py b/burpui/utils.py index 76b46503..145b1a15 100644 --- a/burpui/utils.py +++ b/burpui/utils.py @@ -7,14 +7,13 @@ .. moduleauthor:: Ziirish """ -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 diff --git a/docs/_themes/flask_theme_support.py b/docs/_themes/flask_theme_support.py index 0dcf53b7..64e24996 100644 --- a/docs/_themes/flask_theme_support.py +++ b/docs/_themes/flask_theme_support.py @@ -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, ) diff --git a/docs/conf.py b/docs/conf.py index f6e036e5..304f96ff 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -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 diff --git a/migrations/env.py b/migrations/env.py index 2535229a..99846122 100755 --- a/migrations/env.py +++ b/migrations/env.py @@ -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. diff --git a/migrations/versions/225d9b2f0fb1_initial.py b/migrations/versions/225d9b2f0fb1_initial.py index 5f47aa08..dc5c980f 100644 --- a/migrations/versions/225d9b2f0fb1_initial.py +++ b/migrations/versions/225d9b2f0fb1_initial.py @@ -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(): diff --git a/migrations/versions/4445080944ee_hidden_hosts_management.py b/migrations/versions/4445080944ee_hidden_hosts_management.py index f8b4fddd..d853ad3d 100644 --- a/migrations/versions/4445080944ee_hidden_hosts_management.py +++ b/migrations/versions/4445080944ee_hidden_hosts_management.py @@ -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(): diff --git a/migrations/versions/56de018f4d88_user_prefs.py b/migrations/versions/56de018f4d88_user_prefs.py index 221e8dd1..3db4df6f 100644 --- a/migrations/versions/56de018f4d88_user_prefs.py +++ b/migrations/versions/56de018f4d88_user_prefs.py @@ -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(): diff --git a/migrations/versions/695dcbd29d4f_increase_pref_value_size.py b/migrations/versions/695dcbd29d4f_increase_pref_value_size.py index 16dc6397..a2e099e6 100644 --- a/migrations/versions/695dcbd29d4f_increase_pref_value_size.py +++ b/migrations/versions/695dcbd29d4f_increase_pref_value_size.py @@ -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(): diff --git a/migrations/versions/7f317474332d_handle_sessions.py b/migrations/versions/7f317474332d_handle_sessions.py index 96e264b1..a9df1ada 100644 --- a/migrations/versions/7f317474332d_handle_sessions.py +++ b/migrations/versions/7f317474332d_handle_sessions.py @@ -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(): diff --git a/migrations/versions/fc07e3fa0086_sql_compatibility.py b/migrations/versions/fc07e3fa0086_sql_compatibility.py index b1ee7dea..fcad47f5 100644 --- a/migrations/versions/fc07e3fa0086_sql_compatibility.py +++ b/migrations/versions/fc07e3fa0086_sql_compatibility.py @@ -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(): diff --git a/pkgs/burp-ui-agent/burpui_agent-decoy/__main__.py b/pkgs/burp-ui-agent/burpui_agent-decoy/__main__.py index cd9c601e..952a4d0e 100644 --- a/pkgs/burp-ui-agent/burpui_agent-decoy/__main__.py +++ b/pkgs/burp-ui-agent/burpui_agent-decoy/__main__.py @@ -10,10 +10,9 @@ jQuery/Bootstrap .. moduleauthor:: Ziirish """ +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() diff --git a/pkgs/burp-ui-agent/setup.py b/pkgs/burp-ui-agent/setup.py index 5f2ee1c0..ded386b0 100755 --- a/pkgs/burp-ui-agent/setup.py +++ b/pkgs/burp-ui-agent/setup.py @@ -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__ diff --git a/pkgs/burp-ui-monitor/burpui_monitor-decoy/__main__.py b/pkgs/burp-ui-monitor/burpui_monitor-decoy/__main__.py index 09cde19c..13eec62f 100644 --- a/pkgs/burp-ui-monitor/burpui_monitor-decoy/__main__.py +++ b/pkgs/burp-ui-monitor/burpui_monitor-decoy/__main__.py @@ -10,10 +10,9 @@ jQuery/Bootstrap .. moduleauthor:: Ziirish """ +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: diff --git a/pkgs/burp-ui-monitor/setup.py b/pkgs/burp-ui-monitor/setup.py index 9a8acb8e..f26c2490 100755 --- a/pkgs/burp-ui-monitor/setup.py +++ b/pkgs/burp-ui-monitor/setup.py @@ -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__ diff --git a/pkgs/burp-ui-tpl/setup.py b/pkgs/burp-ui-tpl/setup.py index 043fbf63..736627d0 100755 --- a/pkgs/burp-ui-tpl/setup.py +++ b/pkgs/burp-ui-tpl/setup.py @@ -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__ diff --git a/setup.py b/setup.py index 5d7ba227..ed889f19 100755 --- a/setup.py +++ b/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__ diff --git a/tests/conftest.py b/tests/conftest.py index dbaaff42..32e3f3f6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -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 diff --git a/tests/functional/test_live_server.py b/tests/functional/test_live_server.py index 24f42149..5c69fa87 100644 --- a/tests/functional/test_live_server.py +++ b/tests/functional/test_live_server.py @@ -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) diff --git a/tests/unit/test_acl.py b/tests/unit/test_acl.py index 31e1c9b1..1e379ec6 100644 --- a/tests/unit/test_acl.py +++ b/tests/unit/test_acl.py @@ -1,6 +1,6 @@ import os -import pytest +import pytest from flask import url_for from burpui.app import create_app diff --git a/tests/unit/test_api.py b/tests/unit/test_api.py index 7db025df..c12afb31 100644 --- a/tests/unit/test_api.py +++ b/tests/unit/test_api.py @@ -1,6 +1,6 @@ import os -import pytest +import pytest from flask import url_for from burpui.app import create_app diff --git a/tests/unit/test_basic_auth.py b/tests/unit/test_basic_auth.py index e41c1607..426260b3 100644 --- a/tests/unit/test_basic_auth.py +++ b/tests/unit/test_basic_auth.py @@ -1,7 +1,7 @@ import os -import pytest import tempfile +import pytest from flask import url_for from burpui.app import create_app diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index 12c5d8db..7e0fef1b 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -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] diff --git a/tests/unit/test_login.py b/tests/unit/test_login.py index 16a76068..7c061b9c 100644 --- a/tests/unit/test_login.py +++ b/tests/unit/test_login.py @@ -1,6 +1,6 @@ import os -import pytest +import pytest from flask import url_for from burpui.app import create_app diff --git a/tests/unit/test_parser.py b/tests/unit/test_parser.py index ce371307..e7bde410 100644 --- a/tests/unit/test_parser.py +++ b/tests/unit/test_parser.py @@ -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): diff --git a/tests/unit/test_redis.py b/tests/unit/test_redis.py index 1b63f15f..ea92868f 100644 --- a/tests/unit/test_redis.py +++ b/tests/unit/test_redis.py @@ -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 diff --git a/tests/unit/test_routes.py b/tests/unit/test_routes.py index bf9686ca..dcd792e2 100644 --- a/tests/unit/test_routes.py +++ b/tests/unit/test_routes.py @@ -1,6 +1,6 @@ import os -import pytest +import pytest from flask import url_for from burpui.app import create_app