Não é possível usar o número da porta na URL para incorporar mídia em uma postagem

Para permitir que meus usuários hospedem vídeos, arquivos de áudio, etc. que eles incorporam em postagens do Discourse, configurei um servidor Apache rodando em paralelo ao Nginx que executa o Discourse. O servidor Apache roda na porta 8008 para http: e na porta 591 para https: (portas IANA reservadas para http-alt). Isso funciona bem e o conteúdo no servidor é acessível pelos navegadores especificando o número da porta na URL, por exemplo:

https://scanalyst.fourmilab.ch:591/video/f9_from_drone_ship_2022-10-12.mp4

Mas se você tentar incorporar essa URL em uma postagem do Discourse, ela falha com:

Desculpe, não foi possível gerar uma prévia desta página da web, pois o servidor ‘scanalyst.fourmilab.ch’ não pôde ser encontrado. Em vez de uma prévia, apenas um link aparecerá em sua postagem.

Se eu executar tcpdump e monitorar o tráfego DNS, não vejo nada sendo enviado quando ele rejeita essa URL. Ele a rejeita sem nunca fazer uma consulta DNS. Se eu alterar o número da porta na URL para 443, o padrão para https:, ele faz a consulta DNS normalmente, mas a incorporação falha, é claro, porque o servidor Apache não está escutando nessa porta e o servidor Discourse não sabe o que fazer com a URL. Não vi nada na documentação do Discourse que indique que URLs de incorporação não podem especificar um número de porta.

Analisando o código-fonte, encontrei um teste na função validate_uri_format na linha 362 de lib/final_destination.rb que diz:

    return false if @uri.scheme == 'https' && @uri.port != 443

que parece rejeitar uma URL https: que usa uma porta diferente de 443. Isso pareceu explicar o que eu estava vendo, então comentei essa linha, mas não fez diferença alguma, mesmo depois de reiniciar o Discourse. Quando a postagem aparece no site com a incorporação transformada em um link de texto, clicar no link de texto mostra o vídeo corretamente, então o único problema é falhar em reconhecê-lo como uma incorporação e envolver o player inline em torno dele.

Minhas perguntas são, neste ponto:

  • Números de porta não padrão têm permissão para funcionar em URLs para incorporações em postagens do Discourse?
  • Se sim, o que está causando a rejeição dessas URLs?
  • Existe alguma maneira de fazê-las funcionar?

Houve uma discussão aqui em março de 2017 sobre essa questão nestas duas postagens:

que implicavam que o problema havia sido corrigido, mas não funciona hoje na versão 2.9.0.beta10.

Obrigado por quaisquer insights e/ou assistência neste assunto.

1 curtida