# Boolean normalization for DB (0/1)
ssl_enabled = int(bool(data.get("ssl_enabled", 0)))
+ # Normalization (0/1/2)
+ v = int(data.get("visibility", 0))
+ visibility = v if v in (0, 1, 2) else 0
+
return {
"name": name,
"target": target,
"note": note,
"ssl_enabled": ssl_enabled,
+ "visibility": visibility,
}
# -----------------------------
conn = get_db()
try:
cur = conn.execute(
- "INSERT INTO aliases (name, target, note, ssl_enabled) VALUES (?, ?, ?, ?)",
+ "INSERT INTO aliases (name, target, note, ssl_enabled, visibility) VALUES (?, ?, ?, ?, ?)",
(
cleaned["name"],
cleaned["target"],
cleaned["note"],
cleaned["ssl_enabled"],
+ cleaned["visibility"],
)
)
conn.commit()
cur = conn.execute(
"""
UPDATE aliases
- SET name=?, target=?, note=?, ssl_enabled=?
+ SET name=?, target=?, note=?, ssl_enabled=?, visibility=?, last_updated=CURRENT_TIMESTAMP
WHERE id=?
""",
(
cleaned["target"],
cleaned["note"],
cleaned["ssl_enabled"],
+ cleaned["visibility"],
alias_id,
)
)
target TEXT NOT NULL,
note TEXT,
ssl_enabled INTEGER NOT NULL DEFAULT 0,
- external_mode INTEGER NOT NULL DEFAULT 0,
+ visibility INTEGER NOT NULL DEFAULT 0,
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
""")
# Normalizzazione boolean per DB (0/1)
ssl_enabled = int(bool(data.get("ssl_enabled", 0)))
+ # Normalizzazione (0/1/2)
+ v = int(data.get("visibility", 0))
+ visibility = v if v in (0, 1, 2) else 0
+
return {
"name": name,
"ipv4": ipv4,
"mac": mac,
"note": note,
"ssl_enabled": ssl_enabled,
+ "visibility": visibility,
}
# -----------------------------
conn = get_db()
try:
cur = conn.execute(
- "INSERT INTO hosts (name, ipv4, ipv6, mac, note, ssl_enabled) VALUES (?, ?, ?, ?, ?, ?)",
+ "INSERT INTO hosts (name, ipv4, ipv6, mac, note, ssl_enabled, visibility) VALUES (?, ?, ?, ?, ?, ?, ?)",
(
cleaned["name"],
cleaned["ipv4"],
cleaned["mac"],
cleaned["note"],
cleaned["ssl_enabled"],
+ cleaned["visibility"],
)
)
conn.commit()
cur = conn.execute(
"""
UPDATE hosts
- SET name=?, ipv4=?, ipv6=?, mac=?, note=?, ssl_enabled=?
+ SET name=?, ipv4=?, ipv6=?, mac=?, note=?, ssl_enabled=?, visibility=?, last_updated=CURRENT_TIMESTAMP
WHERE id=?
""",
(
cleaned["mac"],
cleaned["note"],
cleaned["ssl_enabled"],
+ cleaned["visibility"],
host_id,
)
)
mac TEXT,
note TEXT,
ssl_enabled INTEGER NOT NULL DEFAULT 0,
- external_mode INTEGER NOT NULL DEFAULT 0,
+ visibility INTEGER NOT NULL DEFAULT 0,
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
""")
<input class="form-check-input" type="checkbox" id="aliasSSL">
<label class="form-check-label" for="aliasSSL">SSL?</label>
</div>
+
+ <div class="mb-2">
+ <label class="form-label d-block">Visibility</label>
+ <div class="btn-group" role="group">
+ <!-- Local -->
+ <input type="radio" class="btn-check" id="aliasVisibilityLocal" name="aliasVisibility" value="0" checked>
+ <label class="btn btn-outline-primary" for="aliasVisibilityLocal">Local</label>
+ <!-- Global -->
+ <input type="radio" class="btn-check" id="aliasVisibilityGlobal" name="aliasVisibility" value="1">
+ <label class="btn btn-outline-primary" for="aliasVisibilityGlobal">Global</label>
+ <!-- Alias -->
+ <input type="radio" class="btn-check" id="aliasVisibilityAlias" name="aliasVisibility" value="2">
+ <label class="btn btn-outline-primary" for="aliasVisibilityAlias">Alias</label>
+ </div>
+ </div>
</form>
</div>
line-height: 1.1;
}
-.form-label {
+.form-label,
+.form-check-label,
+.form-check-input {
font-size: 0.80rem; /* più piccina */
margin-bottom: 2px; /* Bootstrap usa 8px; lo riduciamo */
}
border-color: #198754; /* verde Bootstrap */
}
-.form-check-input:focus {
- border-color: var(--accent);
- box-shadow: 0 0 0 1px var(--accent);
- outline: none;
-}
-
/* ================================
Icons
================================ */
<input class="form-check-input" type="checkbox" id="hostSSL">
<label class="form-check-label" for="hostSSL">SSL?</label>
</div>
+
+ <div class="mb-2">
+ <label class="form-label d-block">Visibility</label>
+ <div class="btn-group" role="group">
+ <!-- Local -->
+ <input type="radio" class="btn-check" id="hostVisibilityLocal" name="hostVisibility" value="0" checked>
+ <label class="btn btn-outline-primary" for="hostVisibilityLocal">Local</label>
+ <!-- Global -->
+ <input type="radio" class="btn-check" id="hostVisibilityGlobal" name="hostVisibility" value="1">
+ <label class="btn btn-outline-primary" for="hostVisibilityGlobal">Global</label>
+ <!-- Alias -->
+ <input type="radio" class="btn-check" id="hostVisibilityAlias" name="hostVisibility" value="2">
+ <label class="btn btn-outline-primary" for="hostVisibilityAlias">Alias</label>
+ </div>
+ </div>
</form>
</div>
td.appendChild(icon);
//
- // external_mode icon
+ // visibility icon
//
- const ext = (h.external_mode ?? "").toString();
+ const ext = (h.visibility ?? "").toString();
let aria = "";
let iconClass = "";
switch (ext) {
document.getElementById("aliasTarget").value = data.target ?? "";
document.getElementById("aliasNote").value = data.note ?? "";
document.getElementById("aliasSSL").checked = !!data.ssl_enabled;
+ if (data.visibility == 0) {
+ document.getElementById("aliasVisibilityLocal").checked = true;
+ } else if (data.visibility == 1){
+ document.getElementById("aliasVisibilityGlobal").checked = true;
+ } else {
+ document.getElementById("aliasVisibilityAlias").checked = true;
+ }
}
// -----------------------------
name: document.getElementById('aliasName').value.trim(),
target: document.getElementById('aliasTarget').value.trim(),
note: document.getElementById('aliasNote').value.trim(),
- ssl_enabled: document.getElementById('aliasSSL').checked ? 1 : 0
+ ssl_enabled: document.getElementById('aliasSSL').checked ? 1 : 0,
+ visibility: Number(
+ document.querySelector('input[name="aliasVisibility"]:checked')?.value ?? 0
+ )
};
const ok = await saveAlias(data);
td.appendChild(icon);
//
- // external_mode icon
+ // visibility icon
//
- const ext = (h.external_mode ?? "").toString();
+ const ext = (h.visibility ?? "").toString();
let aria = "";
let iconClass = "";
switch (ext) {
document.getElementById("hostMAC").value = data.mac ?? "";
document.getElementById("hostNote").value = data.note ?? "";
document.getElementById("hostSSL").checked = !!data.ssl_enabled;
+ if (data.visibility == 0) {
+ document.getElementById("hostVisibilityLocal").checked = true;
+ } else if (data.visibility == 1){
+ document.getElementById("hostVisibilityGlobal").checked = true;
+ } else {
+ document.getElementById("hostVisibilityAlias").checked = true;
+ }
}
// -----------------------------
ipv6: document.getElementById('hostIPv6').value.trim(),
mac: document.getElementById('hostMAC').value.trim(),
note: document.getElementById('hostNote').value.trim(),
- ssl_enabled: document.getElementById('hostSSL').checked ? 1 : 0
+ ssl_enabled: document.getElementById('hostSSL').checked ? 1 : 0,
+ visibility: Number(
+ document.querySelector('input[name="hostVisibility"]:checked')?.value ?? 0
+ )
};
const ok = await saveHost(data);