Nel corso di alcuni giorni ho notato che molte persone hanno cercato e pubblicato soluzioni riguardanti gli embed dei commenti. Io sono una di quelle persone. Spero che questo post aiuti altri nella stessa situazione.
Sono nuovo a Discourse, quindi chiunque desideri integrare le informazioni che sto fornendo con competenze approfondite è libero di farlo.
Una cosa che posso dire dopo aver esaminato molti post sull’argomento è che la fonte dei problemi può essere molto varia. Per coloro che si trovano nella mia situazione, ecco una soluzione!
Problema
- Ti ritrovi con un embed che dice “Caricamento discussione…”
- Gli argomenti di Discourse non vengono creati automaticamente
Soluzione
Prova ad aggiungere il tuo dominio all’elenco degli host interni consentiti.
È un’impostazione del sito che si trova nell’area admin. Puoi trovarla in questo percorso del tuo sito Discourse:
/admin/site_settings/category/all_results
Un link diretto all’impostazione a cui mi riferisco sarebbe:
/admin/site_settings/category/all_results?filter=allowed_internal_hosts
Per coloro che guardano nella console Rails, cerca:
SiteSetting.allowed_internal_hosts
L’impostazione è un elenco di nomi di dominio separati da una barra verticale (|).
Contesto
La mia istanza Discourse è pubblica, ma il mio DNS interno risolve alcuni domini localmente. Ciò può accadere in configurazioni che utilizzano Docker, Kubernetes o qualsiasi ambiente con DNS interno.
Essendo nuovo a Discourse, devo dire che ciò che ora sembra ovvio, all’inizio non lo era affatto.
Coloro di noi che non hanno familiarità con gli interni di Discourse non sono consapevoli che nel 2017 è stata implementata la protezione SSRF o nemmeno i dettagli di tale protezione. Solo a posteriori quell’annuncio rende chiara la connessione.
È una funzionalità ben implementata, ma è stata una vera e propria tana del coniglio per un motivo molto semplice.
Cosa devi sapere
Discourse non creerà un argomento per il tuo embed se il dominio viene risolto in un IP locale.
Non urlare ancora, gente. Questa è una buona cosa. Puoi leggere sull’SSRF per scoprire perché e ringraziare anche gli sviluppatori di Discourse per averla presa sul serio.
Il problema è che Discourse non fornisce un feedback per farci sapere perché non sta creando gli argomenti e perché è bloccato su “caricamento discussione…”
Letture aggiuntive
Ma cos’è esattamente un IP locale? Per chiunque sia interessato, può trovare la risposta direttamente nel codice di Discourse, ecco un link diretto al file su GitHub.
Ad esempio, se la tua istanza Discourse su super-forum[dot]com si trova su una rete che ospita anche cool-blog[dot]net, il tuo DNS interno potrebbe risolvere cool-blog[dot]net come un IP locale, che Discourse rifiuterà a meno che non sia nell’elenco consentiti.
Spero che questo post risparmi a qualcun altro qualche ora di grattacapi e forse anche qualche capello.