New feature request : possibilité d'envoyer un mail de reset de mot de passe à un user. #35

Open
opened 2 months ago by JohnLivingston · 9 comments
Collaborator

Quand on créé des SPIP (ou des auteurs) de manière automatisée, on peut actuellement leur envoyer un mot de passe généré aléatoirement.

Mais cela n'est pas une bonne pratique. Le mot de passe va potentiellement circuler en clair sur le réseau, et rien ne nous garanti que l'auteur va le modifier à la première connexion.

Pour cela, je suggère la création d'un commande AuteursEnvoyerLienOubli.
Je l'ai codée, je vous la commit dans un instant pour relecture.

Il me reste un bug : le mail est en fait mis dans un système de job géré par une pseudo crontab. Il ne sera envoyé que quand quelqu'un affichera le site (ou peut être après plusieurs affichages s'il y a plusieurs jobs en attente).
Si quelqu'un peut m'indider la façon la plus propre de déclencher cet envoi immédiatement, je suis preneur. J'ai plusieurs pistes :

  • faire un GET http sur le site...
  • appeler inc/utils/cron (si j'ai bien compris)
  • appeler inc/genie/inc_genie_dist

Mais dans tous les cas, je ne sais pas trop ce qui va se passer s'il y a plusieurs tâches en attente. La mienne risque de ne pas être la seule en attente. Et comme je travaille sur des SPIPs que je viens de créer, il n'y aura pas encore de trafic web pour rattraper le coup.

Quand on créé des SPIP (ou des auteurs) de manière automatisée, on peut actuellement leur envoyer un mot de passe généré aléatoirement. Mais cela n'est pas une bonne pratique. Le mot de passe va potentiellement circuler en clair sur le réseau, et rien ne nous garanti que l'auteur va le modifier à la première connexion. Pour cela, je suggère la création d'un commande AuteursEnvoyerLienOubli. Je l'ai codée, je vous la commit dans un instant pour relecture. Il me reste un bug : le mail est en fait mis dans un système de job géré par une pseudo crontab. Il ne sera envoyé que quand quelqu'un affichera le site (ou peut être après plusieurs affichages s'il y a plusieurs jobs en attente). Si quelqu'un peut m'indider la façon la plus propre de déclencher cet envoi immédiatement, je suis preneur. J'ai plusieurs pistes : - faire un GET http sur le site... - appeler inc/utils/cron (si j'ai bien compris) - appeler inc/genie/inc_genie_dist Mais dans tous les cas, je ne sais pas trop ce qui va se passer s'il y a plusieurs tâches en attente. La mienne risque de ne pas être la seule en attente. Et comme je travaille sur des SPIPs que je viens de créer, il n'y aura pas encore de trafic web pour rattraper le coup.
JohnLivingston added the
amlioration
label 2 months ago
Collaborator
Il y a une fonction prévue pour : https://programmer.spip.net/Fonction-queue_lancer_url_http_async
Collaborator

Mais la fonctionnalité elle-même d'envoi d'un lien pour permettre de changer le mdp n'est pas spécifique à spip-cli et elle devrait plutôt intégrer le core.

Mais la fonctionnalité elle-même d'envoi d'un lien pour permettre de changer le mdp n'est pas spécifique à spip-cli et elle devrait plutôt intégrer le core.

J'allais le dire, et justement : il y a deux tickets sur ça dans le core :

  • un lors de l'envoi explicite par un admin : spip/spip#4661
  • un parlant plus généralement de l'inscription sans donner la meilleure méthode (qui peut être aussi bien ce genre d'email avec jeton pour aller changer le passe ou demander le passe dès l'inscription ce que propose un plugin) : spip/spip#3778

Et donc oui : à un moment, il faut vraiment qu'on pense à virer complètement la notion d'envoi en clair de mot de passe, partout où c'est utilisé, dès le noyau.

J'allais le dire, et justement : il y a deux tickets sur ça dans le core : - un lors de l'envoi explicite par un admin : https://git.spip.net/spip/spip/issues/4661 - un parlant plus généralement de l'inscription sans donner la meilleure méthode (qui peut être aussi bien ce genre d'email avec jeton pour aller changer le passe ou demander le passe dès l'inscription ce que propose un plugin) : https://git.spip.net/spip/spip/issues/3778 Et donc oui : à un moment, il faut vraiment qu'on pense à virer complètement la notion d'envoi en clair de mot de passe, partout où c'est utilisé, dès le noyau.

Ah et commentaire pour l'histoire du job : ici t'es spécifiquement dans un truc lancé en cli, donc ya pas du tout à "mettre en attente" pour plus tard une tâche dans un job ! Tu veux envoyer un email ? Tu envoies un email. Directement. Donc pas à mettre dans un job mais envoyer_mail() direct.

Ah et commentaire pour l'histoire du job : ici t'es spécifiquement dans un truc lancé en cli, donc ya pas du tout à "mettre en attente" pour plus tard une tâche dans un job ! Tu veux envoyer un email ? Tu envoies un email. Directement. Donc pas à mettre dans un job mais envoyer_mail() direct.

Pour compléter ce que dit @rastapopoulos si tu veux envoyer le mail directement, et non passer par les notifications qui dépedent du CRON, il te faut "duppliquer" le code de la fonction message_oubli() https://git.spip.net/spip/dist/src/branch/master/formulaires/oubli.php#L25 dans ta commande et y remplacer notifications_envoyer_mails() par envoyer_mail().

Pour compléter ce que dit @rastapopoulos si tu veux envoyer le mail directement, et non passer par les notifications qui dépedent du CRON, il te faut "duppliquer" le code de la fonction `message_oubli()` https://git.spip.net/spip/dist/src/branch/master/formulaires/oubli.php#L25 dans ta commande et y remplacer `notifications_envoyer_mails()` par `envoyer_mail()`.
Poster
Collaborator

