aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/console/window.py
blob: 69f351838b55621d404484ceaea8b618866b55e3 (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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import urwid
from . import common

class Window(urwid.Frame):
    def __init__(self, master, body, header, footer):
        urwid.Frame.__init__(self, body, header=header, footer=footer)
        self.master = master

    def keypress(self, size, k):
        if self.master.prompting:
            if k == "esc":
                self.master.prompt_cancel()
            elif self.master.onekey:
                if k == "enter":
                    self.master.prompt_cancel()
                elif k in self.master.onekey:
                    self.master.prompt_execute(k)
            elif k == "enter":
                self.master.prompt_execute()
            else:
                if common.is_keypress(k):
                    urwid.Frame.keypress(self, self.master.loop.screen_size, k)
                else:
                    return k
        else:
            k = urwid.Frame.keypress(self, self.master.loop.screen_size, k)
            if k == "?":
                self.master.view_help()
            elif k == "c":
                if not self.master.client_playback:
                    self.master.path_prompt(
                        "Client replay: ",
                        self.master.state.last_saveload,
                        self.master.client_playback_path
                    )
                else:
                    self.master.prompt_onekey(
                        "Stop current client replay?",
                        (
                            ("yes", "y"),
                            ("no", "n"),
                        ),
                        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":
                self.master.prompt(
                    "Intercept filter: ",
                    self.master.state.intercept_txt,
                    self.master.set_intercept
                )
            elif k == "Q":
                raise urwid.ExitMainLoop
            elif k == "q":
                self.master.prompt_onekey(
                    "Quit",
                    (
                        ("yes", "y"),
                        ("no", "n"),
                    ),
                    self.master.quit,
                )
            elif k == "M":
                self.master.prompt_onekey(
                    "Global default display mode",
                    contentview.view_prompts,
                    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:
                    self.master.path_prompt(
                        "Server replay path: ",
                        self.master.state.last_saveload,
                        self.master.server_playback_path
                    )
                else:
                    self.master.prompt_onekey(
                        "Stop current server replay?",
                        (
                            ("yes", "y"),
                            ("no", "n"),
                        ),
                        self.master.stop_server_playback_prompt,
                    )
            elif k == "o":
                self.master.prompt_onekey(
                    "Options",
                    (
                        ("anticache", "a"),
                        ("anticomp", "c"),
                        ("showhost", "h"),
                        ("killextra", "k"),
                        ("norefresh", "n"),
                        ("no-upstream-certs", "u"),
                    ),
                    self.master._change_options
                )
            elif k == "t":
                self.master.prompt(
                    "Sticky cookie filter: ",
                    self.master.stickycookie_txt,
                    self.master.set_stickycookie
                )
            elif k == "u":
                self.master.prompt(
                    "Sticky auth filter: ",
                    self.master.stickyauth_txt,
                    self.master.set_stickyauth
                )
            else:
                return k
        self.footer.redraw()