novy prehled prirazovani IP apod.
This commit is contained in:
+37
-6
@@ -759,11 +759,27 @@ def app_detail(app_id: str, request: Request, message: str = "", error: str = ""
|
||||
row_class = "" if rule_enabled else " rule-disabled"
|
||||
enabled_checked = bool_checked(rule_enabled)
|
||||
ip_label = html.escape(rule.get("ip_cidr", "") or "")
|
||||
# Pravidla navázaná na katalog IP adres drží IP/CIDR i popis podle katalogu, aby se obě
|
||||
# místa nerozešla – tady jsou proto jen ke čtení a mění se v centrální správě IP Access.
|
||||
address_id = rule.get("address_id")
|
||||
if address_id:
|
||||
address_label = html.escape(rule.get("address_label") or rule.get("description") or "", quote=True)
|
||||
source_cell = (
|
||||
f'<a href="/portal/admin/ip-access?mode=address&address_id={html.escape(str(address_id), quote=True)}" '
|
||||
f'title="Spravovat v centrální správě IP Access">{address_label}</a>'
|
||||
)
|
||||
ip_cell = f'<input name="ip_cidr" value="{rule_ip}" form="{form_id}" readonly>'
|
||||
description_cell = f'<input name="description" value="{rule_desc}" form="{form_id}" readonly>'
|
||||
else:
|
||||
source_cell = '<span class="muted">ručně</span>'
|
||||
ip_cell = f'<input name="ip_cidr" value="{rule_ip}" form="{form_id}" required>'
|
||||
description_cell = f'<input name="description" value="{rule_desc}" form="{form_id}">'
|
||||
ip_access_rule_rows += f"""
|
||||
<tr class="ip-rule-row{row_class}">
|
||||
<td><input name="ip_cidr" value="{rule_ip}" form="{form_id}" required></td>
|
||||
<td>{ip_cell}</td>
|
||||
<td><select name="methods" form="{form_id}">{render_method_options(rule.get("methods", ""))}</select></td>
|
||||
<td><input name="description" value="{rule_desc}" form="{form_id}"></td>
|
||||
<td>{description_cell}</td>
|
||||
<td>{source_cell}</td>
|
||||
<td><label class="checkbox-label"><input type="checkbox" name="is_enabled" value="1" form="{form_id}"{enabled_checked}> Aktivní</label></td>
|
||||
<td>
|
||||
<form method="post" action="/portal/apps/{app_url_id}/ip-access-rules/{rid}/update" id="{form_id}" class="inline-form"></form>
|
||||
@@ -776,7 +792,7 @@ def app_detail(app_id: str, request: Request, message: str = "", error: str = ""
|
||||
"""
|
||||
|
||||
if not ip_access_rule_rows:
|
||||
ip_access_rule_rows = '<tr><td colspan="5">Zatím nejsou evidovaná žádná IP access pravidla.</td></tr>'
|
||||
ip_access_rule_rows = '<tr><td colspan="6">Zatím nejsou evidovaná žádná IP access pravidla.</td></tr>'
|
||||
|
||||
notice = ""
|
||||
if message:
|
||||
@@ -908,11 +924,19 @@ def app_detail(app_id: str, request: Request, message: str = "", error: str = ""
|
||||
<strong>WRITE</strong> = POST, PUT, PATCH, DELETE; <strong>ALL</strong> = všechny běžné metody včetně GET.
|
||||
Pravidla se zatím pouze ukládají (Caddy je začne vynucovat později).
|
||||
</p>
|
||||
<p class="inline-form">
|
||||
<a class="btn btn-secondary" href="/portal/admin/ip-access?mode=service&app_id={app_url_id}">
|
||||
<i class="fa-solid fa-diagram-project" aria-hidden="true"></i> Hromadné přiřazení IP adres
|
||||
</a>
|
||||
<span class="muted">Pojmenované adresy z katalogu (sloupec Zdroj) se spravují centrálně —
|
||||
tam jednou adresou obsloužíte i deset služeb.</span>
|
||||
</p>
|
||||
<table>
|
||||
<tr>
|
||||
<th>IP/CIDR</th>
|
||||
<th>Methods</th>
|
||||
<th>Description</th>
|
||||
<th>Zdroj</th>
|
||||
<th>Enabled</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
@@ -1281,12 +1305,19 @@ def save_app_ip_access_rule(
|
||||
|
||||
rule_ip = clean_optional(ip_cidr)
|
||||
rule_methods = clean_optional(methods).upper()
|
||||
if not rule_ip:
|
||||
return redirect_app_detail(app_id, anchor="ip-access", error="IP/CIDR nesmí být prázdné.")
|
||||
rule_description = description.strip()
|
||||
if not rule_methods:
|
||||
return redirect_app_detail(app_id, anchor="ip-access", error="Methods nesmí být prázdné.")
|
||||
|
||||
update_app_ip_access_rule(rule_id, app_id, rule_ip, rule_methods, description.strip(), bool(is_enabled))
|
||||
# Pravidla z katalogu IP adres si IP/CIDR ani popis nedrží sama – ty patří katalogu, jinak by
|
||||
# se obě místa rozešla. Editovatelné odtud zůstávají jen metody a zapnutí/vypnutí.
|
||||
if existing.get("address_id"):
|
||||
rule_ip = existing.get("ip_cidr") or ""
|
||||
rule_description = existing.get("description") or ""
|
||||
elif not rule_ip:
|
||||
return redirect_app_detail(app_id, anchor="ip-access", error="IP/CIDR nesmí být prázdné.")
|
||||
|
||||
update_app_ip_access_rule(rule_id, app_id, rule_ip, rule_methods, rule_description, bool(is_enabled))
|
||||
log_audit_event(
|
||||
user,
|
||||
action="app.ip_access_rule.updated",
|
||||
|
||||
Reference in New Issue
Block a user