from flask import Flask from http.server import HTTPServer, BaseHTTPRequestHandler from consts import SSL_CERT_PATH, SSL_KEY_PATH, HOST, PORT from map_handler.get_measurements import get_all_markers from map_handler.add_lake import cut_map from map_handler.process_lake import fetch_divided_map from map_handler.input_new_data import input_new_Lidar_data from urllib.parse import urlparse, parse_qs import ssl import sqlite3 app = Flask(__name__) terminate_server = 0 class IceHTTPServer(HTTPServer): def __init__(self, server_address, handler_class, cursor): super().__init__(server_address, handler_class) self.cursor = cursor def get_request(self): request, client_address = super().get_request() return request, client_address # Custom HTTP class class IceHTTP(BaseHTTPRequestHandler): def __init__(self, request, client_address, server): self.cursor = server.cursor super().__init__(request, client_address, server) def do_GET(self): # Root path if self.path == '/': # NB: temporary root path behavior self.send_response(200) self.send_header("Content-type", "text/plain") self.end_headers() self.wfile.write(b"Root path hit!") elif self.path.startswith('/update_map'): # NB: should be POST? parsed_path = urlparse(self.path) query_params = parse_qs(parsed_path.query) get_all_markers(self, self.cursor, 'mjosa') # Get all markers # NB: temporary hardcoded waterBodyName elif self.path.startswith('/get_relation'): parsed_path = urlparse(self.path) query_params = parse_qs(parsed_path.query) fetch_divided_map(self, 'Mjosa') # NB temp hardcoded value elif self.path == '/divide_new_relation': cut_map(self, 'Mjosa') def do_POST(self): if self.path == '/new_lidar_data': input_new_Lidar_data(self,self.cursor, 1, 'Mjosa') # hardcoded body of water must change later # Start a server on port 8443 using self defined HTTP class if __name__ == "__main__": try: # Initialize database connection conn = sqlite3.connect('server/database/icedb') cursor = conn.cursor() # Load SSL certificate and private key ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) ssl_context.load_cert_chain(SSL_CERT_PATH, SSL_KEY_PATH) # Create HTTP server with SSL support server = IceHTTPServer((HOST, PORT), IceHTTP, cursor) server.socket = ssl_context.wrap_socket(server.socket, server_side=True) print("Server running on port ", PORT) # Run server indefinitely server.serve_forever() except Exception as e: print(f"Server terminated: {PORT}: {e}")