mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-09-19 04:59:01 +00:00
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""
|
|
Generic HTTP request client for updating Dynamic DNS records.
|
|
"""
|
|
|
|
import subprocess
|
|
import urllib.parse
|
|
from typing import Any, Literal
|
|
|
|
|
|
def update(domain: dict[str, Any], ip_type: Literal['ipv4', 'ipv6'],
|
|
external_address: str | None) -> str | None:
|
|
"""Update DNS entry using an update URL."""
|
|
update_url = domain['update_url']
|
|
quote = urllib.parse.quote
|
|
if external_address:
|
|
update_url = update_url.replace('<Ip>', quote(external_address))
|
|
|
|
if domain['domain']:
|
|
update_url = update_url.replace('<Domain>', quote(domain['domain']))
|
|
|
|
if domain['username']:
|
|
update_url = update_url.replace('<User>', quote(domain['username']))
|
|
|
|
if domain['password']:
|
|
update_url = update_url.replace('<Pass>', quote(domain['password']))
|
|
|
|
options = ['-t', '3', '-T', '3']
|
|
if domain['use_http_basic_auth']:
|
|
options += [
|
|
'--user', domain['username'], '--password', domain['password']
|
|
]
|
|
|
|
if domain['disable_ssl_cert_check']:
|
|
options += ['--no-check-certificate']
|
|
|
|
if ip_type == 'ipv6':
|
|
options += ['-6']
|
|
else:
|
|
options += ['-4']
|
|
|
|
command = ['wget', '-O', '-'] + options + [update_url]
|
|
subprocess.run(command, check=True, stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE)
|
|
return external_address
|