65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
Lokaler Server für Lara Schachturnier
|
||
Serviert statische Dateien direkt.
|
||
"""
|
||
|
||
import http.server
|
||
import socketserver
|
||
import os
|
||
|
||
PORT = int(os.environ.get("PORT", 8111))
|
||
|
||
class StaticHandler(http.server.BaseHTTPRequestHandler):
|
||
def do_GET(self):
|
||
if self.path == "/":
|
||
self.path = "/index.html"
|
||
|
||
filepath = os.path.join(os.path.dirname(os.path.abspath(__file__)), self.path.lstrip("/"))
|
||
|
||
if os.path.isfile(filepath):
|
||
content_types = {
|
||
".html": "text/html",
|
||
".css": "text/css",
|
||
".less": "text/css",
|
||
".js": "application/javascript",
|
||
".json": "application/json",
|
||
".png": "image/png",
|
||
".jpg": "image/jpeg",
|
||
".svg": "image/svg+xml",
|
||
}
|
||
ext = os.path.splitext(filepath)[1]
|
||
content_type = content_types.get(ext, "application/octet-stream")
|
||
|
||
with open(filepath, "rb") as f:
|
||
content = f.read()
|
||
|
||
self.send_response(200)
|
||
self.send_header("Content-Type", f"{content_type}; charset=utf-8")
|
||
self.send_header("Access-Control-Allow-Origin", "*")
|
||
self.end_headers()
|
||
self.wfile.write(content)
|
||
else:
|
||
self.send_response(404)
|
||
self.end_headers()
|
||
|
||
def log_message(self, format, *args):
|
||
print(f"[{self.log_date_time_string()}] {args[0]}")
|
||
|
||
def main():
|
||
print("=" * 50)
|
||
print(" [TROPHY] Lara Kiesewetter – Live Schachturnier")
|
||
print("=" * 50)
|
||
print(f" Server läuft auf: http://localhost:{PORT}")
|
||
print(f" Drücke Ctrl+C zum Beenden")
|
||
print("=" * 50)
|
||
|
||
with socketserver.TCPServer(("", PORT), StaticHandler) as httpd:
|
||
print(f"\n[SERVER] Server gestartet: http://localhost:{PORT}\n")
|
||
try:
|
||
httpd.serve_forever()
|
||
except KeyboardInterrupt:
|
||
print("\n[BYE] Server gestoppt.")
|
||
|
||
if __name__ == "__main__":
|
||
main() |