2020-06-22 23:53:39 +00:00
|
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
|
|
import re
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
here = Path(__file__).absolute().parent
|
|
|
|
|
example_dir = here / ".." / "src" / "examples" / "addons"
|
|
|
|
|
examples = example_dir.glob('*.py')
|
|
|
|
|
|
|
|
|
|
overview = []
|
|
|
|
|
listings = []
|
|
|
|
|
|
|
|
|
|
for example in examples:
|
|
|
|
|
code = example.read_text()
|
|
|
|
|
slug = str(example.with_suffix("").relative_to(example_dir))
|
|
|
|
|
slug = re.sub(r"[^a-zA-Z]", "-", slug)
|
|
|
|
|
match = re.search(r'''
|
|
|
|
|
^
|
|
|
|
|
(?:[#][^\n]*\n)? # there might be a shebang
|
|
|
|
|
"""
|
|
|
|
|
\s*
|
|
|
|
|
(.+?)
|
|
|
|
|
\s*
|
|
|
|
|
(?:\n\n|""") # stop on empty line or end of comment
|
|
|
|
|
''', code, re.VERBOSE)
|
|
|
|
|
if match:
|
|
|
|
|
comment = " — " + match.group(1)
|
|
|
|
|
else:
|
|
|
|
|
comment = ""
|
|
|
|
|
overview.append(
|
2021-02-09 00:05:02 +00:00
|
|
|
|
f" * [{example.name}](#{slug}){comment}\n"
|
2020-06-22 23:53:39 +00:00
|
|
|
|
)
|
|
|
|
|
listings.append(f"""
|
2021-02-04 21:52:28 +00:00
|
|
|
|
<h3 id="{slug}">Example: {example.name}</h3>
|
2020-06-22 23:53:39 +00:00
|
|
|
|
|
|
|
|
|
```python
|
2021-02-09 00:05:02 +00:00
|
|
|
|
{code.strip()}
|
2020-06-22 23:53:39 +00:00
|
|
|
|
```
|
|
|
|
|
""")
|
2021-02-09 00:05:02 +00:00
|
|
|
|
|
|
|
|
|
print(f"""
|
|
|
|
|
# Addon Examples
|
|
|
|
|
|
|
|
|
|
### Dedicated Example Addons
|
|
|
|
|
|
|
|
|
|
{"".join(overview)}
|
|
|
|
|
|
|
|
|
|
### Built-In Addons
|
|
|
|
|
|
|
|
|
|
Much of mitmproxy’s own functionality is defined in
|
|
|
|
|
[a suite of built-in addons](https://github.com/mitmproxy/mitmproxy/tree/master/mitmproxy/addons),
|
|
|
|
|
implementing everything from functionality like anticaching and sticky cookies to our onboarding webapp.
|
|
|
|
|
The built-in addons make for instructive reading, and you will quickly see that quite complex functionality
|
|
|
|
|
can often boil down to a very small, completely self-contained modules.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Additional Community Examples
|
2020-06-22 23:53:39 +00:00
|
|
|
|
|
|
|
|
|
Additional examples contributed by the mitmproxy community can be found
|
|
|
|
|
[on GitHub](https://github.com/mitmproxy/mitmproxy/tree/master/examples/contrib).
|
|
|
|
|
|
2021-02-09 00:05:02 +00:00
|
|
|
|
-------------------------
|
|
|
|
|
|
|
|
|
|
{"".join(listings)}
|
2020-06-22 23:53:39 +00:00
|
|
|
|
""")
|