Project

General

Profile

Development #69223

custom_user : vérification du numéro de téléphone par un challenge (envoi d’un code) à la création du compte

Added by Paul Marillonnet 4 months ago. Updated about 1 month ago.

Status:
Solution déployée
Priority:
Normal
Category:
-
Target version:
-
Start date:
19 September 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

Description

Le fait de pouvoir envoyer des SMS dans authentic, #65179, avance et il faut maintenant gérer la façon dont cette capacité d’envoi permet de vérifier le numéro de téléphone mentionné pour la première fois par l’usager dans authentic.
Cette vérification passe par un challenge, par exemple une séquence de chiffres, envoyé à ce numéro, que l’usager saisit ensuite dans un formulaire dédié.
La séquence :
· déclaration du numéro de téléphone
· envoi du code
· vérification de celui-ci
est régie par les mêmes contraintes en front que #69222.


Files

0002-add-sms-code-related-settings-69223.patch (975 Bytes) 0002-add-sms-code-related-settings-69223.patch Paul Marillonnet, 13 October 2022 02:06 PM
0001-registration-display-phone-number-in-form-69223.patch (1.88 KB) 0001-registration-display-phone-number-in-form-69223.patch Paul Marillonnet, 13 October 2022 02:06 PM
0003-utils-misc-add-sms-code-creation-utilitary-function-.patch (912 Bytes) 0003-utils-misc-add-sms-code-creation-utilitary-function-.patch Paul Marillonnet, 13 October 2022 02:06 PM
0004-add-sms-code-model-69223.patch (4.68 KB) 0004-add-sms-code-model-69223.patch Paul Marillonnet, 13 October 2022 02:06 PM
0005-app_settings-add-sms-related-authentic2-settings-692.patch (1.72 KB) 0005-app_settings-add-sms-related-authentic2-settings-692.patch Paul Marillonnet, 13 October 2022 02:06 PM
0006-utils-shamelessly-steal-hobo-s-request-wrapper-69223.patch (4.82 KB) 0006-utils-shamelessly-steal-hobo-s-request-wrapper-69223.patch Paul Marillonnet, 13 October 2022 02:06 PM
0007-utils-add-registration-sms-code-sending-logic-69223.patch (4.12 KB) 0007-utils-add-registration-sms-code-sending-logic-69223.patch Paul Marillonnet, 13 October 2022 02:06 PM
0008-use-phone-number-as-registration-means-in-form-valid.patch (4.62 KB) 0008-use-phone-number-as-registration-means-in-form-valid.patch Paul Marillonnet, 13 October 2022 02:06 PM
0009-add-a-page-for-users-to-input-their-sms-registration.patch (5.85 KB) 0009-add-a-page-for-users-to-input-their-sms-registration.patch Paul Marillonnet, 13 October 2022 02:06 PM
0010-views-make-sms-code-trigger-a-standard-registration-.patch (11.3 KB) 0010-views-make-sms-code-trigger-a-standard-registration-.patch Paul Marillonnet, 13 October 2022 02:06 PM

Related issues

Related to Publik - Development #49212: Création de compte avec un numéro de téléphone mobileEn cours01 October 2021

Actions
Related to Authentic 2 - Development #72441: registration : conservation de la next_url tout au long de la séquence d’enregistrement par numéro de téléphoneEn cours14 December 2022

Actions

Associated revisions

Revision 57da31b3 (diff)
Added by Paul Marillonnet about 2 months ago

