#!/usr/bin/env python3 """ Serveur web simple pour l'interface 4NK Notariat """ import http.server import socketserver import os import sys from pathlib import Path def start_web_server(port=8080): """Démarre le serveur web pour l'interface""" # Répertoire de l'interface web web_dir = Path(__file__).parent # Changement vers le répertoire web os.chdir(web_dir) # Configuration du serveur avec gestion du favicon class CustomHTTPRequestHandler(http.server.SimpleHTTPRequestHandler): def end_headers(self): # Ajouter des headers pour éviter le cache du favicon if self.path == '/favicon.ico': self.send_header('Cache-Control', 'no-cache, no-store, must-revalidate') self.send_header('Pragma', 'no-cache') self.send_header('Expires', '0') super().end_headers() def do_GET(self): try: # Gérer le favicon.ico if self.path == '/favicon.ico': self.send_response(200) self.send_header('Content-type', 'image/svg+xml') self.end_headers() favicon_svg = ''' 📄 ''' self.wfile.write(favicon_svg.encode()) return super().do_GET() except (BrokenPipeError, ConnectionResetError): # Ignorer les erreurs de connexion fermée par le client pass handler = CustomHTTPRequestHandler try: with socketserver.TCPServer(("", port), handler) as httpd: print(f"🌐 Interface web 4NK Notariat démarrée sur http://localhost:{port}") print(f"📁 Répertoire: {web_dir}") print("🔄 Appuyez sur Ctrl+C pour arrêter") print() httpd.serve_forever() except KeyboardInterrupt: print("\n🛑 Arrêt du serveur web") sys.exit(0) except OSError as e: if e.errno == 98: # Address already in use print(f"❌ Erreur: Le port {port} est déjà utilisé") print(f"💡 Essayez un autre port: python start_web.py {port + 1}") else: print(f"❌ Erreur: {e}") sys.exit(1) if __name__ == "__main__": # Port par défaut ou port spécifié en argument port = 8080 if len(sys.argv) > 1: try: port = int(sys.argv[1]) except ValueError: print("❌ Erreur: Le port doit être un nombre") sys.exit(1) start_web_server(port)