Project

General

Profile

Development #72173

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

Added by Thomas Noël 4 months ago. Updated about 2 months ago.

Status:
Solution déployée
Priority:
Normal
Assignee:
Category:
-
Target version:
-
Start date:
08 December 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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


Files

Associated revisions

Revision 64d973c2 (diff)
Added by Thomas Noël about 2 months ago

emails: restrict domains for default_from_email (#72173)

History

#1

Updated by Thomas Noël 4 months ago

  • Assignee set to Thomas Noël
#2

Updated by Thomas Noël 4 months ago

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

Updated by Thomas Noël 4 months ago

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

Updated by Frédéric Péters 3 months ago

# 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

Updated by Thomas Noël 3 months ago

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

Updated by Thomas Noël 3 months ago

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

#12

Updated by Frédéric Péters 3 months ago

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

Updated by Thomas Noël 3 months ago

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

#15

Updated by Gitea (Bot) Gitea 2 months ago

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

#16

Updated by Gitea (Bot) Gitea about 2 months ago

  • Status changed from Solution proposée to Solution validée

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

#17

Updated by Thomas Noël about 2 months ago

  • Status changed from Solution validée to 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

Updated by Transition automatique about 2 months ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF