diff --git a/dyndnshelper/main.py b/dyndnshelper/main.py index 999baed..6b298d8 100644 --- a/dyndnshelper/main.py +++ b/dyndnshelper/main.py @@ -25,3 +25,7 @@ def run(): ) server = uvicorn.Server(config) server.run() + + +if __name__ == 'main': + run() diff --git a/dyndnshelper/routers/fqdns.py b/dyndnshelper/routers/fqdns.py index 379a6fe..0a9d423 100644 --- a/dyndnshelper/routers/fqdns.py +++ b/dyndnshelper/routers/fqdns.py @@ -56,8 +56,8 @@ def check_credentials_for_fqdn( async def dyndns( username: Annotated[str, Depends(check_credentials_for_fqdn)], fqdn_settings: Annotated[FQDNSettings, Depends(get_fqdn_settings)], - ip: Annotated[list[IPv4Address | IPv6Address | EmptyStr], Query()] = None, - ipv6lanprefix: Annotated[IPv6Network, Query()] = None, + ip: Annotated[list[IPv4Address | IPv6Address | EmptyStr], Query(description='IPv4 or IPv6 addresses')] = None, + ipv6lanprefix: Annotated[IPv6Network, Query(description='IPv6 Network with Prefix. Will be used to update AAAA records for configured IIDs')] = None, dualstack: Annotated[bool, Query()] = None ): if ip: @@ -72,7 +72,7 @@ async def dyndns( ) if ip: - LOGGER.debug(f'DynDNS FQDN {fqdn_settings.fqdn} with IPs {", ".join(map(str, ip))}') + LOGGER.debug(f'{username} -DynDNS FQDN {fqdn_settings.fqdn} with IPs {", ".join(map(str, ip))}') vendor = CONFIG.vendors.get_vendor(fqdn_settings.vendor) await vendor.ensure_fqdn( fqdn=fqdn_settings.fqdn, @@ -86,7 +86,7 @@ async def dyndns( # and we have to bitwise OR network address with iid address netaddr_ipv6lanprefix_address = IPNetwork(str(ipv6lanprefix)).network for iid_fqdn, iid in fqdn_settings.ipv6_lan_prefix_iid_map.items(): - LOGGER.debug(f'DynDNS IID FQDN {iid_fqdn} {iid} with IPv6 LAN Prefix {ipv6lanprefix}') + LOGGER.debug(f'{username} - DynDNS IID FQDN {iid_fqdn} {iid} with IPv6 LAN Prefix {ipv6lanprefix}') netaddr_iid_address = IPAddress(str(iid)) combined_address = IPv6Address(str(netaddr_ipv6lanprefix_address | netaddr_iid_address)) diff --git a/dyndnshelper/settings.py b/dyndnshelper/settings.py index c55968c..30ce2b5 100644 --- a/dyndnshelper/settings.py +++ b/dyndnshelper/settings.py @@ -116,6 +116,11 @@ class Vendors(BaseModel): hetzner: HetznerSettings = Field(default_factory=HetznerSettings) def get_vendor(self, name: VendorNames) -> Vendor: + """ + returns initialized vendor class + + raises ValueError if vendor is not defined + """ vendor_settings = getattr(self, name, None) if not vendor_settings: raise ValueError(f'No vendor settings found for name `{name}`') diff --git a/dyndnshelper/vendors/hetzner.py b/dyndnshelper/vendors/hetzner.py index 91bffcd..d991d10 100644 --- a/dyndnshelper/vendors/hetzner.py +++ b/dyndnshelper/vendors/hetzner.py @@ -27,6 +27,9 @@ class HetznerZone(BaseModel): name: str ttl: int + def __str__(self): + return f'{self.id}/{self.name}' + @property def update_dict(self): return self.model_dump( @@ -45,6 +48,9 @@ class HetznerRecord(BaseModel): value: str ttl: int + def __str__(self): + return f'{self.id}/{self.name}/{self.type}' + @property def update_dict(self): return self.model_dump( @@ -139,7 +145,7 @@ class Hetzner(Vendor): return HetznerRecord(**record) async def update_record(self, record: HetznerRecord) -> HetznerRecord: - self.logger.info(f'Updating {record.id} / {record.type} record {record.name} in zone {record.zone_id}: {record.value}') + self.logger.info(f'Updating {record} in zone {record.zone_id}: {record.value}') response = await self.api_put( url=f'{self.settings.api_url}/records/{record.id}', json=record.update_dict