From: Giorgio Ravera Date: Fri, 29 May 2026 15:19:49 +0000 (+0200) Subject: run init_db at every system startup, skipping existing tables X-Git-Url: http://git.giorgioravera.it/?a=commitdiff_plain;h=ba78986301ccf335c67a5fc7e5b5b361ed97c12b;p=network-manager.git run init_db at every system startup, skipping existing tables --- diff --git a/backend/db/aliases.py b/backend/db/aliases.py index c64b811..d0b30ed 100644 --- a/backend/db/aliases.py +++ b/backend/db/aliases.py @@ -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 diff --git a/backend/db/config.py b/backend/db/config.py index a623ebd..75b97d2 100644 --- a/backend/db/config.py +++ b/backend/db/config.py @@ -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))) diff --git a/backend/db/hosts.py b/backend/db/hosts.py index cf9bc09..224d3a4 100644 --- a/backend/db/hosts.py +++ b/backend/db/hosts.py @@ -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 diff --git a/backend/db/users.py b/backend/db/users.py index 2aa8e30..56879df 100644 --- a/backend/db/users.py +++ b/backend/db/users.py @@ -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")