import http.server import mimetypes import os from pathlib import Path PUBLIC_ROOT = Path("/srv/public") PORT = int(os.environ.get("PORT", "8080")) mimetypes.add_type("text/javascript", ".js") mimetypes.add_type("application/octet-stream", ".elf") mimetypes.add_type("application/octet-stream", ".bin") class Handler(http.server.SimpleHTTPRequestHandler): def __init__(self, *args, **kwargs): super().__init__(*args, directory=PUBLIC_ROOT, **kwargs) def list_directory(self, path): self.send_error(404, "Not found") return None def end_headers(self): self.send_header("Cache-Control", "no-store, max-age=0") self.send_header("Pragma", "no-cache") self.send_header("X-Content-Type-Options", "nosniff") self.send_header("X-Frame-Options", "DENY") self.send_header("Referrer-Policy", "no-referrer") self.send_header( "Content-Security-Policy", "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; " "worker-src 'self'; child-src 'self'; connect-src 'self'; img-src 'self' data:; " "object-src 'none'; base-uri 'none'; frame-ancestors 'none'", ) super().end_headers() class Server(http.server.ThreadingHTTPServer): daemon_threads = True allow_reuse_address = True if __name__ == "__main__": with Server(("0.0.0.0", PORT), Handler) as server: print(f"Serving Relapse Exploit on port {PORT}", flush=True) server.serve_forever()