registration: display phone number in form (#69223)

Revision 2741f474 (diff)
Added by Paul Marillonnet about 2 months ago

add sms code related settings (#69223)

Revision ff50dcf4 (diff)
Added by Paul Marillonnet about 2 months ago

utils/misc: add sms code creation utilitary function (#69223)

Revision bd17c891 (diff)
Added by Paul Marillonnet about 2 months ago

add sms code model (#69223)

Revision c9906d4a (diff)
Added by Paul Marillonnet about 2 months ago

app_settings: add sms-related authentic2 settings (#69223)

Revision d40f5d38 (diff)
Added by Paul Marillonnet about 2 months ago

utils: add registration sms code sending logic (#69223)

Revision e35275fe (diff)
Added by Paul Marillonnet about 2 months ago

use phone number as registration means in form validation (#69223)

Revision 26f9d209 (diff)
Added by Paul Marillonnet about 2 months ago

add a page for users to input their sms registration code (#69223)

Revision 3582bad6 (diff)
Added by Paul Marillonnet about 2 months ago

views: make sms code trigger a standard registration finalization (#69223)

History

#1

Updated by Paul Marillonnet 4 months ago

  • Related to Development #49212: Création de compte avec un numéro de téléphone mobile added
#2

Updated by Paul Marillonnet 4 months ago

  • Subject changed from custom_user : vérification du numéro de téléphone par un challenge (envoi d’un code) to custom_user : vérification du numéro de téléphone par un challenge (envoi d’un code) à la création du compte
#3

Updated by Paul Marillonnet 4 months ago

  • Status changed from Nouveau to En cours
  • Assignee set to Paul Marillonnet
#4

Updated by Paul Marillonnet 4 months ago

0001 : ajout du champ téléphone dans le formulaire d’inscription
0002 : les settings spécifiques
0003 : la fonction de création du code à envoyer par sms
0004 : le nouveau modèle pour la fonctionnalité
0005 : les app_settings spécifiques
0006 : le request_wrapper volé à hobo pour signer les appels à passerelle. Sans doute à voir si on peut faire un ticket pour mutualiser ce code, il y a un autre wrapper de ce genre dans chrono.
0007 : la fonction qui gère l’envoi à passerelle
0008 : la récupération du numéro de téléphone dans le formulaire d’enregistrement
0009 : la page qui permet à l’usager de saisir le code reçu
0010 : la finalisation de l’inscription (on rembraye sur la vue déjà en place), et les tests du déroulé complet de l’inscription

Deux choses qu’il faudrait peut-être voir, je regarde et ferai peut-être des tickets à part au besoin (à moins qu’on me dise qu’il faut corriger directement ici) :
· gérer l’inscription au sein d’une OU,
· gérer la next_url tout du long, pour pouvoir rembrayer sur l’écran de départ au moment où on a interrompu le parcours pour s’inscrire.

Jenkins rouge car un souci de pyupgrade (qui casse ensuite isort par ses modifications), que je ne reproduis pas en local, et jenkins n’affiche pas le diff, je regarde et je fais un ticket s’il s’avère que le problème ne vient pas de moi.

#5

Updated by Benjamin Dauvergne 3 months ago

  • Status changed from Solution proposée to En cours
  • 0001: je vois bien que email est mis à required=True si la méthode d'inscription par téléphone est requise, mais je ne vois pas de clean() pour valider qu'au moins mail ou phone sont présents (c'est peut-être plus loin, je lis dans l'ordre)
  • 0002: ok
  • 0003: ok
  • 0004: on a déjà authentic2.models.Token pour ça (tu peux mettre le UUID.digest()) ou l'inverse tu utilises Token.uuid.bytes pour générer ton code SMS (je ne sais pas trop si on préfère envoyer des URL ou des codes courts, pour moi le premier est plus simple à utiliser)
  • 0005: (c'est un peu difficile de dire ok ou pas quand le setting est introduit indépendamment du code qui l'utilise, je préfère quand c'est groupé)
  • 0006: pourquoi ne pas directement utiliser celui dans hobo ? Pour les tests tu peux juste utiliser requests nativement. et en pas appeler ça requests_wrapper, juste requests.
  • 0007: ok mais pas dans misc, un module sms (ça vaut pour create_sms_code plus haut), j'essaie de ranger un peu :)
  • 0008: ok donc le check demandée en 0001 est là, c'est pervers :)
    • plutôt que de poser en session le fait que le message de warning a été affiché, ajouter un champ caché warning-shown=1
    • idem pour registered phone y mettre un champ caché avec un signature hmac du numéro (phone-signature=hmac(pohne, settings.SECRET_KEY))
    • les champs cachés tu peux les poser d'office, simplement changer leur valeur dans self.data dans clean()
      0010: je ne comprends pas bien si on gère un token ou un code, on choisit ? si c'est juste un token ça nous évitera une nouvelle vue je pense
#6

Updated by Paul Marillonnet 3 months ago

Benjamin Dauvergne a écrit :

  • 0001: je vois bien que email est mis à required=True si la méthode d'inscription par téléphone est requise, mais je ne vois pas de clean() pour valider qu'au moins mail ou phone sont présents (c'est peut-être plus loin, je lis dans l'ordre)

Ok, j’ai ajouté une méthode clean, testée, c’est mieux directement dans la validation du formulaire plutôt que ce qui est fait dans 0008.

  • 0002: ok
  • 0003: ok
  • 0004: on a déjà authentic2.models.Token pour ça (tu peux mettre le UUID.digest()) ou l'inverse tu utilises Token.uuid.bytes pour générer ton code SMS (je ne sais pas trop si on préfère envoyer des URL ou des codes courts, pour moi le premier est plus simple à utiliser)

J’avoue que je ne me voyais pas utiliser le même modèle là, ça m’aurait paru pas assez factorisable. J’ai privilégié la séquence :
· on crée un objet SMSCode qui contient le numéro de téléphone candidat à l’inscription, l’UUID opaque de l’URL et la valeur du code à entrer par l’usager.
· la validation de ce code génère alors un token d’inscription à proprement parler. Ça permet notamment de simplifier 0010 qui rembraye sur le process d’inscription normal sans trop de modifs dans cette vue déjà existante.

Le fait que les deux objets aient un UUID opaque et partagent quelques champs me paraissaient une raison insuffisante pour tout regrouper dans un modèle. J’ai peur que ça embrouille le code plus qu’autre chose, pour moi c’est deux choses bien différentes mais je suis prêt à entendre des arguments contraires :)

  • 0005: (c'est un peu difficile de dire ok ou pas quand le setting est introduit indépendamment du code qui l'utilise, je préfère quand c'est groupé)
  • 0006: pourquoi ne pas directement utiliser celui dans hobo ? Pour les tests tu peux juste utiliser requests nativement. et en pas appeler ça requests_wrapper, juste requests.

Ok je tente dans le code d’importer celui d’hobo, avec un fallback sur ce nouveau requests_wrapper.

  • 0007: ok mais pas dans misc, un module sms (ça vaut pour create_sms_code plus haut), j'essaie de ranger un peu :)

D’ac, j’ai tout mis dans un module authentic2.utils.sms.

  • 0008: ok donc le check demandée en 0001 est là, c'est pervers :)

Pardon, il y a maintenant une méthode clean() dans le formulaire de 0001.

  • plutôt que de poser en session le fait que le message de warning a été affiché, ajouter un champ caché warning-shown=1
  • idem pour registered phone y mettre un champ caché avec un signature hmac du numéro (phone-signature=hmac(pohne, settings.SECRET_KEY))
  • les champs cachés tu peux les poser d'office, simplement changer leur valeur dans self.data dans clean()

Là j’ai simplement copié sur ce qui était déjà fait dans l’enregistrement par email, où on manipule request.session['registration-allow-resend'] et request.session['registered_phone']. Je préféferais qu’on reste soit sur la session pour les deux modes d’enregistrement, soit par des champs cachés pour les deux. Qu’est-ce qui te choque à utiliser la session pour ces infos ? Je trouvais ça pas mal la façon dont c’est géré dans l’enregistrement par mail.

0010: je ne comprends pas bien si on gère un token ou un code, on choisit ? si c'est juste un token ça nous évitera une nouvelle vue je pense

Là on gère bien un token dans les deux cas, c’était la piste privilégiée dans cette série de patches : la demande d’enregistrement par SMS génère un SMSCode, dont la validation permet de rembrayer sur la vue d’enregistrement standard, basée sur un objet Token.

#7

Updated by Paul Marillonnet 3 months ago

  • Status changed from En cours to Solution proposée

(Pour le reste c’est corrigé dans la branche, fraîchement rebasée.)

#8

Updated by Benjamin Dauvergne about 2 months ago

  • Status changed from Solution proposée to Solution validée
utils: shamelessly steal hobo's request wrapper (#69223)

Il ne faut pas le copier il faut l'utiliser directement et ajouter la dépendance.

#9

Updated by Paul Marillonnet about 2 months ago

Benjamin Dauvergne a écrit :

[...]

Il ne faut pas le copier il faut l'utiliser directement et ajouter la dépendance.

Je pensais qu’on favorisait toujours un fonctionnement standalone lorsque possible. Dans la branche, le patche d’après fait :

+try:
+    from hobo.requests_wrapper import Requests
+except ImportError:
+    from .requests_wrapper import Requests
+

Ce n’est que si hobo n’est pas installé qu’on utilise cette copie locale un peu remaniée.

#10

Updated by Benjamin Dauvergne about 2 months ago

À mon avis ce bateau est parti il y a longtemps, tu peux éventuellement faire juste :

try:
  from hobo...
except ImportError:
  from requests.sessions import Session as Requests

#11

Updated by Paul Marillonnet about 2 months ago

Benjamin Dauvergne a écrit :

À mon avis ce bateau est parti il y a longtemps,

Ah bon ok, au temps pour moi.

tu peux éventuellement faire juste :
[...]

Ok je fais ça, je pousserai ensuite.

#12

Updated by Paul Marillonnet about 2 months ago

  • Status changed from Solution validée to Résolu (à déployer)
commit 3582bad6b3f3cf807a34df840509f54d507420d3
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Wed Oct 12 11:48:20 2022 +0200

    views: make sms code trigger a standard registration finalization (#69223)

commit 26f9d2098dc30168f67f87528db82ba9d703b608
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Oct 13 13:27:51 2022 +0200

    add a page for users to input their sms registration code (#69223)

commit e35275fe451bc6c9bdbe860907c990c4af35705d
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Wed Oct 5 09:30:23 2022 +0200

    use phone number as registration means in form validation (#69223)

commit d40f5d382c07204da79e3b2301866fff195e03b7
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Mon Oct 10 09:35:10 2022 +0200

    utils: add registration sms code sending logic (#69223)

commit c9906d4a628a491ce926ba0c86069019aadef00c
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Wed Oct 5 10:36:47 2022 +0200

    app_settings: add sms-related authentic2 settings (#69223)

commit bd17c8915a3bf68a4b25741713c63b7ed51d607a
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Wed Oct 5 09:16:40 2022 +0200

    add sms code model (#69223)

commit ff50dcf4f09c74c0b751ae32dfebd874bc5ec733
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Wed Oct 5 09:14:57 2022 +0200

    utils/misc: add sms code creation utilitary function (#69223)

commit 2741f474b03bf718afe3432895bc52b4da87e928
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Wed Oct 5 09:14:41 2022 +0200

    add sms code related settings (#69223)

commit 57da31b3f7e35f116300dead2a31fd52d38301f7
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Wed Oct 5 08:52:16 2022 +0200

    registration: display phone number in form (#69223)
#13

Updated by Paul Marillonnet about 2 months ago

  • Related to Development #72441: registration : conservation de la next_url tout au long de la séquence d’enregistrement par numéro de téléphone added
#14

Updated by Transition automatique about 1 month ago

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

Also available in: Atom PDF