-
Sara Savanovic Djordjevic authoredSara Savanovic Djordjevic authored
main.py 2.77 KiB
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}")