Quick Messages Plugin

Tente reproduzir o problema usando a versão móvel do Google Chrome ou a versão móvel do Firefox (ou qualquer outro navegador móvel).

2 curtidas

Limpar o cache resolveu! Obrigado! EDIT: Ou não. :frowning:

1 curtida

Desculpe pela negligência aqui, tenho estado ocupado com outros trabalhos. Vou dar uma olhada neste plugin novamente em breve.

@DaleKramer @Hifihedgehog Se tiverem um problema urgente, me avisem e eu darei uma olhada nesta semana.

4 curtidas

Na verdade, após atualizar o servidor, o problema voltou. Ele também ocorre em todos os meus navegadores móveis:

Eu readicionei as mensagens rápidas ao thepavilion.io. Você consegue reproduzir o problema lá?

1 curtida

Talvez você possa investigar esse problema que eu tive e que parecia apontar para este plugin como o culpado

Na versão mais recente, as mensagens rápidas estão com defeito. Em cada mensagem, recebo esta mensagem:

Desculpe, você não pode criar uma MP em um tópico existente.

Verdade, estou recebendo o mesmo erro: Desculpe, você não pode criar uma MP em um tópico existente.

1 curtida

Estou recebendo o mesmo erro “não é possível criar MP”. Será que é por causa deste commit?

https://review.discourse.org/t/fix-ensures-we-dont-attempt-to-create-a-new-pm-on-an-existing-topic-9029/9319

Obrigado pelos relatórios. Vou dar uma olhada nisso o mais rápido possível.

1 curtida

Esse foi o problema. A correção é sobrescrever a função valid? sem as alterações deste commit.
Então, em plugin.rb ou algo assim, faça:
require_dependency ‘post_creator’

class ::PostCreator

def valid?

reescreva aqui, menos 4 linhas

Se ninguém mais fizer amanhã, talvez eu crie um PR para isso, já que estive analisando o assunto a manhã toda.

4 curtidas

Isso seria muito apreciado. As coisas estão bastante agitadas no momento :grimacing:. Obrigado!

1 curtida
1 curtida

Embora eu adoraria ter uma correção o mais rápido possível, também estou preocupado com a usabilidade a longo prazo dessa solução. E se a lógica dentro dessa implementação central da função mudar?

1 curtida

Sim, concordo, não é assim que se faz… especialmente com um método valid?, isso é só esperar por uma vulnerabilidade de segurança acontecer… e não queremos que o Discourse seja o próximo WordPress nesse aspecto… mas qual seria uma boa alternativa?

Tenho lutado com esse tipo de coisa também ultimamente, onde há um método longo cheio de verificações e eu quero contornar uma única verificação, bem no meio do método.

Não dá para apenas verificar se :create_pm_on_existing_topic foi o único erro, porque o código retorna imediatamente quando é definido, e pode ter falhado em outra verificação depois disso também.

Eu pelo menos prependia esse módulo e, então, verificava se era um cenário de mensagem rápida no novo método valid?. Se fosse, executava o código de validação modificado, mas se não fosse sobre uma mensagem rápida, apenas return super, chamando o código principal. Quando a função principal mudar, você quebrará apenas a funcionalidade do plugin e não o restante do software do fórum.

Tive que comparar as duas funções linha por linha para descobrir que a verificação removida era:

if new_topic?
  ... 
else
  if @topic.present? && @opts[:archetype] == Archetype.private_message
    errors.add(:base, I18n.t(:create_pm_on_existing_topic))
    return false
  end
...

um comentário não teria feito mal :wink:

Alguém conhece uma maneira melhor de garantir que esse tipo de monkey patch permaneça mantível?

(Eu realmente usei “monkey patch” e “mantível” na mesma frase? :thinking:)

Na verdade, ainda não tenho certeza do motivo pelo qual as mensagens rápidas estão quebradas pela [FIX: garante que não tentamos criar uma nova MP em um tópico existente #9029]. A correção 9029 funciona para MPs e tópicos — então por que as mensagens rápidas estão quebradas? Isso se deve a alguma maneira específica de as mensagens rápidas postarem uma nova MP que conflita com a 9029?

Sim, acho que é isso. E o #9029 adicionou essa verificação específica.

Acabei de enviar uma correção para este plugin. Me avise como fica.

@Oliver_Walker, obrigado pelo PR. Como os outros mencionaram, o ideal é não sobrescrever métodos grandes, mas obrigado por tentar :+1:

Correndo o risco de soar como um biscoito da sorte velho, em 95% dos casos em que você está considerando sobrescrever parte de um método grande do lado do servidor, você está lutando contra a lógica do framework (existem talvez algumas exceções a isso).

Neste caso, a primeira coisa a perguntar é: como mensagens privadas (PMs) normais são adicionadas a tópicos de PMs normais existentes? Acontece que o problema é que o plugin estava tentando atribuir o arquétipo private_message a cada postagem, em vez de apenas à primeira postagem que cria o tópico.

5 curtidas

Obrigado, @angus. Estou assumindo que você conseguiu testar isso? Além disso - devo apenas pedir ao nosso parceiro de hospedagem (Communiteq (anteriormente DiscourseHosting)) para recarregar o plugin para nós?