Open brunob opened 8 years ago
la recette est dans un script accessible en CLI : https://github.com/seenthis/seenthis-cli/
Pour la fonctionnalité, un gros souci est le temps que met la requête à s'exécuter ; je ne sais pas si elle sera jouable en direct par le serveur web (timeout assuré). Mais si on vérifie qu'elle peut être jouée en plusieurs fois, on peut la découper en petits morceaux et la faire jouer par un génie.
@Fil super, merci pour la recette mignon :)
Oui, l'idée d'un génie qui découperait la tâche en petits blocs exécutés par job queue me semble aussi une bonne piste.
Ça peut aussi être juste un drapeau ajouté sur le compte (statut poubelle quoi), et ensuite une tâche cli/serveur est lancée en cron une fois par 24h et supprime les utilisateurs et contenus. Donc pas en hit PHP HTTP.
La demande est récurrence : https://seenthis.net/messages/66435
l'idée pourrait être d'appliquer immédiatement "masquer le compte" (qui basculerait tous les messages en privé + le compte en "silencieux", avec une suppression effective des données au bout de x jours (3 ou 4)
Je trouve quand même ça toujours problématique pour toutes les personnes qui ont mis des étoiles à des trucs à garder en mémoire.
Si dans tous les cas ça se fait en CLI, une fois par nuit par exemple, yorait peut-être moyen de réfléchir à un truc plus fin. Surtout que des fois ya des énormes conversations en commentaires, et les gens n'ont jamais demandé à ce que leurs messages soient supprimés, avec parfois dedans des trucs tout aussi intéressant voire plus que le seen de départ.
Exemple de choses possibles :
De temps en temps ça fera peut-être quelques trucs bizarres, mais moins que de perdre plein de contenus et marques-pages ! Et du coup tous les gens qui ont étoilé gardent tout.
Proposition de fonctionnement :
Interface : bouton pour supprimer son compte => confirmation par email => drapeau sur le compte utilisateurice (poubelle) => attente d'un délai => Cron qui passe et qui supprime le compte et anonymise les anciens contenus.
Tout le texte des anciens contenus est supprimé ou remplacé par [contenu supprimé]. Les URL seuls sont gardés (ce serait mieux si c'est possible).
De manière méga rare il pourrait y avoir encore des personnes qui voudraient supprimer un URL précis, mais ça serait vraiment super peu probable : personne ne va demander à supprimer un seen totalement anonyme, sans texte perso, avec juste un URL vers csstricks, libé.fr, bbc.com, ou autre dans le genre…
Pour ne pas oublier, j'avais repéré ce truc il y a quelques temps : http://websocketd.com/ ref https://seenthis.net/messages/524552
Ça pourrait mais comme on l'a évoqué plus haut, je ne sais pas s'il y a besoin d'interface pour voir quand on supprime. À priori changer le statut pour faire drapeau, ça permet de détecter qui, et ensuite un programme sur le serveur passe une ou deux fois par jour pour supprimer ou anonymiser les choses des gens ayant ce statut, puis supprimer le compte utilisateur quand c'est fini.
pour voir quand on supprime
Précision nécessaire ? Je référence l'outil en question car il permettrait d'accéder au script CLI de suppression de compte depuis l'interface web, rien de plus :)
Tu veux dire pour le lancer immédiatement sans mettre de drapeau et attendre qu'il passe par un cron donc ? Dès qu'on appuie sur le bouton, paf ça lance la suppression ou l'anonymisation ?
Non, ce genre d'action nécessite bien sûr le déclenchement d'au moins une alerte js pour demander la confirmation. Ensuite, on peut le faire en deux temps en utilisant les commandes natives de seenthis-cli : désactiver, attendre un délai, puis supprimer.
Autre piste, du PHP en asyncrhone cf https://seenthis.net/messages/782351 avec amphp par exemple : https://github.com/amphp/mysql
Je remets le détail de ce que j'aimerais permettre dans l'interface, avec à chaque fois un label court, et une phrase d'explication détaillée à rédiger.
Désactiver mon compte Ça laisse tous les contenus mais ça n'affiche plus le nom ni l'avatar, plus de lien vers la page perso, on ne reçoit plus aucune notif, mais on peut récupérer son compte plus tard et tout se remet.
Léguer tous mes contenus Ça laisse 100% des contenus mais ça les anonymise dans un non-compte unique "anonymous" ou ce genre.
Léguer mes liens et citations Ça anonymise mais en supprimant tout texte personnel, ça laisse tous les partages de liens et les citations, ainsi les gens qui ont étoilé pour garder des articles intéressants etc ne perdent rien du tout.
Supprimer mon compte et tous mes contenus Ça supprime vraiment tout tout tout, mais on explique dans la phrase que c'est pas sympa pour les autres et que ça serait mieux au minimum le choix précédent.
(Peut-être même que le dernier pourrait ne pas exister : que le max qu'on puisse faire c'est supprimer tout son compte oui mais que dès lors que des liens ont été étoilés par d'autres, ça ça reste toujours.)
Une fois que la personne a fait son choix, ça met un drapeau, et ensuite un script passe régulièrement sur le serveur pour faire le travail de nettoyage qui peut être long lorsque ce sont des choses fines comme supprimer que les textes persos, etc. Mais on s'en fiche ça sera fait en arrière plan uniquement, donc pas de problème technique particulier.
Comme je le disais sur IRC :
< b_b > grosso merdo on devrait lancer la requete des liens morts toutes les 24h en cron
< b_b > et ajouter à la file des paquet de 10 ou X liens à supprimer
< b_b > ça se ferait tout seul
La requête en question est celle qui supprime les liens morts, cf https://github.com/seenthis/seenthis-cli/blob/master/supprimer_auteur.php#L102
Pour référence https://github.com/mattkingshott/waterfall#how-does-it-work
Ça voudrait dire quoi "soft delete" dans notre contexte ? On met le compte id_auteur en statut "poubelle" chez nous ? (ou autre statut dédié ?) Et pendant ce temps on supprime ou migre (suivant l'option "léguer" choisi plus haut) ses centaines/milliers de contenus, et quand c'est fini on supprime vraiment sa ligne SQL.
C'est exactement ça :)
Je remarque qu'on a déjà des chaînes de langues qui mentionnent la suppression de profil, cf :
https://github.com/seenthis/seenthis_squelettes/blob/master/lang/seenthis_fr.php#L107
Du coup, je me propose d'ajouter le nécessaire pour que ça soit possible depuis l'interface, ça fera des vacances à @Fil :p
Pour la procédure, je pense que l'action nécessite une validation par email : on clique sur le bouton, ça envoie un mail à l'auteur avec un lien d'action sécurisée par un token (un peu comme on le fait déjà pour les notifications de spam dans SPIP).
Du coup, il me faudrait la recette (listes des requêtes sql ou autre) utilisée par les admins lors d'une demande de suppression. Quelqu'un⋅e aurait ça pour moi ?