h1. Validation des courriels Cette page présentera un algo de validation des mails pour limiter les bloquages que représente la validation de l'adresse de courriel à l'enregistrement d'une application. Cette algorithme possède ces paramètres: * un secret connu uniquement du service, _S_, * l'adresse de courriel à valider _C_ * un identifiant pour l'objet lié à ce courriel, _I_, * la période entre deux notifications de validation du mail, _pN_, * la durée de validité du compte sans validation du mail, _dV_, * une URL pour la page de validation, _U_. # 1. La page d'enregistrement collecte l'adresse de courriel. Cette adresse est marqué comme non validé bien que rattaché à l'objet _I_ et deux tâches de fond sont configurés, toutes deux identifiées par la paire (_I_, _C_): ** une tâche périodique d'envoi de notification à début immédiat, et périodicité pN envoyant un lien _L_ formaté de la sorte à l'adresse de courriel _C_:
Q = "id=" + urlencode(_I_) + email=" + urlencode(_C_) + "¬OnOrAfter=" + urlencode(iso8601(now + _dN_))
_L_ = _U_ + "?" + Q + "&signature=" + base64(hmac-sha1(_S_, Q))
** une tâche ponctuelle de suppression du compte invalide à la date _now+dN_ # 2. L'utilisateur reçoit le courriel de notification et clique sur le lien de validation # 2.a. Il a cliqué avant la date limite: les paramètre d'URL sont validés, l'adresse de courriel _C_ est marqué comme valide dans son rattachement à l'objet _I_. Toutes les tâches de fond liés à la paire (_I_, _C_) sont supprimés. # 2.b. Il a cliqué après la date limite, la validation des paramètres d'URL par la signature hmac-sha1 échoue, un message d'erreur est affiché expliquant le dépassement du délais. # 3. La date _now+dN_ advient sans qu'aucune validation n'ai été effectuée. Le rattachement du courriel _C_ à l'objet _I_ est défait et les tâches liés à cette invalidation sont effectués (suppression du compte par exemple), toutes les tâches liés à la paire (_I_, _C_) sont supprimées. Durant toute la période _now_ - _now+dN_, l'application pourra se servir de l'adresse _C_ sans problème.