Investment Plans workspace
Open raw ↗
import http.server
import socketserver
import threading
import webbrowser
import os
import sys
import sqlite3
import hashlib
from pathlib import Path

PORT = 8080
HOST = "127.0.0.1"

if getattr(sys, 'frozen', False):
    BASE_DIR = Path(sys._MEIPASS)
else:
    BASE_DIR = Path(__file__).parent

STATIC_DIR = BASE_DIR / "static"
DATA_DIR = BASE_DIR / "data"

class HADHandler(http.server.SimpleHTTPRequestHandler):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, directory=str(STATIC_DIR), **kwargs)
    
    def do_GET(self):
        if self.path == '/' or self.path == '/index.html':
            self.path = '/HAD_Digital_Mobile.html'
        return super().do_GET()
    
    def log_message(self, format, *args):
        pass

def open_browser():
    import time
    time.sleep(1.5)
    webbrowser.open(f"http://{HOST}:{PORT}")

def main():
    DATA_DIR.mkdir(parents=True, exist_ok=True)
    db_path = DATA_DIR / "had.db"
    if not db_path.exists():
        conn = sqlite3.connect(str(db_path))
        conn.row_factory = sqlite3.Row
        conn.execute("PRAGMA journal_mode=WAL")
        conn.executescript('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, salt TEXT NOT NULL, role TEXT NOT NULL, display_name TEXT NOT NULL);
            CREATE TABLE IF NOT EXISTS patients (id INTEGER PRIMARY KEY AUTOINCREMENT, display_name TEXT NOT NULL, age INTEGER, cancer_type TEXT, had_start TEXT, status TEXT DEFAULT 'active');
            CREATE TABLE IF NOT EXISTS alerts (id INTEGER PRIMARY KEY AUTOINCREMENT, patient_id INTEGER, severity TEXT, message TEXT, status TEXT DEFAULT 'active', created_at TEXT DEFAULT CURRENT_TIMESTAMP);
            CREATE TABLE IF NOT EXISTS messages (id INTEGER PRIMARY KEY AUTOINCREMENT, patient_id INTEGER, sender_id INTEGER, content TEXT, created_at TEXT DEFAULT CURRENT_TIMESTAMP);''')
        for u,p,r,d in [("admin","admin123","admin","Marie Dupont"),("dr.martin","demo123","oncologist","Dr. Martin"),("inf.moret","demo123","had_nurse","Inf. Moret"),("patient.durand","demo123","patient","Jean Durand")]:
            salt = os.urandom(16).hex()
            h = hashlib.scrypt(p.encode(),salt=salt.encode(),n=2**14,r=8,p=1,dklen=64).hex()
            conn.execute("INSERT INTO users (username,password_hash,salt,role,display_name) VALUES (?,?,?,?,?)",(u,h,salt,r,d))
        for n,a,c,s in [("Jean Durand",62,"Lung","2026-08-15"),("Marie Laurent",55,"Breast","2026-08-20"),("Pierre Moreau",70,"Colorectal","2026-08-25")]:
            conn.execute("INSERT INTO patients (display_name,age,cancer_type,had_start) VALUES (?,?,?,?)",(n,a,c,s))
        conn.commit()
        conn.close()
        print("Database created")
    
    with socketserver.TCPServer((HOST, PORT), HADHandler) as httpd:
        print(f"HAD Digital running at http://{HOST}:{PORT}")
        print("Press Ctrl+C to stop")
        threading.Thread(target=open_browser, daemon=True).start()
        try: httpd.serve_forever()
        except KeyboardInterrupt: httpd.shutdown()

if __name__ == '__main__': main()