Les lettres majuscules dans le nom d'utilisateur cassent la vérification des mentions accessibles dans le compositeur

En enquêtant sur Private Topics Plugin - #109 by thoka, j’ai découvert qu’une mention d’un utilisateur dans une catégorie restreinte n’est pas signalée lorsque le nom d’utilisateur contient des lettres majuscules.

Si je mentionne @SomeUser, l’éditeur effectue une requête vers
/composer/mentions.json?names[]=SomeUser&topic_id=10728
Dans le résultat, le nom d’utilisateur est renvoyé en minuscules, sans que user_reasons soit défini.

Une requête pour le nom d’utilisateur en minuscules renvoie "user_reasons": {"someuser":"category"}.

Si j’utilise des lettres minuscules pour les noms d’utilisateur dans le compositeur, des avertissements sont affichés pour les personnes ne disposant pas de droits suffisants.

Si l’on utilise la saisie semi-automatique fournie par l’éditeur, les noms d’utilisateur en minuscules saisis sont remplacés par des noms en majuscules et ne sont donc pas signalés.

3 « J'aime »

Bonne trouvaille @thoka !

Le problème se trouve ici

users retourne {"username_lower" => objet User }

Cependant, si name n’est pas en minuscules, users[name] n’existe pas.

Correction :

if user = users[name.downcase]
...
elsif group = groups[name.downcase]
...

Ou mieux : mettez tous les noms en minuscules au début de la méthode, car il y a beaucoup de problèmes. groups utilise correctement .where("lower(name) IN (?)", @names.map(&:downcase)), mais des fonctions comme visible_group_ids_for_allowed_check, topic_allowed_group_ids, mentionable_group_ids et members_visible_group_ids utilisent toutes where(name: @names), ce qui introduit également des problèmes de sensibilité à la casse.

3 « J'aime »

La correction appropriée se trouve ici :

mais c’est un changement trop important pour que je me sente à l’aise de le fusionner à ce stade :grimacing:

À la place, je vais corriger chaque « endpoint » un par un afin de simplifier la revue et de réduire les risques.

Voici la première étape :

7 « J'aime »

Depuis la reconstruction de Discourse pour les 188 commits allant de 645cb014c0 à 102c93e2ea, j’ai remarqué une nouvelle régression dans l’éditeur Markdown.

Cette fenêtre contextuelle ne signifie rien, mais elle apparaît à chaque fois que j’essaie d’interroger mon agent personnalisé @Forum_Research_Assis.

Je parviens à reproduire ce problème de manière constante, comme le montre la vidéo de reproduction :

Je pense que ce même commit manque de logique pour contourner le cas où l’utilisateur mentionne un agent IA.

Je suis prêt à lancer une autre demande de tirage (pull request) quand vous serez prêt, bien que j’en aie déjà une ouverte sur mon seul compte GitHub.

1 « J'aime »

Il semble que mon « correctif » ait révélé ce problème pour les agents IA :thinking:

3 « J'aime »