tweak cli recordings

This commit is contained in:
Martin Plattner 2020-09-04 18:39:08 +02:00
parent 34716b480d
commit 88d43b51bb
3 changed files with 22 additions and 11 deletions

View File

@ -67,12 +67,14 @@ class CliDirector:
target.send_keys(cmd=keys, enter=False, suppress_history=False) target.send_keys(cmd=keys, enter=False, suppress_history=False)
# inspired by https://github.com/dmotz/TuringType # inspired by https://github.com/dmotz/TuringType
real_pause = random.uniform(0, pause) + 0.3 * pause real_pause = random.uniform(0, pause) + 0.4 * pause
if keys == "Space" or keys == "," or keys == ".": if keys == "Space":
real_pause += random.uniform(0, pause) real_pause += 1.5 * pause
if random.random() > 0.7: elif keys == ".":
real_pause += pause real_pause += pause
if random.random() > 0.95: elif random.random() > 0.75:
real_pause += pause
elif random.random() > 0.95:
real_pause += 2 * pause real_pause += 2 * pause
self.pause(real_pause) self.pause(real_pause)
@ -106,7 +108,7 @@ class CliDirector:
def message(self, msg: str, duration: typing.Optional[int] = None, add_instruction: bool = True, instruction_html: str = "") -> None: def message(self, msg: str, duration: typing.Optional[int] = None, add_instruction: bool = True, instruction_html: str = "") -> None:
if duration is None: if duration is None:
duration = len(msg) * 0.1 # seconds duration = len(msg) * 0.08 # seconds
self.tmux_session.set_option("display-time", int(duration * 1000)) # milliseconds self.tmux_session.set_option("display-time", int(duration * 1000)) # milliseconds
self.tmux_pane.display_message(" " + msg) self.tmux_pane.display_message(" " + msg)

View File

@ -94,6 +94,8 @@ def record_user_interface(d: CliDirector):
d.message("You now know basics of mitmproxys UI and how to control it.") d.message("You now know basics of mitmproxys UI and how to control it.")
d.pause(1) d.pause(1)
d.message("In the next lesson you will learn to intercept flows.")
d.save_instructions("recordings/mitmproxy_user_interface_instructions.json") d.save_instructions("recordings/mitmproxy_user_interface_instructions.json")
d.end() d.end()
@ -152,10 +154,13 @@ def record_intercept_requests(d: CliDirector):
d.focus_pane(pane_top) d.focus_pane(pane_top)
d.press_key("Down") d.press_key("Down")
d.pause(1)
d.message("Press `X` to kill this flow, i.e., discard it without forwarding it to its final destination `wttr.in`.") d.message("Press `X` to kill this flow, i.e., discard it without forwarding it to its final destination `wttr.in`.")
d.type("X") d.type("X")
d.pause(3) d.pause(3)
d.message("In the next lesson you will learn to modify intercepted flows.")
d.save_instructions("recordings/mitmproxy_intercept_requests_instructions.json") d.save_instructions("recordings/mitmproxy_intercept_requests_instructions.json")
d.end() d.end()
@ -227,6 +232,7 @@ def record_modify_requests(d: CliDirector):
d.message("You see that the request URL was modified and `wttr.in` replied with the weather report for `Innsbruck`.") d.message("You see that the request URL was modified and `wttr.in` replied with the weather report for `Innsbruck`.")
d.message("In the next lesson you will learn to replay flows.")
d.save_instructions("recordings/mitmproxy_modify_requests_instructions.json") d.save_instructions("recordings/mitmproxy_modify_requests_instructions.json")
d.end() d.end()
@ -255,17 +261,18 @@ def record_replay_requests(d: CliDirector):
d.focus_pane(pane_top) d.focus_pane(pane_top)
d.message("We now want to replay the intercepted request.") d.message("We now want to replay the this request.")
d.message("Put the focus (`>>`) on the intercepted flow. This is already the case in our example.") d.message("Put the focus (`>>`) on the request that should be replayed. This is already the case in our example.")
d.message("Press `r` to replay this flow.") d.message("Press `r` to replay the request.")
d.type("r") d.type("r")
d.message("Note that no new rows are added for replayed flows, but the existing row is updated.") d.message("Note that no new rows are added for replayed flows, but the existing row is updated.")
d.message("Every time you press `r`, mitmproxy sends this request to the server again and updates the flow.") d.message("Every time you press `r`, mitmproxy sends this request to the server again and updates the flow.")
d.press_key("r", count=6, pause=0.75) d.press_key("r", count=4, pause=1)
d.message("You can also modify a flow before replaying it.") d.message("You can also modify a flow before replaying it.")
d.message("It works as shown in the previous tutorial by pressing `e`.") d.message("It works as shown in the previous lesson, by pressing `e`.")
d.message("Congratulations! You have completed all lessons of the mitmproxy tutorial.")
d.save_instructions("recordings/mitmproxy_replay_requests_instructions.json") d.save_instructions("recordings/mitmproxy_replay_requests_instructions.json")
d.end() d.end()

View File

@ -18,3 +18,5 @@ In this tutorial we focus on the more common use case of client-side replays.
See the docs for more info on [server-side replay]({{< relref "concepts-advancedfeatures#server-side-replay" >}}). See the docs for more info on [server-side replay]({{< relref "concepts-advancedfeatures#server-side-replay" >}}).
{{% asciicast file="mitmproxy_replay_requests" poster="0:3" instructions=true %}} {{% asciicast file="mitmproxy_replay_requests" poster="0:3" instructions=true %}}
You are almost done with this tutorial. In the last step you find more mitmproxy-related resources to discover.