diff options
| author | 2022-02-07 21:44:48 +0100 | |
|---|---|---|
| committer | 2022-02-07 21:44:48 +0100 | |
| commit | b104bb54714fa594be8aec3cb3bfda6a062eb15b (patch) | |
| tree | 471c7d5d5b59b8fb6a5cb5fc8c7e81f38f9e51e0 /ttun_server/endpoints.py | |
| parent | e2843181eb5b6d5594d8e63a8406e8509b1dfbfe (diff) | |
| download | server-b104bb54714fa594be8aec3cb3bfda6a062eb15b.tar.gz server-b104bb54714fa594be8aec3cb3bfda6a062eb15b.tar.bz2 server-b104bb54714fa594be8aec3cb3bfda6a062eb15b.zip | |
Headers are now a list of tuplesv1.1.1
Diffstat (limited to 'ttun_server/endpoints.py')
| -rw-r--r-- | ttun_server/endpoints.py | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/ttun_server/endpoints.py b/ttun_server/endpoints.py index 5b9e57f..b33fe65 100644 --- a/ttun_server/endpoints.py +++ b/ttun_server/endpoints.py | |||
| @@ -1,7 +1,6 @@ | |||
| 1 | import asyncio | 1 | import asyncio |
| 2 | import logging | 2 | import logging |
| 3 | import os | 3 | import os |
| 4 | from asyncio import Queue | ||
| 5 | from base64 import b64decode, b64encode | 4 | from base64 import b64decode, b64encode |
| 6 | from typing import Optional, Any | 5 | from typing import Optional, Any |
| 7 | from uuid import uuid4 | 6 | from uuid import uuid4 |
| @@ -13,11 +12,20 @@ from starlette.types import Scope, Receive, Send | |||
| 13 | from starlette.websockets import WebSocket | 12 | from starlette.websockets import WebSocket |
| 14 | 13 | ||
| 15 | from ttun_server.proxy_queue import ProxyQueue | 14 | from ttun_server.proxy_queue import ProxyQueue |
| 16 | from ttun_server.types import RequestData, Config, ResponseData | 15 | from ttun_server.types import RequestData, Config |
| 17 | 16 | ||
| 18 | logger = logging.getLogger(__name__) | 17 | logger = logging.getLogger(__name__) |
| 19 | 18 | ||
| 20 | 19 | ||
| 20 | class HeaderMapping: | ||
| 21 | def __init__(self, headers: list[tuple[str, str]]): | ||
| 22 | self._headers = headers | ||
| 23 | |||
| 24 | def items(self): | ||
| 25 | for header in self._headers: | ||
| 26 | yield header | ||
| 27 | |||
| 28 | |||
| 21 | class Proxy(HTTPEndpoint): | 29 | class Proxy(HTTPEndpoint): |
| 22 | async def dispatch(self) -> None: | 30 | async def dispatch(self) -> None: |
| 23 | request = Request(self.scope, self.receive) | 31 | request = Request(self.scope, self.receive) |
| @@ -31,15 +39,14 @@ class Proxy(HTTPEndpoint): | |||
| 31 | await queue.send_request(RequestData( | 39 | await queue.send_request(RequestData( |
| 32 | method=request.method, | 40 | method=request.method, |
| 33 | path=str(request.url).replace(str(request.base_url), '/'), | 41 | path=str(request.url).replace(str(request.base_url), '/'), |
| 34 | headers=dict(request.headers), | 42 | headers=list(request.headers.items()), |
| 35 | cookies=dict(request.cookies), | ||
| 36 | body=b64encode(await request.body()).decode() | 43 | body=b64encode(await request.body()).decode() |
| 37 | )) | 44 | )) |
| 38 | 45 | ||
| 39 | _response = await queue.handle_response() | 46 | _response = await queue.handle_response() |
| 40 | response = Response( | 47 | response = Response( |
| 41 | status_code=_response['status'], | 48 | status_code=_response['status'], |
| 42 | headers=_response['headers'], | 49 | headers=HeaderMapping(_response['headers']), |
| 43 | content=b64decode(_response['body'].encode()) | 50 | content=b64decode(_response['body'].encode()) |
| 44 | ) | 51 | ) |
| 45 | except AssertionError: | 52 | except AssertionError: |
