Erro de capitalização de rota em private_messages_group

Não estou muito familiarizado com caixas de entrada de grupos privados e não tenho certeza de como reproduzir isso, mas o seguinte está acontecendo:

  • Uma caixa de entrada de mensagens privadas foi configurada para um grupo, vamos chamá-lo de ExampleGroup.
  • Um membro desse grupo recebe uma notificação ‘há 6 mensagens na sua caixa de entrada do examplegroup’
  • Clicar nessa notificação tenta carregar /topics/private-messages-group/username/examplegroup.json
  • Isso gera um erro

Acho que isso está acontecendo porque não há um grupo chamado examplegroup. O grupo se chama ExampleGroup.

ListController::generate_message_route faz o seguinte:

group = Group.find_by(name: params[:group_name])

Alterar isso para:

group = Group.find_by(name: params[:group_name])
group = Group.where('lower(name) = ?', params[:group_name].downcase).first unless group

parece resolver o problema. Mas tenho certeza de que esse não é o problema real. Em algum lugar o parâmetro está sendo convertido para minúsculas onde não deveria (acho que…).

Alguém tem alguma sugestão de onde procurar?

3 curtidas

Se você criar notificações diretamente no console, o link respeita a capitalização (isso funciona mesmo se os dados forem falsos)

Notification.create!(
  user_id: 1,
  notification_type: Notification.types[:group_message_summary],
  data: { inbox_count: 5, group_name: "MyGroup", group_id: 41, username: 'angus' }.to_json
)

O problema pode estar no lado da criação, ou seja, no post_alerter: discourse/app/services/post_alerter.rb at main · discourse/discourse · GitHub

No entanto, não consegui reproduzir esse caso.

1 curtida

Obrigado pela sua ajuda! Mas esse não é o link correto.

Não é /u/username/messages/group/groupname,
mas sim /topics/private-messages-group/username/groupname.

Não consigo encontrar de onde vem o último nem como gerá-lo.

2 curtidas

Acredito que a correção adequada aqui é não exigir o nome do grupo com inicial maiúscula nos parâmetros da URL. Isso foi feito via:

Note que navegar para /u/username/messages/group/groupname dispara uma requisição AJAX para /topics/private-messages-group/username/groupname, então o que @angus fez acima para depurar esse problema parece correto.

Obrigado por relatar esse problema, @RGJ :+1:

5 curtidas