From 1b666cd25b33ba1b645a51e7dd5686d4cf6ac2e3 Mon Sep 17 00:00:00 2001 From: Stefan Auditor Date: Thu, 12 Apr 2018 19:07:48 +0200 Subject: [PATCH] Add a sqlalchemy custom type for unicode to idna conersion of domain names --- core/admin/mailu/models.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/core/admin/mailu/models.py b/core/admin/mailu/models.py index 48f7b91e..e21afd79 100644 --- a/core/admin/mailu/models.py +++ b/core/admin/mailu/models.py @@ -38,6 +38,19 @@ class CommaSeparatedList(db.TypeDecorator): return filter(bool, value.split(",")) +class Idna(db.TypeDecorator): + """ Stores a Unicode string in it's IDNA representation (ASCII only) + """ + + impl = db.String + + def process_bind_param(self, value, dialect): + return value.encode("idna") + + def process_result_value(self, value, dialect): + return value.decode("idna") + + class Base(db.Model): """ Base class for all models """ @@ -54,7 +67,7 @@ class Domain(Base): """ __tablename__ = "domain" - name = db.Column(db.String(80), primary_key=True, nullable=False) + name = db.Column(Idna, primary_key=True, nullable=False) managers = db.relationship('User', secondary=managers, backref=db.backref('manager_of'), lazy='dynamic') max_users = db.Column(db.Integer, nullable=False, default=0)