From 444db3f1905d1df52bd0bb7430c445fcc14c0b4f Mon Sep 17 00:00:00 2001 From: Thomas Oettli Date: Fri, 23 Jan 2026 22:07:34 +0100 Subject: [PATCH] Add hostname validation to database model --- src/ddns_service/models.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/ddns_service/models.py b/src/ddns_service/models.py index 99330aa..724acf5 100644 --- a/src/ddns_service/models.py +++ b/src/ddns_service/models.py @@ -4,6 +4,7 @@ import logging import os from . import utc_now +from .dns import encode_dnsname, EncodingError from peewee import ( AutoField, CharField, @@ -84,6 +85,14 @@ class Hostname(BaseModel): (('hostname', 'zone'), True), ) + def save(self, *args, **kwargs): + """Validate and encode hostname/zone before saving.""" + if self.hostname: + self.hostname = encode_dnsname(self.hostname) + if self.zone: + self.zone = encode_dnsname(self.zone) + return super().save(*args, **kwargs) + class Version(BaseModel): """Database schema version for migrations.""" @@ -301,7 +310,7 @@ def get_hostname_for_user(hostname: str, user: User): return Hostname.get((fqdn == hostname) & (Hostname.user == user)) -# Re-export DoesNotExist for convenience +# Re-export DoesNotExist and EncodingError for convenience __all__ = [ 'db', 'DATABASE_VERSION', @@ -314,4 +323,5 @@ __all__ = [ 'get_hostname', 'get_hostname_for_user', 'DoesNotExist', + 'EncodingError', ]