Projet

Général

Profil

Development #72173

choix de l'expéditeur du mail : avoir une white-list des domaines possibles

Ajouté par Thomas Noël il y a plus d'un an. Mis à jour il y a 11 mois.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
08 décembre 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Pour éviter qu'un tenant utilise une adresse email d'expédition dont il n'a pas la charge, on pourrait avoir un settings.EMAIL_DOMAINS_WHITELIST qui listerait les domaines acceptables pour cette adresse. On y ajouterait par défaut le domaine du tenant hobo lui-même (exemple : hobo.demarches.ville.fr ferait que le domaine demarches.ville.fr serait accepté).

Techniquement ça serait une validation ajoutée sur le ValidEmailField de hobo.emails.forms


Fichiers

Révisions associées

Révision 64d973c2 (diff)
Ajouté par Thomas Noël il y a environ un an

emails: restrict domains for default_from_email (#72173)

Historique

#1

Mis à jour par Thomas Noël il y a plus d'un an

  • Assigné à mis à Thomas Noël
#2

Mis à jour par Thomas Noël il y a plus d'un an

Ce patch ajoute un settings EMAIL_FROM_ACCEPTED_DOMAINS qui est une liste des domaines autorisés, et qui peut contenir un "*" (un peu à la façon ALLOWED_HOSTS).

On autorise par ailleurs tous les domaines des sites de KNOWN_SERVICES, car ça sera surtout le nom du portail usager qui sera utilisé ici.

#3

Mis à jour par Thomas Noël il y a plus d'un an

Je retire le

+    if '.' not in domain:
+        raise ValidationError(_('Domain %s is not accepted') % email_domain)

qui ne sert à rien (trace d'une ancienne idée).

#4

Mis à jour par Frédéric Péters il y a plus d'un an

# Note: all KNOWN_SERVICES url domains are always accepter

accepteD.

Mais plus généralement ici et ailleurs on utilisera plutôt allowed.

+    settings.KNOWN_SERVICES = {
+        'combo': {
+            'portal': {
+                'title': 'Portal',
+                'url': 'https://example.org/test',
+            },
+            'other': {
+                'title': 'Empty',
+            },
+        }
+    }

Régulièrement on n'aura pas https://example.org/ mais https://www.example.org/ , si je comprends bien ça ne va pas autoriser @example.org.

#5

Mis à jour par Thomas Noël il y a plus d'un an

Frédéric Péters a écrit :

accepteD.
Mais plus généralement ici et ailleurs on utilisera plutôt allowed.

Merci, j'ai corrigé.

Régulièrement on n'aura pas https://example.org/ mais https://www.example.org/ , si je comprends bien ça ne va pas autoriser @example.org.

Régulièrement non, la plupart du temps on a une délégation sur demarches.ville.fr, et c'est sur ça qu'on installe le combo usager et qu'on gère le mail.

Au début j'avais choisi d’accepter ville.fr si on a une délégation sur demarches.ville.fr. Et je me dis que non, ça sera une exception, il faudra vérifier la config mail (SPF/DKIM/DMARC) avant d'autoriser l'usage via un settings. C'est un peu contraignant mais préférable : je préfère ne pas souffrir de l'inventivité des personnes qui ont accès à hobo.

Quand à nos recettes, on posera un settings général « EMAIL_FROM_ALLOWED_DOMAINS = ['entrouvert.org'] » dans /etc/hobo/settings.d/email_from_allowed_domains.py et tout ira bien.

#11

Mis à jour par Thomas Noël il y a plus d'un an

Ajout de l'acceptation de "ville.fr" quand une URL est de la forme "www.ville.fr".

#12

Mis à jour par Frédéric Péters il y a plus d'un an

Je sais que c'est ailleurs ainsi mais known_services = getattr(settings, 'KNOWN_SERVICES', {}), il y aurait moyen de plutôt itérer sur utils.get_operational_services(), ce qui garantit en plus qu'il y a une url, et ça deviendrait juste :

for service in utils.get_operational_services():
    fqdn = urllib.parse.urlparse(service.base_url).netloc.split(':')[0]
    if fqdn == domain or fqdn == 'www.' + domain:
        return

(ça demande aussi modification au test, pour créer les objets plutôt que pose settings.KNOWN_SERVICES).

#14

Mis à jour par Thomas Noël il y a plus d'un an

(branche corrigée, j'avais raté l'erreur de blackisation, une ligne vide manquante)

#15

Mis à jour par Robot Gitea il y a plus d'un an

Thomas NOEL (tnoel) a ouvert une pull request sur Gitea concernant cette demande :

#16

Mis à jour par Robot Gitea il y a environ un an

  • Statut changé de Solution proposée à Solution validée

Frédéric Péters (fpeters) a approuvé une pull request sur Gitea concernant cette demande :

#17

Mis à jour par Thomas Noël il y a environ un an

  • Statut changé de Solution validée à Résolu (à déployer)
commit 64d973c20e5b53ed9051a1113df976c550fc5346
Author: Thomas NOËL <tnoel@entrouvert.com>
Date:   Mon Dec 12 10:54:57 2022 +0100

    emails: restrict domains for default_from_email (#72173)

#18

Mis à jour par Transition automatique il y a environ un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#19

Mis à jour par Transition automatique il y a environ un an

Automatic expiration

#20

Mis à jour par Robot Gitea il y a 11 mois

Frédéric Péters (fpeters) a mergé une pull request sur Gitea concernant cette demande :

Formats disponibles : Atom PDF