Metadata-Version: 2.1
Name: starlette-early-data
Version: 0.2.2
Summary: Middleware and decorator for processing TLSv1.3 early data requests in Starlette
Home-page: https://github.com/HarrySky/starlette-early-data
Author: Igor Nehoroshev
Author-email: mail@neigor.me
License: Unlicense
Description: # starlette-early-data
        
        Middleware and decorator for processing TLSv1.3 early data requests in Starlette
        
        [Package on PyPI](https://pypi.org/project/starlette-early-data/)
        
        Install: `pip install starlette-early-data`
        
        ## What this package can do:
        - Detect if request is early data and mark it (`request.state.early_data = True`)
        - Deny all early data requests (pass `deny_all=True` to `add_middleware`)
        - Deny early data requests to specific endpoints (use decorator `@deny_early_data`)
        
        Example (`test.py`):
        
        ```python
        import uvicorn
        
        from starlette.applications import Starlette
        from starlette.requests import Request
        from starlette.responses import PlainTextResponse
        
        from starlette_early_data import EarlyDataMiddleware, deny_early_data
        
        app = Starlette()
        app.add_middleware(EarlyDataMiddleware, deny_all=False)
        
        
        @app.route("/")
        async def home(request: Request) -> PlainTextResponse:
            return PlainTextResponse("Always OK if deny_all=False")
        
        
        @app.route("/security_risk")
        @deny_early_data
        async def security_risk(request: Request) -> PlainTextResponse:
            return PlainTextResponse("Security action done after handshake")
        
        
        if __name__ == "__main__":
            uvicorn.run(app, host="0.0.0.0", port=8080)
        ```
        
        Send request to `http://127.0.0.1:8080/security_risk` with header `Early-Data=1` and you will get 425.
        
        Request to `http://127.0.0.1:8080/` with the same header will only return 425 if you pass `deny_all=True` to `app.add_middleware(...)`
        
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: Public Domain
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Requires-Python: >=3.6
Description-Content-Type: text/markdown
