]> git.giorgioravera.it Git - network-manager.git/commitdiff
Refactor: rename `notes` field to `description` and remove unused `setup_logging...
authorGiorgio Ravera <giorgio.ravera@gmail.com>
Fri, 22 May 2026 11:55:33 +0000 (13:55 +0200)
committerGiorgio Ravera <giorgio.ravera@gmail.com>
Fri, 22 May 2026 11:55:33 +0000 (13:55 +0200)
19 files changed:
backend/db/aliases.py
backend/db/config.py
backend/db/db.py
backend/db/hosts.py
backend/db/users.py
backend/routes/aliases.py
backend/routes/certificates.py
backend/routes/dhcp.py
backend/routes/dns.py
backend/routes/health.py
backend/routes/hosts.py
backend/security.py
backend/server.py
backend/utils.py
frontend/aliases.html
frontend/hosts.html
frontend/index.html
frontend/js/aliases.js
frontend/js/hosts.js

index 967ae67b90c8d3b70e9ce83c563b328e9b682b69..c99864331a7b5cc89d60e56e0cb0c0c344de01f8 100644 (file)
@@ -8,6 +8,7 @@ from typing import Any, Dict, List, Optional
 
 # Import local modules
 from backend.db.db import get_db, register_init
+from backend.utils import normalize
 
 # Import Logging
 from backend.log.log import get_logger
@@ -33,8 +34,8 @@ def validate_data(data: Dict[str, Any]) -> Dict[str, Any]:
     if not target:
         raise ValueError("Field 'target' cannot be empty")
 
-    # Check note
-    note = data.get("note")
+    # Check Description
+    description = data.get("description")
 
     # Boolean normalization for DB (0/1)
     ssl_enabled = int(bool(data.get("ssl_enabled", 0)))
@@ -44,9 +45,9 @@ def validate_data(data: Dict[str, Any]) -> Dict[str, Any]:
     visibility = v if v in (0, 1, 2) else 0
 
     return {
-        "name": name,
-        "target": target,
-        "note": note,
+        "name": normalize(name),
+        "target": normalize(target),
+        "description": normalize(description),
         "ssl_enabled": ssl_enabled,
         "visibility": visibility,
     }
@@ -90,13 +91,13 @@ def add_alias(data: Dict[str, Any]) -> int:
     try:
         cur = conn.execute(
             """
-                       INSERT INTO aliases (name, target, note, ssl_enabled, visibility)
-                       VALUES (?, ?, ?, ?, ?)
-                       """,
+            INSERT INTO aliases (name, target, description, ssl_enabled, visibility)
+            VALUES (?, ?, ?, ?, ?)
+            """,
             (
                 cleaned["name"],
                 cleaned["target"],
-                cleaned["note"],
+                cleaned["description"],
                 cleaned["ssl_enabled"],
                 cleaned["visibility"],
             ),
@@ -126,13 +127,13 @@ def update_alias(alias_id: int, data: Dict[str, Any]) -> bool:
         cur = conn.execute(
             """
             UPDATE aliases
-            SET name=?, target=?, note=?, ssl_enabled=?, visibility=?, last_updated=CURRENT_TIMESTAMP
+            SET name=?, target=?, description=?, ssl_enabled=?, visibility=?, last_updated=CURRENT_TIMESTAMP
             WHERE id=?
             """,
             (
                 cleaned["name"],
                 cleaned["target"],
-                cleaned["note"],
+                cleaned["description"],
                 cleaned["ssl_enabled"],
                 cleaned["visibility"],
                 alias_id,
@@ -179,7 +180,7 @@ def init_db_alias_table(cur: sqlite3.Cursor) -> None:
             id INTEGER PRIMARY KEY AUTOINCREMENT,
             name TEXT NOT NULL UNIQUE,
             target TEXT NOT NULL,
-            note TEXT,
+            description TEXT,
             ssl_enabled INTEGER NOT NULL DEFAULT 0,
             visibility INTEGER NOT NULL DEFAULT 0,
             last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP
index 8d877e4099511f9ef928f5e184ed5f84e23ee38c..8e292df878fb32783c3bd59a746e0f7ea8b11495 100644 (file)
@@ -9,7 +9,7 @@ from backend.db.db import get_db, register_init
 
 # Import Settings & Logging
 from backend.settings.settings import settings
-from backend.log.log import setup_logging, get_logger
+from backend.log.log import get_logger
 
 # Logger initialization
 logger = get_logger(__name__)
index 8697f1497f520989d95a4fa56ba9bb05b05bbaad..54355f2505bcf23d35c96dcd2b75c8ab9d540fd1 100644 (file)
@@ -6,7 +6,7 @@ import sqlite3
 
 # Import Settings & Logging
 from backend.settings.settings import settings
-from backend.log.log import setup_logging, get_logger
+from backend.log.log import get_logger
 
 # Logger initialization
 logger = get_logger(__name__)
index 952f1920a1086a368525875a68c94f01b2064edd..a9ff3aebd870e63930e3929d93890fe54e563223 100644 (file)
@@ -8,6 +8,7 @@ from typing import Any, Dict, List, Optional
 
 # Import local modules
 from backend.db.db import get_db, register_init
+from backend.utils import normalize
 
 # Import Logging
 from backend.log.log import get_logger
@@ -50,8 +51,8 @@ def validate_data(data: Dict[str, Any]) -> Dict[str, Any]:
     if mac and not MAC_RE.match(mac):
         raise ValueError(f"Invalid MAC address: {mac}")
 
-    # Check note
-    note = data.get("note")
+    # Check description
+    description = data.get("description")
 
     # Normalizzazione boolean per DB (0/1)
     ssl_enabled = int(bool(data.get("ssl_enabled", 0)))
@@ -61,11 +62,11 @@ def validate_data(data: Dict[str, Any]) -> Dict[str, Any]:
     visibility = v if v in (0, 1, 2) else 0
 
     return {
-        "name": name,
-        "ipv4": ipv4,
-        "ipv6": ipv6,
-        "mac": mac,
-        "note": note,
+        "name": normalize(name),
+        "ipv4": normalize(ipv4),
+        "ipv6": normalize(ipv6),
+        "mac": normalize(mac),
+        "description": normalize(description),
         "ssl_enabled": ssl_enabled,
         "visibility": visibility,
     }
@@ -123,7 +124,7 @@ def add_host(data: Dict[str, Any]) -> int:
     try:
         cur = conn.execute(
            """
-           INSERT INTO hosts (name, ipv4, ipv6, mac, note, ssl_enabled, visibility)
+           INSERT INTO hosts (name, ipv4, ipv6, mac, description, ssl_enabled, visibility)
            VALUES (?, ?, ?, ?, ?, ?, ?)
            """,
             (
@@ -131,7 +132,7 @@ def add_host(data: Dict[str, Any]) -> int:
                 cleaned["ipv4"],
                 cleaned["ipv6"],
                 cleaned["mac"],
-                cleaned["note"],
+                cleaned["description"],
                 cleaned["ssl_enabled"],
                 cleaned["visibility"],
             ),
@@ -161,7 +162,7 @@ def update_host(host_id: int, data: Dict[str, Any]) -> bool:
         cur = conn.execute(
             """
             UPDATE hosts
-            SET name=?, ipv4=?, ipv6=?, mac=?, note=?, ssl_enabled=?, visibility=?, last_updated=CURRENT_TIMESTAMP
+            SET name=?, ipv4=?, ipv6=?, mac=?, description=?, ssl_enabled=?, visibility=?, last_updated=CURRENT_TIMESTAMP
             WHERE id=?
             """,
             (
@@ -169,7 +170,7 @@ def update_host(host_id: int, data: Dict[str, Any]) -> bool:
                 cleaned["ipv4"],
                 cleaned["ipv6"],
                 cleaned["mac"],
-                cleaned["note"],
+                cleaned["description"],
                 cleaned["ssl_enabled"],
                 cleaned["visibility"],
                 host_id,
@@ -218,7 +219,7 @@ def init_db_hosts_table(cur: sqlite3.Cursor) -> None:
             ipv4 TEXT,
             ipv6 TEXT,
             mac TEXT,
-            note TEXT,
+            description TEXT,
             ssl_enabled INTEGER NOT NULL DEFAULT 0,
             visibility INTEGER NOT NULL DEFAULT 0,
             last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP
@@ -234,7 +235,7 @@ def init_db_hosts_table(cur: sqlite3.Cursor) -> None:
             id INTEGER PRIMARY KEY AUTOINCREMENT,
             name TEXT NOT NULL,
             value TEXT NOT NULL,
-            note TEXT,
+            description TEXT,
             host_id INTEGER,
             FOREIGN KEY (host_id) REFERENCES hosts(id)
         );
index 1a116b45e220edf652f8abeb1d376a072e1ae645..87b9ba9d985808ab1c3eee58c98669b6ff767759 100644 (file)
@@ -11,7 +11,7 @@ from backend.db.db import get_db, register_init
 
 # Import Settings & Logging
 from backend.settings.settings import settings
-from backend.log.log import setup_logging, get_logger
+from backend.log.log import get_logger
 
 # Logger initialization
 logger = get_logger(__name__)
@@ -75,7 +75,7 @@ def init_db_users_table(cur):
             last_failed_at INTEGER,
             last_login_at INTEGER,
             password_changed_at INTEGER,
-            notes TEXT,
+            description TEXT,
             created_at INTEGER NOT NULL,
             updated_at INTEGER NOT NULL
         );
index 4720e2e2ba5c5779dcb5eb548734139e4a9a43bc..026282b794949ba106ae27cd60e5cf941ee2273a 100644 (file)
@@ -18,7 +18,7 @@ from backend.db.aliases import (
 
 # Import Settings & Logging
 from backend.settings.settings import settings
-from backend.log.log import setup_logging, get_logger
+from backend.log.log import get_logger
 
 # Logger initialization
 logger = get_logger(__name__)
index 22a34b0fbe9f60a70967caade59c88efa69334d2..a18e4d28001248b910b03880969667fef648e269 100644 (file)
@@ -13,7 +13,7 @@ from backend.db.aliases import get_aliases_certificates
 
 # Import Settings & Logging
 from backend.settings.settings import settings
-from backend.log.log import setup_logging, get_logger
+from backend.log.log import get_logger
 
 # Logger initialization
 logger = get_logger(__name__)
index a69fd2271c72969106827e53a805c10e39dbe0c5..08e561d1da758974987caa3f47880e71d57ad400 100644 (file)
@@ -16,7 +16,7 @@ from backend.db.hosts import get_hosts
 
 # Import Settings & Logging
 from backend.settings.settings import settings
-from backend.log.log import setup_logging, get_logger
+from backend.log.log import get_logger
 
 # Logger initialization
 logger = get_logger(__name__)
index 10aefe9002cbc33ccc126dc086f421c081d409ff..c93083f9fed952a9058882f672e613133e430333 100644 (file)
@@ -16,7 +16,7 @@ from backend.db.aliases import get_aliases
 
 # Import Settings & Logging
 from backend.settings.settings import settings
-from backend.log.log import setup_logging, get_logger
+from backend.log.log import get_logger
 
 # Logger initialization
 logger = get_logger(__name__)
index c3575203c2d28be64164001c4f3c8221e394ff4e..9de0de30bf4561760927dd6c9c8c4c873671e0ae 100644 (file)
@@ -8,7 +8,7 @@ import os
 
 # Import Settings & Logging
 from backend.settings.settings import settings
-from backend.log.log import setup_logging, get_logger
+from backend.log.log import get_logger
 
 # Logger initialization
 logger = get_logger(__name__)
index 74585bb0643b9b075f42c1a28d66c60196b3b489..817e3639bb4a727ecd5978e6d1e821d30a2c0d80 100644 (file)
@@ -18,7 +18,7 @@ from backend.db.hosts import (
 
 # Import Settings & Logging
 from backend.settings.settings import settings
-from backend.log.log import setup_logging, get_logger
+from backend.log.log import get_logger
 
 # Logger initialization
 logger = get_logger(__name__)
@@ -47,6 +47,7 @@ def js_hosts():
     500: {"description": "Internal server error"},
 })
 def api_get_hosts(request: Request):
+
     try:
         hosts = get_hosts()
         return hosts or []
@@ -91,7 +92,7 @@ def api_get_host(request: Request, host_id: int):
                     },
                 },
             )
-        return host
+        return host or []
 
     except HTTPException:
         raise
index cd6f5705e3d9fdcb9e12555699ebae49662daede..cf3aace31fbf26118a9ff5bae2911bf8a4853a9d 100644 (file)
@@ -11,7 +11,7 @@ from backend.db.users import get_user_by_username
 
 # Import Settings & Logging
 from backend.settings.settings import settings
-from backend.log.log import setup_logging, get_logger
+from backend.log.log import get_logger
 
 # Logger initialization
 logger = get_logger(__name__)
index d69eaf33b37a0a2f3a7f1503abff163366a531bc..084c1c1dd802de6da808f5c3457b7740b25ce432 100644 (file)
@@ -5,7 +5,7 @@ import uvicorn
 
 # Import Settings & Logging
 from backend.settings.settings import settings
-from backend.log.log import setup_logging, get_logger
+from backend.log.log import get_logger
 
 # Logger initialization
 logger = get_logger(__name__)
index ced178b117b6953808d02c8dc85a0667bb97fd31..ee4d46dee0544c00283e3883afb4860125533105 100644 (file)
@@ -11,3 +11,10 @@ def load_hash(path: str):
         with open(path, "r") as f:
             return f.read().strip()
     return None
+
+# -----------------------------
+# Normalize string (strip and convert empty to None)
+# -----------------------------
+def normalize(value):
+    return value.strip() if value and value.strip() else None
+
index db555cd0e6d1fe563043fd744f7b0b7e86924db8..4141c6edbe0e79c77576894a24374bfd04489ca9 100644 (file)
     <table id="dataTable" class="table table-bordered table-hover align-middle">
         <thead class="table-light">
             <tr>
-                <th data-type="string" data-sortable="true">Alias    <span class="sort-arrow" aria-hidden="true"></span></th>
-                <th data-type="string" data-sortable="true">Target   <span class="sort-arrow" aria-hidden="true"></span></th>
-                <th data-type="string" data-sortable="true">Note     <span class="sort-arrow" aria-hidden="true"></span></th>
-                <th data-type="string" data-sortable="true">Options  <span class="sort-arrow" aria-hidden="true"></span></th>
-                <th data-type="string" data-sortable="false">Actions <span class="sort-arrow" aria-hidden="true"></span></th>
+                <th data-type="string" data-sortable="true">Alias      <span class="sort-arrow" aria-hidden="true"></span></th>
+                <th data-type="string" data-sortable="true">Target     <span class="sort-arrow" aria-hidden="true"></span></th>
+                <th data-type="string" data-sortable="true">Description<span class="sort-arrow" aria-hidden="true"></span></th>
+                <th data-type="string" data-sortable="true">Options    <span class="sort-arrow" aria-hidden="true"></span></th>
+                <th data-type="string" data-sortable="false">Actions   <span class="sort-arrow" aria-hidden="true"></span></th>
             </tr>
         </thead>
         <tbody></tbody>
                         </div>
 
                         <div class="mb-2">
-                            <label for="aliasNote" class="form-label">Note</label>
-                            <input type="text" id="aliasNote" class="form-control">
+                            <label for="aliasDescription" class="form-label">Description</label>
+                            <input type="text" id="aliasDescription" class="form-control">
                         </div>
 
                         <div class="form-check my-2">
index d8d61e0dfc3132d1203eaa3c6d82975b77cec6c6..5ec8c9cc3cbaa6b349396bb2853bae6c9d1d42f7 100644 (file)
     <table id="dataTable" class="table table-bordered table-hover align-middle">
         <thead class="table-light">
             <tr>
-                <th data-type="string" data-sortable="true">Hostname <span class="sort-arrow" aria-hidden="true"></span></th>
-                <th data-type="ipv4"   data-sortable="true">IPv4     <span class="sort-arrow" aria-hidden="true"></span></th>
-                <th data-type="ipv6"   data-sortable="true">IPv6     <span class="sort-arrow" aria-hidden="true"></span></th>
-                <th data-type="mac"    data-sortable="true">MAC      <span class="sort-arrow" aria-hidden="true"></span></th>
-                <th data-type="string" data-sortable="true">Note     <span class="sort-arrow" aria-hidden="true"></span></th>
-                <th data-type="string" data-sortable="true">Options  <span class="sort-arrow" aria-hidden="true"></span></th>
-                <th data-type="string" data-sortable="false">Actions <span class="sort-arrow" aria-hidden="true"></span></th>
+                <th data-type="string" data-sortable="true">Hostname   <span class="sort-arrow" aria-hidden="true"></span></th>
+                <th data-type="ipv4"   data-sortable="true">IP Address <span class="sort-arrow" aria-hidden="true"></span></th>
+                <th data-type="mac"    data-sortable="true">MAC Address<span class="sort-arrow" aria-hidden="true"></span></th>
+                <th data-type="string" data-sortable="true">Description<span class="sort-arrow" aria-hidden="true"></span></th>
+                <th data-type="string" data-sortable="true">Options    <span class="sort-arrow" aria-hidden="true"></span></th>
+                <th data-type="string" data-sortable="false">Actions   <span class="sort-arrow" aria-hidden="true"></span></th>
             </tr>
         </thead>
         <tbody></tbody>
                         </div>
 
                         <div class="mb-2">
-                            <label for="hostNote" class="form-label">Note</label>
-                            <input type="text" id="hostNote" class="form-control">
+                            <label for="hostDescription" class="form-label">Description</label>
+                            <input type="text" id="hostDescription" class="form-control">
                         </div>
 
                         <div class="form-check my-2">
index f3e0022494ffe62f4c7ba6f21bffddd5cac7630b..8cea44108c4451c986e4d3ff122968829d6bc295 100644 (file)
@@ -94,7 +94,7 @@
 
             <!-- DHCP -->
             <div class="tile">
-                <div class="tile-icon"><i class="bi bi-wifi"></i></div>
+                <div class="tile-icon"><i class="bi bi-database-gear"></i></div>
                 <h3>DHCP (Kea)</h3>
                 <p>Pools, leases, reservations.</p>
                 <div class="mt-2 d-flex gap-2 flex-wrap">
index fb8737ae1eb81da75890881106c111a1ddbbcdc4..b48ef6f5595544a5e6970a5037640b33edae6b9a 100644 (file)
@@ -98,10 +98,10 @@ async function loadAliases() {
             tr.appendChild(td);
         }
 
-        // Note
+        // Description
         {
             const td = document.createElement("td");
-            const val = (h.note ?? "").toString();
+            const val = (h.description ?? "").toString();
             td.textContent = val;
             if (val) td.setAttribute("data-value", val.toLowerCase());
             tr.appendChild(td);
@@ -271,7 +271,7 @@ async function editAlias(id) {
     // Pre-fill the form fields
     document.getElementById("aliasName").value = data.name ?? "";
     document.getElementById("aliasTarget").value = data.target ?? "";
-    document.getElementById("aliasNote").value = data.note ?? "";
+    document.getElementById("aliasDescription").value = data.description ?? "";
     document.getElementById("aliasSSL").checked = !!data.ssl_enabled;
     if (data.visibility == 0) {
         document.getElementById("aliasVisibilityLocal").checked = true;
@@ -417,7 +417,7 @@ async function handleAddAliasSubmit(e) {
         const data = {
             name:  document.getElementById('aliasName').value.trim(),
             target: document.getElementById('aliasTarget').value.trim(),
-            note:   document.getElementById('aliasNote').value.trim(),
+            description:   document.getElementById('aliasDescription').value.trim(),
             ssl_enabled: document.getElementById('aliasSSL').checked ? 1 : 0,
             visibility: Number(
                 document.querySelector('input[name="aliasVisibility"]:checked')?.value ?? 0
index df7577bc066b9ec5f089e86c42779b858b9f3bc1..3916346330322a31d81383e8e55127cfa0ff9924 100644 (file)
@@ -98,15 +98,6 @@ async function loadHosts() {
             tr.appendChild(td);
         }
 
-        // IPv6
-        {
-            const td = document.createElement("td");
-            const raw = (h.ipv6 ?? "").toString().trim();
-            td.textContent = raw;
-            if (raw) td.setAttribute("data-value", raw.toLowerCase());
-            tr.appendChild(td);
-        }
-
         // MAC
         {
             const td = document.createElement("td");
@@ -117,10 +108,10 @@ async function loadHosts() {
             tr.appendChild(td);
         }
 
-        // Note
+        // Description
         {
             const td = document.createElement("td");
-            const val = (h.note ?? "").toString();
+            const val = (h.description ?? "").toString();
             td.textContent = val;
             if (val) td.setAttribute("data-value", val.toLowerCase());
             tr.appendChild(td);
@@ -292,7 +283,7 @@ async function editHost(id) {
     document.getElementById("hostIPv4").value = data.ipv4 ?? "";
     document.getElementById("hostIPv6").value = data.ipv6 ?? "";
     document.getElementById("hostMAC").value = data.mac ?? "";
-    document.getElementById("hostNote").value = data.note ?? "";
+    document.getElementById("hostDescription").value = data.description ?? "";
     document.getElementById("hostSSL").checked = !!data.ssl_enabled;
     if (data.visibility == 0) {
         document.getElementById("hostVisibilityLocal").checked = true;
@@ -450,7 +441,7 @@ async function handleAddHostSubmit(e) {
             ipv4:  document.getElementById('hostIPv4').value.trim(),
             ipv6:  document.getElementById('hostIPv6').value.trim(),
             mac:   document.getElementById('hostMAC').value.trim(),
-            note:  document.getElementById('hostNote').value.trim(),
+            description:  document.getElementById('hostDescription').value.trim(),
             ssl_enabled: document.getElementById('hostSSL').checked ? 1 : 0,
             visibility: Number(
                 document.querySelector('input[name="hostVisibility"]:checked')?.value ?? 0