Merci pour vos retours.

Je prend bien note pour les demandes de changement dans Core concernant l'envoi du mot de passe. Mais en attendant, et pour que ce soit possible sur la branche 3.2, vous ne voyez pas d'objection à ce que je continue sur cette voie ?

Cette fonction pourrait aussi servir si un accès auteur est compromis : on utiliser auteurs:changer:mdp pour mettre un pass temporaire et bloquer l'accès, puis on envoie un lien de reset.

Pour compléter ce que dit @rastapopoulos si tu veux envoyer le mail directement, et non passer par les notifications qui dépedent du CRON, il te faut "duppliquer" le code de la fonction message_oubli() https://git.spip.net/spip/dist/src/branch/master/formulaires/oubli.php#L25 dans ta commande et y remplacer notifications_envoyer_mails() par envoyer_mail().

Je voulais justement éviter de dupliquer le code. Pour être sûr de ne rien oublier, et surtout pour augmenter les chances de compatibilité entre les versions de SPIP.

Il y a une fonction prévue pour : https://programmer.spip.net/Fonction-queue_lancer_url_http_async

Merci ! Et que penses tu de l'appel direct à inc_genie_dist ? C'est censé marcher ?

Merci pour vos retours. Je prend bien note pour les demandes de changement dans Core concernant l'envoi du mot de passe. Mais en attendant, et pour que ce soit possible sur la branche 3.2, vous ne voyez pas d'objection à ce que je continue sur cette voie ? Cette fonction pourrait aussi servir si un accès auteur est compromis : on utiliser auteurs:changer:mdp pour mettre un pass temporaire et bloquer l'accès, puis on envoie un lien de reset. > Pour compléter ce que dit @rastapopoulos si tu veux envoyer le mail directement, et non passer par les notifications qui dépedent du CRON, il te faut "duppliquer" le code de la fonction `message_oubli()` https://git.spip.net/spip/dist/src/branch/master/formulaires/oubli.php#L25 dans ta commande et y remplacer `notifications_envoyer_mails()` par `envoyer_mail()`. Je voulais justement éviter de dupliquer le code. Pour être sûr de ne rien oublier, et surtout pour augmenter les chances de compatibilité entre les versions de SPIP. > Il y a une fonction prévue pour : https://programmer.spip.net/Fonction-queue_lancer_url_http_async Merci ! Et que penses tu de l'appel direct à inc_genie_dist ? C'est censé marcher ?
Collaborator

Rastapopoulos et b_b te suggèrent d'employer directement envoyer_mail quand c'est pour spip_cli donc est ce que la question se pose encore vraiment JohnLivingston ? À part ça faut pas trop appeler directement une fonction _dist puisqu'elle est susceptible d'être surchargée, mais l'appeler via ce qu'on récupère avec charger_fonction.

Rastapopoulos et b_b te suggèrent d'employer directement `envoyer_mail` quand c'est pour `spip_cli` donc est ce que la question se pose encore vraiment JohnLivingston ? À part ça faut pas trop appeler directement une fonction `_dist` puisqu'elle est susceptible d'être surchargée, mais l'appeler via ce qu'on récupère avec `charger_fonction`.
Poster
Collaborator

Rastapopoulos et b_b te suggèrent d'employer directement envoyer_mail quand c'est pour spip_cli donc est ce que la question se pose encore vraiment JohnLivingston ? À part ça faut pas trop appeler directement une fonction _dist puisqu'elle est susceptible d'être surchargée, mais l'appeler via ce qu'on récupère avec charger_fonction.

Oui, j'avais compris que pour les fonctions _dist il faut passer par charger_fonction.

Pour l'utilisation de envoyer_mail, comme je l'ai dit, je ne suis pas chaud pour réécrire la fonction message_oubli dans spip-cli... Elle fait plusieurs choses. Si je la réécrit, je prend le risque de ne pas être compatible avec toutes les versions de SPIP (courantes ou à venir). Ça me parait plus propre de reposer sur une fonction de haut niveau.

> Rastapopoulos et b_b te suggèrent d'employer directement `envoyer_mail` quand c'est pour `spip_cli` donc est ce que la question se pose encore vraiment JohnLivingston ? À part ça faut pas trop appeler directement une fonction `_dist` puisqu'elle est susceptible d'être surchargée, mais l'appeler via ce qu'on récupère avec `charger_fonction`. Oui, j'avais compris que pour les fonctions _dist il faut passer par charger_fonction. Pour l'utilisation de `envoyer_mail`, comme je l'ai dit, je ne suis pas chaud pour réécrire la fonction `message_oubli` dans spip-cli... Elle fait plusieurs choses. Si je la réécrit, je prend le risque de ne pas être compatible avec toutes les versions de SPIP (courantes ou à venir). Ça me parait plus propre de reposer sur une fonction de haut niveau.
Collaborator

Je sais pas les détails de ce que tu fais... mais l'inc genie est à disposition et tu peux l'appeler si tu veux.

Tu peux aussi appeler l'action accelerer_jobs : https://git.spip.net/spip-contrib-extensions/accelerer_jobs/src/branch/master/action/accelerer_jobs.php ou faire comme elle : chercher le job et appeller queue_schedule...

Je sais pas les détails de ce que tu fais... mais l'inc genie est à disposition et tu peux l'appeler si tu veux. Tu peux aussi appeler l'action accelerer_jobs : https://git.spip.net/spip-contrib-extensions/accelerer_jobs/src/branch/master/action/accelerer_jobs.php ou faire comme elle : chercher le job et appeller `queue_schedule`...
Sign in to join this conversation.
No Milestone
No Assignees
4 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.