From caedb09d8fff74484d531721ef161b4233d873ff Mon Sep 17 00:00:00 2001 From: Gabriel Detraz Date: Thu, 15 Nov 2018 17:14:51 +0100 Subject: [PATCH] Fonction de check de l'alias via smtp --- re2o/base.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ users/models.py | 8 ++++++-- 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 re2o/base.py diff --git a/re2o/base.py b/re2o/base.py new file mode 100644 index 00000000..539cc30f --- /dev/null +++ b/re2o/base.py @@ -0,0 +1,48 @@ +# -*- mode: python; coding: utf-8 -*- +# Re2o est un logiciel d'administration développé initiallement au rezometz. Il +# se veut agnostique au réseau considéré, de manière à être installable en +# quelques clics. +# +# Copyright © 2018 Gabriel Détraz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# -*- coding: utf-8 -*- +""" +Regroupe les fonctions transversales utiles + +Et non corrélées/dépendantes des autres applications +""" + +import smtplib + +from django.utils.translation import ugettext_lazy as _ + +from re2o.settings import EMAIL_HOST + + +def smtp_check(local_part): + """Return True if the local_part is already taken + False if available""" + try: + srv = smtplib.SMTP(EMAIL_HOST) + srv.putcmd("vrfy", local_part) + reply_code = srv.getreply()[0] + srv.close() + if reply_code in [250, 252]: + return True, _("This domain is already taken") + except: + return True, _("Smtp unreachable") + return False, None diff --git a/users/models.py b/users/models.py index 63d0a875..2d271b3e 100755 --- a/users/models.py +++ b/users/models.py @@ -81,6 +81,7 @@ from re2o.settings import LDAP, GID_RANGES, UID_RANGES from re2o.login import hashNT from re2o.field_permissions import FieldPermissionModelMixin from re2o.mixins import AclMixin, RevMixin +from re2o.base import smtp_check from cotisations.models import Cotisation, Facture, Paiement, Vente from machines.models import Domain, Interface, Machine, regen @@ -1889,6 +1890,9 @@ class EMailAddress(RevMixin, AclMixin, models.Model): def clean(self, *args, **kwargs): self.local_part = self.local_part.lower() - if "@" in self.local_part: - raise ValidationError(_("The local part must not contain @.")) + if "@" in self.local_part or "+" in self.local_part: + raise ValidationError(_("The local part must not contain @ or +.")) + result, reason = smtp_check(self.local_part) + if result: + raise ValidationError(reason) super(EMailAddress, self).clean(*args, **kwargs)