Embeds: bloccato nel caricamento o topic non creato e senza log, cosa fare!

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

  1. Ti ritrovi con un embed che dice “Caricamento discussione…”
  2. 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.

2 Mi Piace

Tornando al lavoro oggi, alcune cose mi hanno colpito nelle pagine di amministrazione. Ecco alcuni suggerimenti su cosa si potrebbe migliorare.

Impostazioni di Incorporamento — /admin/customize/embedding/settings

allowed_internal_hosts è un’impostazione cruciale affinché l’incorporamento funzioni in modo affidabile in ambienti non pubblici. Dovrebbe essere elencata esplicitamente come impostazione correlata in questa sezione — non c’è alcun dubbio sulla sua importanza.

Host di Incorporamento — /admin/customize/embedding

Lo snippet di configurazione fornito è più che utile poiché include molte informazioni utili. Penso che possiamo usarlo per fornire ulteriore guida.

Primo paragrafo

Attuale:

> Incolla il seguente codice HTML sul tuo sito per creare e incorporare argomenti di Discourse. Sostituisci **EMBED_URL** con l'URL canonico della pagina su cui lo stai incorporando.

Alternativa:

> **Incolla il seguente HTML dove vuoi che i commenti appaiano sulla tua pagina.**

Il discourseEmbedUrl è l’URL della tua pagina, quello che sarà collegato da Discourse. Quando la tua pagina viene caricata per la prima volta, Discourse tenterà di trovare o creare un argomento per quell’URL e collegarsi al tuo contenuto.

Secondo paragrafo

Attuale:

> Se vuoi personalizzare lo stile, decommenta e sostituisci **CLASS_NAME** con una classe CSS definita nell'*CSS Incorporato* del tuo tema.

Alternativa:

> **Usa la proprietà `className` per aggiungere classi personalizzate al tag `