mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-04-20 19:12:14 +00:00
Update SSL WebSocket
This commit is contained in:
@@ -321,6 +321,12 @@ pip3 install --target "$APP_DIR/usr/lib/python3/dist-packages" --upgrade \
|
|||||||
simple-websocket>=0.10.0 \
|
simple-websocket>=0.10.0 \
|
||||||
flask-sock>=0.6.0
|
flask-sock>=0.6.0
|
||||||
|
|
||||||
|
# Phase 3b: Install gevent for SSL+WebSocket support (WSS)
|
||||||
|
pip3 install --target "$APP_DIR/usr/lib/python3/dist-packages" --upgrade \
|
||||||
|
gevent>=24.2.1 \
|
||||||
|
gevent-websocket>=0.10.1 \
|
||||||
|
greenlet>=3.0.0
|
||||||
|
|
||||||
cat > "$APP_DIR/usr/lib/python3/dist-packages/cgi.py" << 'PYEOF'
|
cat > "$APP_DIR/usr/lib/python3/dist-packages/cgi.py" << 'PYEOF'
|
||||||
from typing import Tuple, Dict
|
from typing import Tuple, Dict
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -7712,19 +7712,55 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
# Check for SSL configuration
|
# Check for SSL configuration
|
||||||
ssl_ctx = None
|
ssl_ctx = None
|
||||||
|
ssl_cert = None
|
||||||
|
ssl_key = None
|
||||||
try:
|
try:
|
||||||
ssl_ctx = auth_manager.get_ssl_context()
|
ssl_ctx = auth_manager.get_ssl_context()
|
||||||
if ssl_ctx:
|
if ssl_ctx:
|
||||||
print(f"[ProxMenux] Starting with HTTPS (cert: {ssl_ctx[0]})")
|
ssl_cert, ssl_key = ssl_ctx
|
||||||
|
print(f"[ProxMenux] Starting with HTTPS (cert: {ssl_cert})")
|
||||||
else:
|
else:
|
||||||
print("[ProxMenux] Starting with HTTP (no SSL configured)")
|
print("[ProxMenux] Starting with HTTP (no SSL configured)")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[ProxMenux] SSL config error, falling back to HTTP: {e}")
|
print(f"[ProxMenux] SSL config error, falling back to HTTP: {e}")
|
||||||
ssl_ctx = None
|
ssl_ctx = None
|
||||||
|
|
||||||
|
# Use gevent for SSL+WebSocket support, or fallback to Flask dev server
|
||||||
|
gevent_available = False
|
||||||
try:
|
try:
|
||||||
app.run(host='0.0.0.0', port=8008, debug=False, ssl_context=ssl_ctx)
|
|
||||||
except Exception as e:
|
|
||||||
if ssl_ctx:
|
if ssl_ctx:
|
||||||
|
# Try gevent with SSL for proper WebSocket (WSS) support
|
||||||
|
try:
|
||||||
|
from gevent import pywsgi
|
||||||
|
from geventwebsocket.handler import WebSocketHandler
|
||||||
|
import ssl
|
||||||
|
|
||||||
|
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
||||||
|
ssl_context.load_cert_chain(ssl_cert, ssl_key)
|
||||||
|
|
||||||
|
print("[ProxMenux] Starting gevent server with SSL/WSS support...")
|
||||||
|
server = pywsgi.WSGIServer(
|
||||||
|
('0.0.0.0', 8008),
|
||||||
|
app,
|
||||||
|
handler_class=WebSocketHandler,
|
||||||
|
ssl_context=ssl_context
|
||||||
|
)
|
||||||
|
gevent_available = True
|
||||||
|
server.serve_forever()
|
||||||
|
except ImportError as e:
|
||||||
|
print(f"[ProxMenux] gevent not available ({e})")
|
||||||
|
# Fallback: Flask dev server with SSL - flask-sock handles WebSockets
|
||||||
|
import ssl
|
||||||
|
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
||||||
|
ssl_context.load_cert_chain(ssl_cert, ssl_key)
|
||||||
|
print("[ProxMenux] Starting Flask server with SSL (using flask-sock for WebSockets)...")
|
||||||
|
app.run(host='0.0.0.0', port=8008, debug=False, ssl_context=ssl_context)
|
||||||
|
else:
|
||||||
|
# HTTP mode - use Flask dev server (simpler, works fine without SSL)
|
||||||
|
app.run(host='0.0.0.0', port=8008, debug=False)
|
||||||
|
except Exception as e:
|
||||||
|
if ssl_ctx and not gevent_available:
|
||||||
print(f"[ProxMenux] SSL startup failed ({e}), falling back to HTTP")
|
print(f"[ProxMenux] SSL startup failed ({e}), falling back to HTTP")
|
||||||
app.run(host='0.0.0.0', port=8008, debug=False)
|
app.run(host='0.0.0.0', port=8008, debug=False)
|
||||||
|
else:
|
||||||
|
raise e
|
||||||
|
|||||||
Reference in New Issue
Block a user