-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Duplicated usernames and login_names in v5 #22
Comments
edit: deleted in favor of full solution in the comment below. |
I created a small sql script that:
Discourse has complicate rules for handling non-alphanumeric characters; this script reduces the complexity by completly discarding them. The script must be reviewed and eventually adapted/fixed by the association before applying it to the v5 production database. A backup of the username column is created in Before applying the script, some postgresql extensions must be installed with: create extension unaccent;
create extension intarray; |
(I think intagg extension is missing too?) Anyway, I ran the script on punbb_users table from a local copy of production server (only the relevant table punbb_users, don't be afraid!) There seems to be a user with null username (id 310193 > http://www.camptocamp.org/users/310193/fr). That case should be handled (manually!) Still, the discriminating function seem not very nice to me. I would suggest, if nothing better arises, to:
Maybe these questions could be adressed to the forum moderators? |
The username size limits should be changed : the allowed size is between 2 and 25 characters. |
Ce pseudo n'est pas vide, il est constitué d'un espace. Il a été créé par les modérateurs forum, pour que personne d'autre ne puisse le prendre (un petit malin l'avait fait avant nous, et on avait supprimé le compte). Autre remarque : si en apparence il y a des doublons sur la V5, c'est à cause des espaces ; en rajoutant un espace après le pseudo, on crée un pseudo différent, mais de même apparence. Pour la pertinence des remplacements (_ ou - ou .ou autres) une discussion au sein de l'assoce (essentiellement avec les modos forum), sur le forum V6 Réseau social donc, serait effectivement bienvenue, par mail c'est peu pratique ; mais il faudrait au préalable nous lister :
Désolé, je lis l'anglais mais suis incapable de l'écrire... J.Marc |
Discourse has complicate rules for the special characters (_ . -).
The main issue is how to normalize existing usernames with these complicate rules? |
There is an additionnal restriction in Discourse: the usernames should be unique regardless of the case. |
Merci gberaudo.
La discussion est lancée : |
2 questions:
|
@jmarcmod, no space; you can find all the rules in https://github.com/discourse/discourse/blob/be3a5a56ccc284b352aa65080fc6b955f73cc72a/app/models/username_validator.rb. |
Désolé pour cette longue absence, suite au décès de mon père. |
Mes condoléances. Merci pour ta persévérance, je regarderai ça probablement après le pont. |
Décidément le temps m'a manqué... Règles de formatage des pseudos sous DiscourseCaractères autorisés: 2 groupes
NB: les lettres sont insensibles à la casse (en tenir compte car on crée ainsi facilement des doublons). Caractères interdits: 2 groupes
Configurations interdites avec les caractères autorisés:
Nombre de caractères autorisé:
Les étapes de la migration
NB: pour ceux qui aiment que leur pseudo apparaisse avec une belle mise en forme, il y aura toujours la possibilité de le faire dans le champ du "nom d'utilisateur", qui apparait à droite du pseudo Discourse s'il lui est différent. Processus de reformatage automatique1) Mise en conformité a) Pour toute combinaison de plusieurs caractères spéciaux (de type S ou S') consécutifs, identiques ou pas, on ne garde que le premier. b) Tout caractère spécial (de type S ou S') en fin de pseudo est supprimé. c) Toute extension interdite est supprimée. d) Remplacer les lettres accentuées par leur équivalent non accentué. e) Remplacer les lettres grecques (ou d'autres langues) par leur équivalent latin. f) Remplacer par l'underscore _ ces 5 caractères spéciaux: espace | @ | & | : | / g) Remplacer par le point . ces 2 caractères spéciaux: ' | * h) Remplacer par le chiffre 0 ce caractère spécial: ø i) Remplacer par la lettre majuscule S ce caractère spécial: $ j) Suppression pure et simple des autres caractères spéciaux de type S' 2) Traitement des pseudos trop petits ou trop longs a) Si après reformatage un pseudo se retrouve vide ou avec un seul caractère, on le remplace par user* avec à la place de l'étoile son ID V5. b) Si après reformatage un pseudo se retrouve avec plus de 25 caractères, on ne garde que les 25 premiers caractères. 3) Traitement des doublons a) En cas de doublons au sens V6 créés par le reformatage, les pseudos identiques se voient augmentés de la partie numérique de l'ID V5 (à l'exception du pseudo du membre le plus ancien, i.e. du pseudo à la plus petite ID, qui lui reste intact). b) Si l'ajout de l'ID fait dépasser les 25 caractères autorisés à au moins l'un des doublons, on enlève le nombre adéquat des derniers caractères (hors ID) pour chaque doublon concerné (ça ne concerne donc jamais le plus ancien des doublons). |
Pour l'instant on ne peut pas vérifier sur la version beta comment la migration a normalisé le pseudo forum, puisque c'est bugué et qu'elle l'a remplacé par le login, cf #48. Edit : par ailleurs, est-il correct que la normalisation automatique des pseudos forum doit se faire lors de la migration (et incombe donc à la SA) ? ou faut-il que les dévs de l'assoce la fassent au préalable sur la V5 ? car dans ce dernier cas je n'ai rien vu bouger, et il y a urgence... on a demandé aux membres dont le pseudo n'est pas conforme de le modifier, mais tous ne l'auront pas fait. |
Je ne sais pas. S'agit-il de ce script : https://github.com/c2corg/v6_api/blob/master/c2corg_api/scripts/migration/create_unique_normalized_usernames.sql ? |
Ce script date du 15 avril, il est donc antérieur aux règles que nous avons définies ci-dessus le 30 mai. |
L'implémentation du script de normalisation des pseudo v5 a toujours été hors scope pour la SA. Le script fourni par Guillaume permettait uniquement de pouvoir continuer à travailler sans être bloqués ou obligés de faire des bricolages fragiles de notre côté. Si l'association adapte le script (tout en restant conforme aux règles Discourse), alors la SA fera l'effort d'adapter les règles de validation de l'application:
|
En effet. |
Je rappelle que nous avons fixé hier un bug dans le SSO qui écrasait les username et name dans discourse avec le login du topoguide. See c2corg/v6_api@b9d795e |
Je viens de tester dans la BD v5 qu'on a utilisée pour la migration (après application du script de normalisation) :
|
C'est effectivement ce que j'obtiens sur ma page account. |
J'ai peut-être oublié de préciser que la démo n'est pas à jour !!! Mais ceci a bien été fixé par c2corg/v6_api@b9d795e |
Ah ben oui, nous ne regardons que la demo officielle : http://forum.demov6.camptocamp.org/ |
Je vais la mettre à jour dans quelques minutes |
La config admin sera conservée ? Car je n'ai pas eu le temps de la sauvegarder et je n'ai plus accès à la demo. |
Problème pour la modification du pseudo forum via la page account J'ai tenté de modifier mon pseudo forum via la page account. C'est bien plus embêtant que le problème de formatage à la migration ; ça voudrait dire qu'une fois la V6 en prod, il y aura des contraintes de pseudo forum plus strictes que dans discourse, qui empêcheront les gens d'avoir un pseudo à la fois proche de l'ancien et lisible. Je ne sais pas s'il faut ouvrir une nouvelle issue pour ce problème, ou si c'est lié au script de normalisation ? |
Le formulaire "account" contient lui-même une validation cohérente avec celle du script de normalisation v5 : https://github.com/c2corg/v6_ui/blob/master/c2corg_ui/templates/account.html#L38 Pareil pour la base de données de l'API (qui fait foi) : Si le script de normalisation est modifié il faudra aussi modifier ces validations. Idem si plus tard les règles sur les pseudos sont modifiées. "lutindelaforet" je trouve ca bien plus cool comme pseudo que "lutin.de.la.foret". |
OK, comportement "cohérent" donc.
Parce que tu connais bien ce modo, et donc que ton esprit détache tout de suite les 4 mots ; ce n'est pas le cas quand on tombe dessus la première fois. |
J.Marc : pour avoir le comportement que tu souhaites (remplacer ' ' et @ par _ ; remplacer ' et * par .) je pense qu'il suffit d'ajouter ces 2 lignes : update punbb_users set username = substring(regexp_replace(unaccent(old_username), '[ @]', '_', 'g'), 0, 16); (et donc surement changer 16 en 25 dans ces trois lignes, mais il faut faire ça proprement pour définir la même limite partout) |
Merci Josué !
|
oui, le cas h) je suis pas sûr que ça fonctionne, ça dépend si 'ø' est bien reconnu comme tel. Les autres caractères ne devraient pas poser problème. Pour supprimer plusieurs caractères spéciaux successifs, il faut ajouter encore une ligne de plus : update punbb_users set username = substring(regexp_replace(username, '[.-_]{2,}', '', 'g'), 0, 16); (il y aurait moyen de conserver le premier caractère spécial, en rafinant un peu) Et pour supprimer les caractères spéciaux à la fin, quelque chose du style: Je regarde comment faire des tests pour confirmer tout cela... |
@arnaud-morvan : work in progress ? |
Yes, working on |
Not sure about that we can do in the UI, simply remove the regex and API will do the validation. |
Do you mean the What about having a minimal regex to catch "easy" errors (list of accepted characters)? The API will handle more complex errors. |
Migration du 28/11 |
Je ne sais pas dire si la modif est passée sur demov6, je pose la question
demain.
Hervé
Le 29 novembre 2016 à 15:26, jmarcmod <notifications@github.com> a écrit :
… Pas d'amélioration, c'est toujours l'ancien script qui refuse point, tiret
et underscore et limite à 15 caractères.
Est-ce qu'il y aura au moins la possibilité de modifier le pseudo forum
dans ce sens via la page compte topoguide ?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#22 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/ATagjIdii1VDpqdMwHmGPMQM1MMElLZ_ks5rDDYpgaJpZM4IARpY>
.
|
La partie UI sera mise a jour demain. |
Visiblement, le 1er script de normalisation tient compte de la casse pour la détection des doublons, alors que discourse ignore la casse.
Explication : il y a aussi sur la V5 un pseudo forum LOIC ; le script utilisé lors de la migration n'a pas vu de doublon, puisque ce script distingue les majuscules ; mais discourse a repéré un doublon, décidé de garder LOIC et de changer Loic en Loic1. NB : je ne savais pas s'il fallait que je poste cela ici ou sur l'issue api #547, dans le second cas merci de reporter ce problème dans l'autre issue. |
Avec c2corg/v6_api#531 puis c2corg/v6_api#547 nous avons ajouté un index unique sur le forum_username en minuscules dans la base topoguide. |
Good job ! |
Sur la beta, je vois que le nouveau script fonctionne (au moins pour point, tiret, underscore). |
En revanche on ne peut plus changer son pseudo forum : message d'erreur dans account :
|
My pseudo forum is Lutin on v5 |
I've followed the instructions here : #22 (comment) Concerning the error with discourse, I will investigate ASAP. |
ID of the user as suffix explains why now my forum pseudo becomes Lutin11130, fine with me. |
Le nouveau script de normalisation a très bien fonctionné. @stef74 : issue à fermer je pense. |
The username and login_name fields are not unique in v5 as can be shown by the following 2 requests:
-> 42 results
-> 48 results
It is essential that the v5 database be fixed so that we can import in the topoguide and in Discourse
robustly and consistently.@fbunoz, could you please have a look to this?
In addition, due to restrictions in the Discourse forum usernames, we cannot use the
username
field (forum name) as-is. The problem is that normalizing the username may result in non-unique usernames. @fbunoz, would it be possible to include a normalized and unique column in the dumps? In addition, a few weeks before the final migration could users be prevented to change their forum pseudo?discourse_username
column to v5 dump with a normalized and unique pseudo name;The text was updated successfully, but these errors were encountered: