mirror of
https://github.com/ziirish/burp-ui.git
synced 2026-05-15 06:05:58 -06:00
86 lines
2.7 KiB
Python
86 lines
2.7 KiB
Python
# -*- coding: utf8 -*-
|
|
import logging
|
|
import re
|
|
|
|
from ...tools.logging import logger as parent_logger
|
|
from .interface import BUIaudit
|
|
from .interface import BUIauditLogger as BUIauditLoggerInterface
|
|
|
|
|
|
class BUIauditLoader(BUIaudit):
|
|
section = name = "BASIC:AUDIT"
|
|
|
|
logfile = None
|
|
max_bytes = None
|
|
rotate = None
|
|
|
|
def __init__(self, app):
|
|
"""
|
|
:param app: Instance of the app we are running in
|
|
:type app: :class:`burpui.engines.server.BUIServer`
|
|
"""
|
|
self.app = app
|
|
self.conf = self.app.conf
|
|
|
|
self.level = default = logging.getLevelName(self.app.logger.getEffectiveLevel())
|
|
|
|
if self.section in self.conf.options:
|
|
self.priority = self.conf.safe_get(
|
|
"priority", "integer", self.section, defaults=self.section
|
|
)
|
|
self.level = self.conf.safe_get(
|
|
"level", section=self.section, defaults=default
|
|
)
|
|
self.logfile = self.conf.safe_get("logfile", section=self.section)
|
|
self.max_bytes = self.conf.safe_get(
|
|
"max_bytes",
|
|
"force_string",
|
|
section=self.section,
|
|
defaults="30 * 1024 * 1024",
|
|
)
|
|
self.rotate = self.conf.safe_get(
|
|
"rotate", "integer", section=self.section, defaults=5
|
|
)
|
|
|
|
if self.max_bytes and re.match(r"(\d+\s*[+-/*]?\s*)+$", self.max_bytes):
|
|
self.max_bytes = eval(self.max_bytes)
|
|
else:
|
|
self.max_bytes = 0
|
|
|
|
if self.level != default:
|
|
self.level = logging.getLevelName(f"{self.level}".upper())
|
|
if not isinstance(self.level, int):
|
|
self.level = default
|
|
|
|
self._logger = BUIauditLogger(self)
|
|
|
|
|
|
class BUIauditLogger(BUIauditLoggerInterface):
|
|
_logger = parent_logger.getChild("audit") # type: logging.Logger
|
|
|
|
def __init__(self, loader):
|
|
self.loader = loader
|
|
self._level = self.loader.level
|
|
LOG_FORMAT = "[%(asctime)s] AUDIT %(levelname)s in %(from)s: %(message)s"
|
|
|
|
if self.loader.logfile and self.loader.logfile.lower() != "none":
|
|
from logging.handlers import RotatingFileHandler
|
|
|
|
handler = RotatingFileHandler(
|
|
self.loader.logfile,
|
|
maxBytes=self.loader.max_bytes,
|
|
backupCount=self.loader.rotate,
|
|
)
|
|
else:
|
|
from logging import StreamHandler
|
|
|
|
handler = StreamHandler()
|
|
|
|
handler.setLevel(self.level)
|
|
handler.setFormatter(logging.Formatter(LOG_FORMAT))
|
|
|
|
self._logger.setLevel(self.level)
|
|
self._logger.addHandler(handler)
|
|
|
|
def log(self, level, message, *args, **kwargs):
|
|
self._logger.log(level, message, *args, **kwargs)
|