* Handle OSError thrown when curl --proxy-cacert flag is invalid
* Add server-cert
* Dockerfile dont need --ipv4 since now its auto-detected and deprecated
* Add make server-cert info
* Add support for HTTPS interception.
1) Start as
proxy.py --ca-key-file ca-key.pem --ca-cert-file ca-cert.pem --ca-signing-key-file ca-signing-key.pem
2) Test using curl
curl -v -L -x proxy.py:8899 --cacert ca-cert.pem https://google.com
Now proxy.py is able to decrypt HTTPS traffic between curl and
google.com. Generated certificates are stored under ~/.proxy.py
directory.
* Add comments for why interception do not work if client is communicating with proxy.py over https
* Fix tests
* Exit with message when trying to https intercept and also serve over https
* lint
* Disable OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_TLSv1, OP_NO_TLSv1_1 when wrapping upstream server socket
* Ensure client.conn.shutdown is called if necessary.
* Add mypy check for plugin_examples.py
* Exception handling when client sends invalid requests
* Verify plugin_examples
* mypy compat
* HttpRequestRejected
* Use pipes instead of queues.
Possible solution for #68
* Handle ConnectionRefusedError
* Close corresponding pipes on shutdown
* Abstract classes for plugins.
* Add github workflows
* Use pytest for github workflow
* Add Windows/Mac workflows
* Use os.matrix
* 3.8 and 3.9 probably dont exists yet
* Do not fail-fast, also python 3.5 seems to be throwing syntax error for typing
* autopep8
* Disable windows-latest workflow which seems to hang
Unfortunately collections.namedtuple isn't supported by mypy and most
likely never will be. Idea will be to use Typing.NamedTuple but this
require some code refactoring.
No use mirrors
Enforce coverage3
Add coverage badge and use python -m to invoke coverage
Enforce pip3, remove SyntaxError reported line
Use develop branch for coverage status
1. MultiCoreDispatcher now dispatches request in round robin fashion.
2. Added Python3 static type hinting
add Google Cloud Run Button
Preserve proxy.py name as otherwise it breaks module system. Just provide a custom service name to fix Google Cloud Run issue
Custom service name for Google Cloud Run.
Specify port in app.json as required by Google Cloud Run
Go cannot unmarshall int :)
Port desc
Looks like PORT cannot be overridden, for now use port 8080 in Dockerfile
Remove cloudrun integration.
While proxy.py runs successfully within the container, gvisor
limitations doesn't allow proxy.py to accept client connections.
Specifically membarrier syscall isn't allowed.
Update README.md
Load plugins during test execution
Further decouple proxy/webserver logic outside of HttpProtocolHandler.
Per connection plugin instances to avoid locks
Handle BrokenPipeError and teardown if read_from_descriptors return True
Fix tests for py2.7 which require external mock module
Disable tests which require listening on sockets for Travis.
Make travis make free
set TESTING_ON_TRAVIS=1 for windows
1. Rename HttpServer to MultiCoreRequestDispatcher, there wasn't
anything Http about that class, all Http implementation happens in
HttpProxy class
2. PY 2.7 DEPRECATION ERRORS
3. Add --log-format cli option
4. Remove _ from HttpProxy private methods, refactor it's core for
clarify (remove redundant close() and other details)
Non-blocking accepts helps specially in tests to abort the test server
gracefully.
Add ipv6 tcp server client tests
Add tests for TcpServer and HttpServer
Add HttpProxyConfig object to avoid unnecessary arg passing.
Add plugins to proxy.py for programmable proxy.
As requested in https://github.com/abhinavsingh/proxy.py/issues/30 and
other mediums, introduce proxy.py plugins. plugin_examples.py provides
examples for how to use them.
Add capability for plugins to simply ProxyRejectRequest.
Some users are already being effected by this, however master branch is
still stable. Python 2.7 users can continue using the master branch or
simply install via pip. This change also targets issue#58