Letras maiúsculas no nome de usuário quebram a verificação de menção acessível no compositor

Ao investigar Private Topics Plugin - #109 by thoka, descobri que uma menção a um usuário em uma categoria restrita não é relatada quando o nome de usuário contém letras maiúsculas.

Se eu mencionar @SomeUser, o editor solicita
/composer/mentions.json?names[]=SomeUser&topic_id=10728
e, no resultado, o nome de usuário é retornado em minúsculas, sem user_reasons definido.

Uma consulta ao nome de usuário em letras minúsculas retorna "user_reasons": {"someuser":"category"}.

Se eu usar letras minúsculas para os nomes de usuário no compositor, avisos para usuários sem direitos suficientes serão exibidos.

Se alguém usar a autocompletar fornecida pelo editor, os nomes de usuário digitados em minúsculas serão substituídos por nomes em maiúsculas e, portanto, não serão relatados.

2 curtidas

Ótima descoberta, @thoka!

O problema está aqui

users retorna {"username_lower" => objeto User }

No entanto, se name não estiver em minúsculas, users[name] não existe.

Correção:

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

Ou melhor: converta todos os nomes para minúsculas no início do método, pois há muitos problemas ali. groups faz corretamente .where("lower(name) IN (?)", @names.map(&:downcase)), mas funções como visible_group_ids_for_allowed_check, topic_allowed_group_ids, mentionable_group_ids e members_visible_group_ids todas usam where(name: @names), o que também introduz problemas de sensibilidade a maiúsculas e minúsculas.