pyscalpel.edit

Scalpel allows choosing between normal and binary editors, to do so, the user can apply the editor decorator to the req_edit_in / res_edit_int hook:

 1"""
 2    Scalpel allows choosing between normal and binary editors,
 3    to do so, the user can apply the `editor` decorator to the `req_edit_in` / `res_edit_int` hook:
 4"""
 5from typing import Callable, Literal, get_args
 6
 7EditorMode = Literal["raw", "hex", "octal", "binary", "decimal"]
 8EDITOR_MODES: set[EditorMode] = set(get_args(EditorMode))
 9
10
11def editor(mode: EditorMode):
12    """Decorator to specify the editor type for a given hook
13
14    This can be applied to a req_edit_in / res_edit_in hook declaration to specify the editor that should be displayed in Burp
15
16    Example:
17    ```py
18        @editor("hex")
19        def req_edit_in(req: Request) -> bytes | None:
20            return bytes(req)
21    ```
22    This displays the request in an hex editor.
23
24    Currently, the only modes supported are `"raw"`, `"hex"`, `"octal"`, `"binary"` and `"decimal"`.
25
26
27    Args:
28        mode (EDITOR_MODE): The editor mode (raw, hex,...)
29    """
30
31    if mode not in EDITOR_MODES:
32        raise ValueError(f"Argument must be one of {EDITOR_MODES}")
33
34    def decorator(hook: Callable):
35        hook.__annotations__["scalpel_editor_mode"] = mode
36        return hook
37
38    return decorator
EditorMode = typing.Literal['raw', 'hex', 'octal', 'binary', 'decimal']
EDITOR_MODES: set[typing.Literal['raw', 'hex', 'octal', 'binary', 'decimal']] = {'raw', 'octal', 'binary', 'decimal', 'hex'}
def editor(mode: Literal['raw', 'hex', 'octal', 'binary', 'decimal']):
12def editor(mode: EditorMode):
13    """Decorator to specify the editor type for a given hook
14
15    This can be applied to a req_edit_in / res_edit_in hook declaration to specify the editor that should be displayed in Burp
16
17    Example:
18    ```py
19        @editor("hex")
20        def req_edit_in(req: Request) -> bytes | None:
21            return bytes(req)
22    ```
23    This displays the request in an hex editor.
24
25    Currently, the only modes supported are `"raw"`, `"hex"`, `"octal"`, `"binary"` and `"decimal"`.
26
27
28    Args:
29        mode (EDITOR_MODE): The editor mode (raw, hex,...)
30    """
31
32    if mode not in EDITOR_MODES:
33        raise ValueError(f"Argument must be one of {EDITOR_MODES}")
34
35    def decorator(hook: Callable):
36        hook.__annotations__["scalpel_editor_mode"] = mode
37        return hook
38
39    return decorator

Decorator to specify the editor type for a given hook

This can be applied to a req_edit_in / res_edit_in hook declaration to specify the editor that should be displayed in Burp

Example:

    @editor("hex")
    def req_edit_in(req: Request) -> bytes | None:
        return bytes(req)

This displays the request in an hex editor.

Currently, the only modes supported are "raw", "hex", "octal", "binary" and "decimal".

Args: mode (EDITOR_MODE): The editor mode (raw, hex,...)