| """ |
| tool_server.py — Mini HTTP server za WebUI toolove |
| Servira /preset-creator i ostale admin alate na portu 8081 |
| Radi kao sidecar uz Open WebUI (port 8080) |
| """ |
| from http.server import HTTPServer, BaseHTTPRequestHandler |
| import os |
|
|
| HTML_DIR = "/app/tools" |
|
|
| class ToolHandler(BaseHTTPRequestHandler): |
| def log_message(self, format, *args): |
| |
| pass |
|
|
| def do_GET(self): |
| path = self.path.split("?")[0].rstrip("/") |
|
|
| if path == "" or path == "/": |
| self.redirect("/preset-creator") |
| return |
|
|
| if path == "/preset-creator": |
| self.serve_file("preset_creator.html", "text/html; charset=utf-8") |
| return |
|
|
| |
| self.send_response(404) |
| self.send_header("Content-Type", "text/plain; charset=utf-8") |
| self.end_headers() |
| self.wfile.write(b"404 Not Found") |
|
|
| def redirect(self, location): |
| self.send_response(302) |
| self.send_header("Location", location) |
| self.end_headers() |
|
|
| def serve_file(self, filename, content_type): |
| filepath = os.path.join(HTML_DIR, filename) |
| if not os.path.exists(filepath): |
| self.send_response(404) |
| self.send_header("Content-Type", "text/plain") |
| self.end_headers() |
| self.wfile.write(f"File not found: {filename}".encode()) |
| return |
| with open(filepath, "rb") as f: |
| data = f.read() |
| self.send_response(200) |
| self.send_header("Content-Type", content_type) |
| self.send_header("Content-Length", str(len(data))) |
| self.end_headers() |
| self.wfile.write(data) |
|
|
|
|
| if __name__ == "__main__": |
| port = int(os.environ.get("TOOLS_PORT", 8081)) |
| server = HTTPServer(("0.0.0.0", port), ToolHandler) |
| print(f"✅ Tool server pokrenut na portu {port}") |
| print(f" → http://localhost:{port}/preset-creator") |
| server.serve_forever() |
|
|