]> git.giorgioravera.it Git - network-manager.git/commitdiff
run init_db at every system startup, skipping existing tables
authorGiorgio Ravera <giorgio.ravera@gmail.com>
Fri, 29 May 2026 15:19:49 +0000 (17:19 +0200)
committerGiorgio Ravera <giorgio.ravera@gmail.com>
Fri, 29 May 2026 15:19:49 +0000 (17:19 +0200)
backend/db/aliases.py
backend/db/config.py
backend/db/hosts.py
backend/db/users.py

index c64b811c1263e63a096ecf965c82a9819d42c74a..d0b30ed51b7d3dfc77b6b9a7770b252441fb72d7 100644 (file)
@@ -171,12 +171,12 @@ def delete_alias(alias_id: int) -> bool:
 # Initialize Aliases DB Table
 # -----------------------------
 @register_init
-def init_db_alias_table(cur: sqlite3.Cursor) -> None:
+def init_db_aliases_table(cur: sqlite3.Cursor) -> None:
 
     # ALIASES TABLE
     cur.execute(
         """
-        CREATE TABLE aliases (
+        CREATE TABLE IF NOT EXISTS aliases (
             id INTEGER PRIMARY KEY AUTOINCREMENT,
             name TEXT NOT NULL UNIQUE,
             target TEXT NOT NULL,
@@ -187,9 +187,7 @@ def init_db_alias_table(cur: sqlite3.Cursor) -> None:
         );
         """
     )
-    cur.execute("CREATE INDEX idx_aliases_name ON aliases(name);")
-
-    logger.info("ALIASES DB: Database initialized successfully")
+    cur.execute("CREATE INDEX IF NOT EXISTS idx_aliases_name ON aliases(name);")
 
 # -----------------------------
 # Reset Aliases DB Table
index a623ebdf1f99e5ac4bdf4b3a30eaa5ace306aa39..75b97d23b4390025144b56475494fc7a8861f8fb 100644 (file)
@@ -1,9 +1,5 @@
 # backend/db/config.py
 
-# Import standard modules
-import os
-import sqlite3
-
 # Import local modules
 from backend.db.db import get_db, register_init
 
@@ -24,6 +20,15 @@ CONFIG_TYPES = {
     "LOGIN_WINDOW_SECONDS": int,
 }
 
+# ---------------------------------------------------------
+# Default Values
+# ---------------------------------------------------------
+CONFIG_DEFAULTS = {
+    "EXTERNAL_NAME": settings.EXTERNAL_NAME,
+    "LOGIN_MAX_ATTEMPTS": settings.LOGIN_MAX_ATTEMPTS,
+    "LOGIN_WINDOW_SECONDS": settings.LOGIN_WINDOW_SECONDS,
+}
+
 # ---------------------------------------------------------
 # Runtime cache to avoid repeated DB queries
 # ---------------------------------------------------------
@@ -69,22 +74,25 @@ def get_config(key):
     return value
 
 # ---------------------------------------------------------
-# Initialize Config DB Table
+# Create Config DB Tables
 # ---------------------------------------------------------
 @register_init
-def init_db_hosts_table(cur):
+def init_db_config_table(cur):
 
     # CONFIG TABLE
     cur.execute("""
-        CREATE TABLE config (
+        CREATE TABLE IF NOT EXISTS config (
             key TEXT PRIMARY KEY,
             value TEXT
         );
     """)
 
-    # Initial values from settings (as strings in DB)
-    cur.execute("INSERT INTO config (key, value) VALUES (?, ?)", ("external_name", settings.EXTERNAL_NAME))
-    cur.execute("INSERT INTO config (key, value) VALUES (?, ?)", ("login_max_attempts", str(settings.LOGIN_MAX_ATTEMPTS)))
-    cur.execute("INSERT INTO config (key, value) VALUES (?, ?)", ("login_window_seconds", str(settings.LOGIN_WINDOW_SECONDS)))
+# ---------------------------------------------------------
+# Initialize Config DB Tables
+# ---------------------------------------------------------
+@register_init
+def init_db_config_defaults(cur):
 
-    logger.info("CONFIG DB: Tables initialized successfully")
+    # Add configuration parameters
+    for key, value in CONFIG_DEFAULTS.items():
+        cur.execute("INSERT OR IGNORE INTO config VALUES (?, ?)", (key, str(value)))
index cf9bc09f3f22999c64cd80a20139c10567c8a2cf..224d3a463a2b35485266118061cf87f5889b0a84 100644 (file)
@@ -222,7 +222,7 @@ def init_db_hosts_table(cur: sqlite3.Cursor) -> None:
     # HOSTS TABLE
     cur.execute(
         """
-        CREATE TABLE hosts (
+        CREATE TABLE IF NOT EXISTS hosts (
             id INTEGER PRIMARY KEY AUTOINCREMENT,
             name TEXT NOT NULL UNIQUE,
             ipv4 TEXT,
@@ -235,12 +235,12 @@ def init_db_hosts_table(cur: sqlite3.Cursor) -> None:
         );
         """
     )
-    cur.execute("CREATE INDEX idx_hosts_name ON hosts(name);")
+    cur.execute("CREATE INDEX IF NOT EXISTS idx_hosts_name ON hosts(name);")
 
     # TXT TABLE
     cur.execute(
         """
-        CREATE TABLE txt_records (
+        CREATE TABLE IF NOT EXISTS txt_records (
             id INTEGER PRIMARY KEY AUTOINCREMENT,
             name TEXT NOT NULL,
             value TEXT NOT NULL,
@@ -250,9 +250,7 @@ def init_db_hosts_table(cur: sqlite3.Cursor) -> None:
         );
         """
     )
-    cur.execute("CREATE INDEX idx_txt_host ON txt_records(host_id);")
-
-    logger.info("HOSTS DB: Tables initialized successfully")
+    cur.execute("CREATE INDEX IF NOT EXISTS idx_txt_host ON txt_records(host_id);")
 
 # -----------------------------
 # Reset Hosts DB Table
index 2aa8e307af13d98ac0798e262577cecd96f86160..56879df9877574946671b96370f18781a5c1b573 100644 (file)
@@ -81,24 +81,28 @@ def init_db_users_table(cur):
             updated_at INTEGER NOT NULL
         );
     """)
-    cur.execute("CREATE INDEX idx_users_username ON users(username);")
+    cur.execute("CREATE INDEX IF NOT EXISTS idx_users_username ON users(username);")
+
+# -----------------------------
+# Populate Users Tables
+# -----------------------------
+@register_init
+def init_db_users_defaults(cur):
     # Insert default admin user
-    if not settings.ADMIN_PASSWORD_HASH:
-        settings.ADMIN_PASSWORD_HASH = hash_password(settings.ADMIN_PASSWORD)
+    if settings.ADMIN_PASSWORD_HASH:
+        password_hash = settings.ADMIN_PASSWORD_HASH
     else:
-        settings.ADMIN_PASSWORD = "(hidden)"
+        password_hash = hash_password(settings.ADMIN_PASSWORD)
     cur.execute("""
-        INSERT INTO users (
+        INSERT or IGNORE INTO users (
             username, password_hash, email, is_admin, modules, status,
             created_at, updated_at, password_changed_at
         ) VALUES (?, ?, ?, ?, ?, ?, strftime('%s','now'), strftime('%s','now'), strftime('%s','now'));
     """, (
         settings.ADMIN_USER,
-        settings.ADMIN_PASSWORD_HASH,
+        password_hash,
         "admin@example.com",
         1,
         '["dns","dhcp"]',
         "active"
     ))
-
-    logger.info("USERS DB: Tables initialized successfully")