aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/console/window.py
blob: 1d22f280c91c476846be5468d199ab4ce0a6f306 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import urwid
from . import grideditor, signals, contentview


class Window(urwid.Frame):
    def __init__(self, master, body, header, footer, helpctx):
        urwid.Frame.__init__(self, body, header=header, footer=footer)
        self.master = master
        self.helpctx = helpctx
        signals.focus.connect(self.sig_focus)

    def sig_focus(self, sender, section):
        self.focus_position = section

    def keypress(self, size, k):
        k = super(self.__class__, self).keypress(size, k)
        if k == "?":
            self.master.view_help(self.helpctx)
        elif k == "c":
            if not self.master.client_playback:
                signals.status_prompt_path.send(
                    self,
                    prompt = "Client replay",
                    callback = self.master.client_playback_path
                )
            else:
                signals.status_prompt_onekey.send(
                    self,
                    prompt = "Stop current client replay?",
                    keys = (
                        ("yes", "y"),
                        ("no", "n"),
                    ),
                    callback = self.master.stop_client_playback_prompt,
                )
        elif k == "H":
            self.master.view_grideditor(
                grideditor.SetHeadersEditor(
                    self.master,
                    self.master.setheaders.get_specs(),
                    self.master.setheaders.set
                )
            )
        elif k == "I":
            self.master.view_grideditor(
                grideditor.HostPatternEditor(
                    self.master,
                    [[x] for x in self.master.get_ignore_filter()],
                    self.master.edit_ignore_filter
                )
            )
        elif k == "T":
            self.master.view_grideditor(
                grideditor.HostPatternEditor(
                    self.master,
                    [[x] for x in self.master.get_tcp_filter()],
                    self.master.edit_tcp_filter
                )
            )
        elif k == "i":
            signals.status_prompt.send(
                self,
                prompt = "Intercept filter",
                text = self.master.state.intercept_txt,
                callback = self.master.set_intercept
            )
        elif k == "o":
            self.master.view_options()
        elif k == "Q":
            raise urwid.ExitMainLoop
        elif k == "q":
            signals.pop_view_state.send(self)
        elif k == "M":
            signals.status_prompt_onekey.send(
                prompt = "Global default display mode",
                keys = contentview.view_prompts,
                callback = self.master.change_default_display_mode
            )
        elif k == "R":
            self.master.view_grideditor(
                grideditor.ReplaceEditor(
                    self.master,
                    self.master.replacehooks.get_specs(),
                    self.master.replacehooks.set
                )
            )
        elif k == "s":
            self.master.view_grideditor(
                grideditor.ScriptEditor(
                    self.master,
                    [[i.command] for i in self.master.scripts],
                    self.master.edit_scripts
                )
            )
        elif k == "S":
            if not self.master.server_playback:
                signals.status_prompt_path.send(
                    self,
                    prompt = "Server replay path",
                    callback = self.master.server_playback_path
                )
            else:
                signals.status_prompt_onekey.send(
                    self,
                    prompt = "Stop current server replay?",
                    keys = (
                        ("yes", "y"),
                        ("no", "n"),
                    ),
                    callback = self.master.stop_server_playback_prompt,
                )
        elif k == "t":
            signals.status_prompt.send(
                prompt = "Sticky cookie filter",
                text = self.master.stickycookie_txt,
                callback = self.master.set_stickycookie
            )
        elif k == "u":
            signals.status_prompt.send(
                prompt = "Sticky auth filter",
                text = self.master.stickyauth_txt,
                callback = self.master.set_stickyauth
            )
        else:
            return k