From 53a8f300859a50d9f99f1821c35bca999fced6d8 Mon Sep 17 00:00:00 2001 From: Tom van der Lee Date: Thu, 8 Jun 2023 23:05:26 +0200 Subject: v2 --- ttun_server/endpoints.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'ttun_server/endpoints.py') diff --git a/ttun_server/endpoints.py b/ttun_server/endpoints.py index 6728c31..3e263da 100644 --- a/ttun_server/endpoints.py +++ b/ttun_server/endpoints.py @@ -1,6 +1,7 @@ import asyncio import logging import os +from asyncio import create_task from base64 import b64decode, b64encode from typing import Optional, Any from uuid import uuid4 @@ -11,6 +12,7 @@ from starlette.responses import Response from starlette.types import Scope, Receive, Send from starlette.websockets import WebSocket +import ttun_server from ttun_server.proxy_queue import ProxyQueue from ttun_server.types import RequestData, Config, Message, MessageType @@ -40,9 +42,10 @@ class Proxy(HTTPEndpoint): request_queue = await ProxyQueue.get_for_identifier(subdomain) + logger.debug('PROXY %s%s ', subdomain, request.url) await request_queue.enqueue( Message( - type=MessageType.request, + type=MessageType.request.value, identifier=identifier, payload= RequestData( @@ -85,16 +88,31 @@ class Tunnel(WebSocketEndpoint): async def handle_requests(self, websocket: WebSocket): while request := await self.proxy_queue.dequeue(): - await websocket.send_json(request) + create_task(websocket.send_json(request)) async def on_connect(self, websocket: WebSocket) -> None: await websocket.accept() self.config = await websocket.receive_json() + client_version = self.config.get('version', '1.0.0') + logger.debug('client_version %s', client_version) + + if 'git' not in client_version and ttun_server.__version__ != 'development': + [client_major, *_] = [int(i) for i in client_version.split('.')[:3]] + [server_major, *_] = [int(i) for i in ttun_server.__version__.split('.')] + + if client_major < server_major: + await websocket.close(4000, 'Your client is too old') + + if client_major > server_major: + await websocket.close(4001, 'Your client is too new') + + if self.config['subdomain'] is None \ or await ProxyQueue.has_connection(self.config['subdomain']): self.config['subdomain'] = uuid4().hex + self.proxy_queue = await ProxyQueue.create_for_identifier(self.config['subdomain']) hostname = os.environ.get("TUNNEL_DOMAIN") -- cgit v1.2.3