# 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
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)))
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,
}
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"],
),
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,
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
# 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__)
# 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__)
# 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
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)))
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,
}
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 (?, ?, ?, ?, ?, ?, ?)
""",
(
cleaned["ipv4"],
cleaned["ipv6"],
cleaned["mac"],
- cleaned["note"],
+ cleaned["description"],
cleaned["ssl_enabled"],
cleaned["visibility"],
),
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=?
""",
(
cleaned["ipv4"],
cleaned["ipv6"],
cleaned["mac"],
- cleaned["note"],
+ cleaned["description"],
cleaned["ssl_enabled"],
cleaned["visibility"],
host_id,
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
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)
);
# 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__)
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
);
# 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__)
# 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__)
# 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__)
# 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__)
# 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__)
# 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__)
500: {"description": "Internal server error"},
})
def api_get_hosts(request: Request):
+
try:
hosts = get_hosts()
return hosts or []
},
},
)
- return host
+ return host or []
except HTTPException:
raise
# 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__)
# 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__)
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
+
<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">
<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">
<!-- 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">
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);
// 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;
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
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");
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);
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;
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