diff --git a/karldns/web/components.py b/karldns/web/components.py index dd1dfde..ed20c80 100644 --- a/karldns/web/components.py +++ b/karldns/web/components.py @@ -143,14 +143,27 @@ def _example_update_ips(request_ip: str | None = None) -> tuple[str, str]: def _manual_update_commands(update_url: str, request_ip: str | None = None) -> str: update_base = update_url.split("?", 1)[0] - ipv4, ipv6 = _example_update_ips(request_ip) - return "\n".join( - [ - f"curl -sS '{update_base}?myip={ipv4}'", - f"curl -sS '{update_base}?myipv6={ipv6}'", - f"curl -sS '{update_base}' # use request IP", - ] - ) + request_version, request_address = _known_request_ip(request_ip) + lines = [] + if request_version in {None, 4}: + ipv4, _ = _example_update_ips(request_ip) + lines.append(f"curl -sS '{update_base}?myip={ipv4}'") + if request_version == 6: + lines.append(f"curl -sS '{update_base}?myipv6={request_address}'") + lines.append(f"curl -sS '{update_base}' # use request IP") + return "\n".join(lines) + + +def _known_request_ip(request_ip: str | None = None) -> tuple[int | None, str]: + if not request_ip: + return None, "" + try: + parsed = ip_address(request_ip.strip()) + except ValueError: + return None, "" + if not parsed.is_global: + return None, "" + return parsed.version, str(parsed) def _manual_update_panel(commands: str) -> SafeHtml: diff --git a/karldns/web/templates_management.py b/karldns/web/templates_management.py index 5d2f6dc..25357c6 100644 --- a/karldns/web/templates_management.py +++ b/karldns/web/templates_management.py @@ -7,7 +7,6 @@ from .components import ( _copy_menu, _copy_row, _event_label, - _example_update_ips, _fritzbox_fields, _manual_update_commands, _manual_update_panel, @@ -168,7 +167,6 @@ def _render_pending_management_page( cleanup_hours = settings.cleanup_pending_account_hours cleanup_text = f"{cleanup_hours} hours" if cleanup_hours != 24 else "24 hours" manual_commands = _manual_update_commands(update_url, request_ip) - example_ipv4, example_ipv6 = _example_update_ips(request_ip) return _page( "KarlDNS setup", trusted(f""" @@ -211,7 +209,7 @@ def _render_pending_management_page(
Scripts can send the IP explicitly, or omit it and let KarlDNS use the request IP. Your current public examples use {escape(example_ipv4)} and {escape(example_ipv6)} where available.
Scripts can send the IP explicitly, or omit it and let KarlDNS use the request IP. Visible examples use your public IP when KarlDNS or your browser can detect it.
{_code_window(manual_commands, copy_label="manual update commands", class_name="mt-3")}