Files
Numbus/web/logic/interactive.py
2026-05-17 19:52:02 +02:00

58 lines
1.9 KiB
Python

import http.server
import json
import os
import sys
### Variables -->
SECRET_PATH = "/run/user/{}/numbus".format(os.getuid()) if os.path.exists("/run/user/{}".format(os.getuid())) else "../secrets"
os.makedirs(SECRET_PATH, exist_ok=True)
LOGS_DIR = "logs/"
PAGES_DIR = "pages/"
CONFIG_DIR = "config/"
SIGNALS_DIR = "signals/"
### <-- Variables
os.chdir('web')
class BridgeHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
# Route for logs: /logs?type=out or /logs?type=err
if self.path.startswith('/logs'):
log_type = "out" if "type=err" not in self.path else "err"
log_path = os.path.join(LOGS_DIR, f'deploy-{log_type}.log')
self.send_response(200)
self.send_header('Content-type', 'text/plain')
self.send_header('Access-Control-Allow-Origin', '*')
self.end_headers()
if os.path.exists(log_path):
with open(log_path, 'r') as f:
# Read last 50 lines for better context during errors
self.wfile.write("".join(f.readlines()[-50:]).encode())
return
# Restrict static file access to specific directories only
if not any(self.path.startswith(prefix) for prefix in ['/pages', '/media', '/config']):
self.send_error(403, "Access Denied: Resource is restricted.")
return
return http.server.SimpleHTTPRequestHandler.do_GET(self)
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
if self.path == '/discovery':
with open(os.path.join(CONFIG_DIR, "live.yaml"), "wb") as f:
f.write(post_data)
self.send_response(200)
self.end_headers()
elif self.path == '/deploy':
with open(os.path.join(CONFIG_DIR, "numbus.yaml"), "wb") as f:
f.write(post_data)
self.send_response(200)
self.end_headers()
http.server.HTTPServer(('localhost', 8088), BridgeHandler).serve_forever()