Le lettere maiuscole nel nome utente interrompono il controllo dei menzioni raggiungibili nel compositore

Mentre investigavo su Private Topics Plugin - #109 by thoka, ho scoperto che un menzione a un utente in una categoria ristretta non viene segnalata quando il nome utente contiene lettere maiuscole.

Se menziono @SomeUser, l’editor richiede
/composer/mentions.json?names[]=SomeUser&topic_id=10728
nel risultato il nome utente viene restituito in minuscolo, senza che user_reasons sia impostato.

Una query per il nome utente in lettere minuscole restituisce "user_reasons": {"someuser":"category"}.

Se utilizzo lettere minuscole per i nomi utente nell’editor, vengono mostrati avvisi per gli utenti con privilegi insufficienti.

Se si utilizza il completamento automatico fornito dall’editor, i nomi utente digitati in minuscolo vengono sostituiti da nomi in maiuscolo e quindi non vengono segnalati.

3 Mi Piace

Ottima individuazione @thoka!

Il problema è qui

users restituisce {"username_lower" => oggetto User }

Tuttavia, se name non è convertito in minuscolo, users[name] non esiste.

Fix:

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

O ancora meglio: converti tutti i nomi in minuscolo all’inizio del metodo, dato che ci sono molti problemi lì dentro. groups gestisce correttamente .where("lower(name) IN (?)", @names.map(&:downcase)), ma funzioni come visible_group_ids_for_allowed_check, topic_allowed_group_ids, mentionable_group_ids e members_visible_group_ids eseguono tutte where(name: @names), il che introduce anch’esso problemi di sensibilità alle maiuscole/minuscole.

3 Mi Piace

La correzione corretta è

ma è un cambiamento troppo grande per essere accettato in questo momento :grimacing:

Invece, correggerò ogni “endpoint” uno alla volta per rendere la revisione più semplice e meno rischiosa.

Ecco il primo passo

1 Mi Piace