Source code for burpui.misc.parser.interface

# -*- coding: utf8 -*-
"""
.. module:: burpui.misc.parser.interface
    :platform: Unix
    :synopsis: Burp-UI parser interface.

.. moduleauthor:: Ziirish <hi+burpui@ziirish.me>

"""
from abc import ABCMeta, abstractmethod

from ...tools.logging import logger


[docs]class BUIparser(object, metaclass=ABCMeta): """:class:`burpui.misc.parser.interface.BUIparser` defines a generic interface for ``burp`` configuration files parser. """ logger = logger
[docs] @abstractmethod def read_server_conf(self, conf=None): """:func:`burpui.misc.parser.interface.BUIparser.read_server_conf` is called by :func:`burpui.misc.backend.interface.BUIbackend.read_conf_srv` in order to parse the burp-server configuration file. :param conf: Complementary configuration file (for instance, file inclusions) :type conf: str :returns: Dict of options Example:: { "boolean": [ { "name": "hardlinked_archive", "value": false }, { "name": "syslog", "value": true }, ], "clients": [ { "name": "client1", "value": "/etc/burp/clientconfdir/client1" }, { "name": "client2", "value": "/etc/burp/clientconfdir/client2" }, ], "common": [ { "name": "mode", "value": "server" }, { "name": "directory", "value": "/srv/burp" }, ], "includes": [], "includes_ext": [], "integer": [ { "name": "port", "value": 4971 }, { "name": "status_port", "value": 4972 }, { "name": "max_children", "value": 5 }, { "name": "max_status_children", "value": 5 } ], "multi": [ { "name": "keep", "value": [ "7", "4", "4" ] }, { "name": "timer_arg", "value": [ "12h", "Mon,Tue,Thu,Fri,17,18,19,20,21,22,23", "Wed,Sat,Sun,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23" ] }, ], "hierarchy": [ { "children": [ { "children": [], "dir": "/tmp/burp/conf.d", "full": "/tmp/burp/conf.d/empty.conf", "name": "empty.conf", "parent": "/tmp/burp/burp-server.conf" }, { "children": [], "dir": "/tmp/burp/conf.d", "full": "/tmp/burp/conf.d/ipv4.conf", "name": "ipv4.conf", "parent": "/tmp/burp/burp-server.conf" } ], "dir": "/tmp/burp", "full": "/tmp/burp/burp-server.conf", "name": "burp-server.conf", "parent": null } ] } """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def store_client_conf( self, data, client=None, conf=None, template=False, statictemplate=False, content="", ): """:func:`burpui.misc.parser.interface.BUIparser.store_client_conf` is used by :func:`burpui.misc.backend.BUIbackend.store_conf_cli`. It works the same way as :func:`burpui.misc.parser.interface.BUIparser.store_conf` with an extra parameter: :param client: Name of the client for which to apply this config :type client: str :param conf: The explicit filename of the conf :type conf: str :param template: Is this file a template :type template: bool :param statictemplate: Whether we remove a static template :type statictemplate: bool :param content: What default content to put in the file :type content: str """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def store_conf( self, data, conf=None, client=None, mode="srv", insecure=False, template=False, statictemplate=False, content="", ): """:func:`burpui.misc.parser.interface.BUIparser.store_conf` is used to store the configuration from the web-ui into the actual configuration files. It is used by :func:`burpui.misc.backend.BUIbackend.store_conf_srv`. :param data: Data sent by the web-form :type data: dict :param conf: Force the file path (for file inclusions for instance) :type conf: str :param client: Client name :type client: str :param mode: We actually use the same method for clients and server files :type mode: str :param insecure: Used for the CLI :type insecure: bool :param template: Is it a template :type template: bool :param statictemplate: Whether we remove a static template :type statictemplate: bool :param content: What default content to put in the file :type content: str :returns: A list of notifications to return to the UI (success or failure) Example:: [[0, "Success"]] """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def remove_conf(self, path=None): """:func:`burpui.misc.parser.interface.BUIparser.remove_conf` is used to remove a configuration file. It only works for "included" files within the server configuration file. :param path: The path of the file to remove :type path: str """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def path_expander(self, pattern=None, source=None, client=None): """:func:`burpui.misc.parser.interface.BUIparser.path_expander` is used to expand path of file inclusions glob the user can set in the setting panel. :param pattern: The glob/path to expand :type pattern: str :param source: What file we are working in :type source: str :param client: The client name when working on client files :type client: str :returns: A list of files or an empty list """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def list_clients(self): """:func:`burpui.misc.parser.interface.BUIparser.list_clients` is used to retrieve a list of clients with their configuration file. :returns: A list of clients with their configuration file """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def list_templates(self): """:func:`burpui.misc.parser.interface.BUIparser.list_templates` is used to retrieve a list of templates with their absolute paths. :returns: A list of templates """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def list_static_templates(self): """:func:`burpui.misc.parser.interface.BUIparser.list_static_templates` is used to retrieve a list of static templates with their absolute paths. :returns: A list of templates """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def is_client_revoked(self, client=None): """:func:`burpui.misc.parser.interface.BUIparser.is_client_revoked` is used to check if a given client has it's certificate revoked or not. :param client: The name of the client to check :type client: str :returns: True or False """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def remove_client( self, client=None, keepconf=False, delcert=False, revoke=False, template=False, statictemplate=False, delete=False, ): """:func:`burpui.misc.parser.interface.BUIparser.remove_client` is used to delete a client from burp's configuration. :param client: The name of the client to remove :type client: str :param keepconf: Whether to keep the conf (in order to just revoke/delete the cert) :param keepconf: bool :param delcert: Whether to delete the associated certificate :type delcert: bool :param revoke: Whether to revoke the associated certificate :type revoke: bool :param template: Whether we remove a template :type template: bool :param statictemplate: Whether we remove a static template :type statictemplate: bool :param delete: Whether to remove data as well :type delete: bool :returns: A list of notifications to return to the UI (success or failure) :rtype: list """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def rename_client( self, client=None, newname=None, template=False, statictemplate=False, keepcert=False, keepdata=False, ): """:func:`burpui.misc.parser.interface.BUIParser.rename_client` is used to rename a client. :param client: The name of the client to rename :type client: str :param newname: The new name of the client :type newname: str :param template: Whether we remove a template :type template: bool :param statictemplate: Whether we remove a static template :type statictemplate: bool :param keepcert: Whether to keep using the same certificate or not :type keepcert: bool :param keepdata: Whether to keep the already saved data or not :type keepdata: bool :returns: A list of notifications to return to the UI (success or failure) :rtype: list """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def read_client_conf( self, client=None, conf=None, template=False, statictemplate=False ): """:func:`burpui.misc.parser.interface.BUIparser.read_client_conf` is called by :func:`burpui.misc.backend.interface.BUIbackend.read_conf_cli` in order to parse the burp-clients configuration files. It works the same way as :func:`burpui.misc.parser.interface.BUIparser.read_server_conf` """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def cancel_restore(self, name=None): """:func:`burpui.misc.parser.interface.BUIparser.cancel_restore` called by :func:`burpui.misc.backend.interface.BUIbackend.cancel_server_restore` in order to cancel a server-initiated restoration. :param name: Client name :type name: str :returns: A list of notifications to return to the UI (success or failure) """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def read_restore(self, name=None): """:func:`burpui.misc.parser.interface.BUIparser.read_restore` called by :func:`burpui.misc.backend.interface.BUIbackend.is_server_restore` in order to read a server-initiated restoration file. :param name: Client name :type name: str :returns: A dict describing the content of the file """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def server_initiated_restoration( self, name=None, backup=None, files=None, strip=None, force=None, prefix=None, restoreto=None, ): """ :func:`burpui.misc.parser.interface.BUIparser.server_initiated_restoration` called by :func:`burpui.misc.backend.interface.BUIbackend.server_restore` in order to create server-initiated restoration file. :param name: Client name :type name: str :param backup: Backup number :type backup: int :param files: List of files to restore :type files: str :param strip: Number of leading path to strip :type strip: int :param force: Whether to force overriding files or not :type force: bool :param prefix: Where to restore files :type prefix: str :param agent: What server to ask (only in multi-agent mode) :type agent: str :returns: A list of notifications to return to the UI (success or failure) """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def cancel_backup(self, name=None): """:func:`burpui.misc.parser.interface.BUIparser.cancel_backup` called by :func:`burpui.misc.backend.interface.BUIbackend.cancel_server_backup` in order to cancel a server-initiated backup. :param name: Client name :type name: str :returns: A list of notifications to return to the UI (success or failure) """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def read_backup(self, name=None): """:func:`burpui.misc.parser.interface.BUIparser.read_backup` called by :func:`burpui.misc.backend.interface.BUIbackend.is_server_backup` in order to test the existence of a server-initiated backup file. :param name: Client name :type name: str :returns: A True if the file is found, else False. """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def server_initiated_backup(self, name=None): """:func:`burpui.misc.parser.interface.BUIparser.server_initiated_backup` called by :func:`burpui.misc.backend.interface.BUIbackend.server_backup` in order to create a server-initiated backup file. :param name: Client name :type name: str :returns: A list of notifications to return to the UI (success or failure) """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover
[docs] @abstractmethod def param(self, name, obj="server_conf", client=None): """:func:`burpui.misc.parser.interface.BUIparser.param` lookup for a given param in the conf. :param name: Param name :type name: str :param obj: Object to look param for :type obj: str :param client: Search for a given client param :type client: str :returns: The asked param """ raise NotImplementedError( "Sorry, the current Parser does not implement this method!" ) # pragma: no cover