feat: Some quality of life improvements

This commit is contained in:
2026-04-17 17:18:24 +02:00
parent b1ff10916b
commit 1559ad1d2f
13 changed files with 318 additions and 232 deletions

85
proxy/websocket_client.py Normal file
View File

@@ -0,0 +1,85 @@
import asyncio
import logging
import websockets
from config import TARGET_WS_URL, LOCAL_HOST, LOCAL_PORT
from selenium_utils import fetch_fresh_credentials
log = logging.getLogger(__name__)
async def handle_connection(local_client):
log.info("Local client connected, fetching credentials...")
result = await asyncio.get_running_loop().run_in_executor(
None, fetch_fresh_credentials
)
if result is None:
log.error("Could not fetch credentials")
await local_client.close(1011, "Failed to bypass Cloudflare")
return
user_agent, cookies = result
headers = {
"User-Agent": user_agent,
"Cookie": cookies,
}
try:
log.info("Connecting to OmegleWeb...")
async with websockets.connect(
TARGET_WS_URL,
additional_headers=headers,
) as target_server:
log.info("OmegleWeb connected! Notifying client...")
await local_client.send("SUCCESS")
log.info("Starting relay")
await relay_bidirectional(local_client, target_server)
except websockets.exceptions.InvalidStatusCode as e:
log.error(f"Omegle connection failed (Status {e.status_code})")
await local_client.close(1011, f"Connection failed: {e.status_code}")
except websockets.exceptions.ConnectionClosed:
log.info("OmegleWeb disconnected")
except Exception as e:
log.error(f"Connection error: {type(e).__name__}: {e}")
await local_client.close(1011, str(e))
async def relay_bidirectional(local_ws, target_ws):
async def forward_local():
try:
async for message in local_ws:
log.debug(f"[Local -> Omegle]: {message}")
await target_ws.send(message)
except websockets.exceptions.ConnectionClosed:
log.info("Local client disconnected")
except Exception as e:
log.error(f"Forward local error: {e}")
async def forward_remote():
try:
async for message in target_ws:
log.debug(f"[Omegle -> Local]: {message}")
await local_ws.send(message)
except websockets.exceptions.ConnectionClosed:
log.info("OmegleWeb disconnected")
except Exception as e:
log.error(f"Forward remote error: {e}")
await asyncio.gather(
forward_local(),
forward_remote(),
)
async def main():
log.info(f"Starting WebSocket proxy on ws://{LOCAL_HOST}:{LOCAL_PORT}")
await websockets.serve(handle_connection, LOCAL_HOST, LOCAL_PORT)
await asyncio.Future()
if __name__ == "__main__":
asyncio.run(main())