diff --git a/internal/api/subscription.go b/internal/api/subscription.go index 63eeba73..9193f37b 100644 --- a/internal/api/subscription.go +++ b/internal/api/subscription.go @@ -30,9 +30,11 @@ func (h *handler) discoverSubscriptions(w http.ResponseWriter, r *http.Request) } var rssbridgeURL string + var rssbridgeToken string intg, err := h.store.Integration(request.UserID(r)) if err == nil && intg != nil && intg.RSSBridgeEnabled { rssbridgeURL = intg.RSSBridgeURL + rssbridgeToken = intg.RSSBridgeToken } requestBuilder := fetcher.NewRequestBuilder() @@ -50,6 +52,7 @@ func (h *handler) discoverSubscriptions(w http.ResponseWriter, r *http.Request) subscriptions, localizedError := subscription.NewSubscriptionFinder(requestBuilder).FindSubscriptions( subscriptionDiscoveryRequest.URL, rssbridgeURL, + rssbridgeToken, ) if localizedError != nil { diff --git a/internal/database/migrations.go b/internal/database/migrations.go index 4f553e9c..16930a47 100644 --- a/internal/database/migrations.go +++ b/internal/database/migrations.go @@ -1066,4 +1066,11 @@ var migrations = []func(tx *sql.Tx, driver string) error{ _, err = tx.Exec(`ALTER TABLE feeds ADD COLUMN proxy_url text default ''`) return err }, + func(tx *sql.Tx, _ string) (err error) { + sql := ` + ALTER TABLE integrations ADD COLUMN rssbridge_token text default ''; + ` + _, err = tx.Exec(sql) + return + }, } diff --git a/internal/googlereader/handler.go b/internal/googlereader/handler.go index 38279e2c..eabdc780 100644 --- a/internal/googlereader/handler.go +++ b/internal/googlereader/handler.go @@ -418,11 +418,13 @@ func (h *handler) quickAddHandler(w http.ResponseWriter, r *http.Request) { requestBuilder.WithProxyRotator(proxyrotator.ProxyRotatorInstance) var rssBridgeURL string + var rssBridgeToken string if intg, err := h.store.Integration(userID); err == nil && intg != nil && intg.RSSBridgeEnabled { rssBridgeURL = intg.RSSBridgeURL + rssBridgeToken = intg.RSSBridgeToken } - subscriptions, localizedError := mfs.NewSubscriptionFinder(requestBuilder).FindSubscriptions(feedURL, rssBridgeURL) + subscriptions, localizedError := mfs.NewSubscriptionFinder(requestBuilder).FindSubscriptions(feedURL, rssBridgeURL, rssBridgeToken) if localizedError != nil { json.ServerError(w, r, localizedError.Error()) return diff --git a/internal/integration/rssbridge/rssbridge.go b/internal/integration/rssbridge/rssbridge.go index aab4c210..713f05cf 100644 --- a/internal/integration/rssbridge/rssbridge.go +++ b/internal/integration/rssbridge/rssbridge.go @@ -24,13 +24,16 @@ type BridgeMeta struct { Name string `json:"name"` } -func DetectBridges(rssBridgeURL, websiteURL string) ([]*Bridge, error) { +func DetectBridges(rssBridgeURL, rssBridgeToken, websiteURL string) ([]*Bridge, error) { endpointURL, err := url.Parse(rssBridgeURL) if err != nil { return nil, fmt.Errorf("RSS-Bridge: unable to parse bridge URL: %w", err) } values := endpointURL.Query() + if rssBridgeToken != "" { + values.Add("token", rssBridgeToken) + } values.Add("action", "findfeed") values.Add("format", "atom") values.Add("url", websiteURL) @@ -78,6 +81,15 @@ func DetectBridges(rssBridgeURL, websiteURL string) ([]*Bridge, error) { slog.String("url", bridge.URL), ) } + + if rssBridgeToken != "" { + bridge.URL = bridge.URL + "&token=" + rssBridgeToken + + slog.Debug("Appended token to RSS bridge URL", + slog.String("name", bridge.BridgeMeta.Name), + slog.String("url", bridge.URL), + ) + } } return bridgeResponse, nil diff --git a/internal/locale/translations/de_DE.json b/internal/locale/translations/de_DE.json index 14325c50..81fcc5ad 100644 --- a/internal/locale/translations/de_DE.json +++ b/internal/locale/translations/de_DE.json @@ -295,6 +295,7 @@ "form.integration.readwise_api_key": "Readwise-Reader-Zugangstoken", "form.integration.readwise_api_key_link": "Erhalten Sie Ihren Readwise-Zugangstoken", "form.integration.rssbridge_activate": "Beim Hinzufügen von Abonnements RSS-Bridge prüfen.", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge-Server-URL", "form.integration.shaarli_activate": "Artikel in Shaarli speichern", "form.integration.shaarli_api_secret": "Shaarli-API-Geheimnis", @@ -608,4 +609,4 @@ "time_elapsed.yesterday": "gestern", "tooltip.keyboard_shortcuts": "Tastenkürzel: %s", "tooltip.logged_user": "Angemeldet als %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/el_EL.json b/internal/locale/translations/el_EL.json index 81a47176..30a81c17 100644 --- a/internal/locale/translations/el_EL.json +++ b/internal/locale/translations/el_EL.json @@ -295,6 +295,7 @@ "form.integration.readwise_api_key": "Readwise Reader Access Token", "form.integration.readwise_api_key_link": "Get your Readwise Access Token", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_api_secret": "Shaarli API Secret", @@ -608,4 +609,4 @@ "time_elapsed.yesterday": "χθες", "tooltip.keyboard_shortcuts": "Συντόμευση πληκτρολογίου: % s", "tooltip.logged_user": "Συνδεδεμένος/η ως %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/en_US.json b/internal/locale/translations/en_US.json index 245e2e8c..ee4e1847 100644 --- a/internal/locale/translations/en_US.json +++ b/internal/locale/translations/en_US.json @@ -295,6 +295,7 @@ "form.integration.readwise_api_key": "Readwise Reader Access Token", "form.integration.readwise_api_key_link": "Get your Readwise Access Token", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_api_secret": "Shaarli API Secret", @@ -608,4 +609,4 @@ "time_elapsed.yesterday": "yesterday", "tooltip.keyboard_shortcuts": "Keyboard Shortcut: %s", "tooltip.logged_user": "Logged in as %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/es_ES.json b/internal/locale/translations/es_ES.json index 68268707..2223f76b 100644 --- a/internal/locale/translations/es_ES.json +++ b/internal/locale/translations/es_ES.json @@ -295,6 +295,7 @@ "form.integration.readwise_api_key": "Token de acceso a Readwise Reader", "form.integration.readwise_api_key_link": "Obtener tu token de acceso a Readwise", "form.integration.rssbridge_activate": "Vericar RSS-Bridge al agregar suscripciones", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "URL del servidro RSS-Bridge", "form.integration.shaarli_activate": "Guardar artículos en Shaarli", "form.integration.shaarli_api_secret": "Secreto API de Shaarli", @@ -608,4 +609,4 @@ "time_elapsed.yesterday": "ayer", "tooltip.keyboard_shortcuts": "Atajo de teclado: %s", "tooltip.logged_user": "Registrado como %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/fi_FI.json b/internal/locale/translations/fi_FI.json index 2498fb61..f00be90e 100644 --- a/internal/locale/translations/fi_FI.json +++ b/internal/locale/translations/fi_FI.json @@ -295,6 +295,7 @@ "form.integration.readwise_api_key": "Readwise Reader Access Token", "form.integration.readwise_api_key_link": "Get your Readwise Access Token", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_api_secret": "Shaarli API Secret", @@ -608,4 +609,4 @@ "time_elapsed.yesterday": "eilen", "tooltip.keyboard_shortcuts": "Pikanäppäin: %s", "tooltip.logged_user": "Kirjautunut %s-käyttäjänä" -} \ No newline at end of file +} diff --git a/internal/locale/translations/fr_FR.json b/internal/locale/translations/fr_FR.json index 843817b8..8a484804 100644 --- a/internal/locale/translations/fr_FR.json +++ b/internal/locale/translations/fr_FR.json @@ -295,6 +295,7 @@ "form.integration.readwise_api_key": "Jeton d'accès au lecteur Readwise", "form.integration.readwise_api_key_link": "Obtenez votre jeton d'accès Readwise", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Sauvegarder les articles vers Shaarli", "form.integration.shaarli_api_secret": "Clé d'API de Shaarli API", @@ -608,4 +609,4 @@ "time_elapsed.yesterday": "hier", "tooltip.keyboard_shortcuts": "Raccourci clavier : %s", "tooltip.logged_user": "Connecté en tant que %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/hi_IN.json b/internal/locale/translations/hi_IN.json index 51b6dcb6..29e0b724 100644 --- a/internal/locale/translations/hi_IN.json +++ b/internal/locale/translations/hi_IN.json @@ -295,6 +295,7 @@ "form.integration.readwise_api_key": "Readwise Reader Access Token", "form.integration.readwise_api_key_link": "Get your Readwise Access Token", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_api_secret": "Shaarli API Secret", @@ -608,4 +609,4 @@ "time_elapsed.yesterday": "कल", "tooltip.keyboard_shortcuts": "कुंजीपटल संक्षिप्त रीति: %s", "tooltip.logged_user": "%s के रूप में लॉग इन किया" -} \ No newline at end of file +} diff --git a/internal/locale/translations/id_ID.json b/internal/locale/translations/id_ID.json index bceeff6f..131e37c3 100644 --- a/internal/locale/translations/id_ID.json +++ b/internal/locale/translations/id_ID.json @@ -293,6 +293,7 @@ "form.integration.readwise_api_key": "Readwise Reader Access Token", "form.integration.readwise_api_key_link": "Get your Readwise Access Token", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_api_secret": "Shaarli API Secret", @@ -591,4 +592,4 @@ "time_elapsed.yesterday": "kemarin", "tooltip.keyboard_shortcuts": "Pintasan Papan Tik: %s", "tooltip.logged_user": "Masuk sebagai %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/it_IT.json b/internal/locale/translations/it_IT.json index 503cdaad..ce790e4d 100644 --- a/internal/locale/translations/it_IT.json +++ b/internal/locale/translations/it_IT.json @@ -295,6 +295,7 @@ "form.integration.readwise_api_key": "Readwise Reader Access Token", "form.integration.readwise_api_key_link": "Get your Readwise Access Token", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_api_secret": "Shaarli API Secret", @@ -608,4 +609,4 @@ "time_elapsed.yesterday": "ieri", "tooltip.keyboard_shortcuts": "Scorciatoia da tastiera: %s", "tooltip.logged_user": "Autenticato come %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/ja_JP.json b/internal/locale/translations/ja_JP.json index 49200485..98bddf78 100644 --- a/internal/locale/translations/ja_JP.json +++ b/internal/locale/translations/ja_JP.json @@ -293,6 +293,7 @@ "form.integration.readwise_api_key": "Readwise Reader Access Token", "form.integration.readwise_api_key_link": "Get your Readwise Access Token", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_api_secret": "Shaarli API Secret", @@ -591,4 +592,4 @@ "time_elapsed.yesterday": "昨日", "tooltip.keyboard_shortcuts": "キーボードショートカット: %s", "tooltip.logged_user": "%s としてログイン中" -} \ No newline at end of file +} diff --git a/internal/locale/translations/nan_Latn_pehoeji.json b/internal/locale/translations/nan_Latn_pehoeji.json index 368b7659..d3810be0 100644 --- a/internal/locale/translations/nan_Latn_pehoeji.json +++ b/internal/locale/translations/nan_Latn_pehoeji.json @@ -293,6 +293,7 @@ "form.integration.readwise_api_key": "Readwise Reader Acess Token", "form.integration.readwise_api_key_link": "Chhú-tek lí ê Readwise Acess Token", "form.integration.rssbridge_activate": "Sin cheng-ka siau-sit lâi-goân ê sî tio̍h RSS-Bridge", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge su-hāu-khì的bāng-chí", "form.integration.shaarli_activate": "Pó-chûn siau-sit kàu Shaarli", "form.integration.shaarli_api_secret": "Shaarli API só-sî", @@ -591,4 +592,4 @@ "time_elapsed.yesterday": "cha-hng", "tooltip.keyboard_shortcuts": "Khoài-sok khí:%s", "tooltip.logged_user": "Chit-má teng-lo̍k--ê: %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/nl_NL.json b/internal/locale/translations/nl_NL.json index c5d3a864..81b196be 100644 --- a/internal/locale/translations/nl_NL.json +++ b/internal/locale/translations/nl_NL.json @@ -295,6 +295,7 @@ "form.integration.readwise_api_key": "Readwise Reader Access Token", "form.integration.readwise_api_key_link": "Readwise Access Token ophalen", "form.integration.rssbridge_activate": "Controleer RSS-Bridge bij het toevoegen van abonnementen", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Artikelen opslaan in Shaarli", "form.integration.shaarli_api_secret": "Shaarli API Secret", @@ -608,4 +609,4 @@ "time_elapsed.yesterday": "gisteren", "tooltip.keyboard_shortcuts": "Sneltoets: %s", "tooltip.logged_user": "Ingelogd als %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/pl_PL.json b/internal/locale/translations/pl_PL.json index a67e60c4..32ecbd0f 100644 --- a/internal/locale/translations/pl_PL.json +++ b/internal/locale/translations/pl_PL.json @@ -297,6 +297,7 @@ "form.integration.readwise_api_key": "Token dostępu do czytnika Readwise", "form.integration.readwise_api_key_link": "Zdobądź token dostępu Readwise", "form.integration.rssbridge_activate": "Sprawdź RSS-Bridge podczas dodawania subskrypcji", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "Adres URL serwera RSS-Bridge", "form.integration.shaarli_activate": "Zapisuj artykuły w Shaarli", "form.integration.shaarli_api_secret": "Tajny klucz API do Shaarli", @@ -625,4 +626,4 @@ "time_elapsed.yesterday": "wczoraj", "tooltip.keyboard_shortcuts": "Skróty klawiszowe: %s", "tooltip.logged_user": "Zalogowany jako %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/pt_BR.json b/internal/locale/translations/pt_BR.json index e5fedcaa..7a7dcd96 100644 --- a/internal/locale/translations/pt_BR.json +++ b/internal/locale/translations/pt_BR.json @@ -295,6 +295,7 @@ "form.integration.readwise_api_key": "Readwise Reader Access Token", "form.integration.readwise_api_key_link": "Get your Readwise Access Token", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_api_secret": "Shaarli API Secret", @@ -608,4 +609,4 @@ "time_elapsed.yesterday": "ontem", "tooltip.keyboard_shortcuts": "Atalho do teclado: %s", "tooltip.logged_user": "Autenticado como %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/ro_RO.json b/internal/locale/translations/ro_RO.json index 2907169c..f73e4edf 100644 --- a/internal/locale/translations/ro_RO.json +++ b/internal/locale/translations/ro_RO.json @@ -297,6 +297,7 @@ "form.integration.readwise_api_key": "Token Acces Readwise Reader", "form.integration.readwise_api_key_link": "Obțineți Token-ul de Acess pe Readwise", "form.integration.rssbridge_activate": "Verifică RSS-Bridge la adăugarea de abonamente", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "URL server RSS-Bridge", "form.integration.shaarli_activate": "Salvează articolele în Shaarli", "form.integration.shaarli_api_secret": "Secret API Shaarli", @@ -625,4 +626,4 @@ "time_elapsed.yesterday": "ieri", "tooltip.keyboard_shortcuts": "Scurtături Tastatură: %s", "tooltip.logged_user": "Atentificat ca %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/ru_RU.json b/internal/locale/translations/ru_RU.json index bab4a8de..9176f252 100644 --- a/internal/locale/translations/ru_RU.json +++ b/internal/locale/translations/ru_RU.json @@ -297,6 +297,7 @@ "form.integration.readwise_api_key": "Токен доступа в Readwise", "form.integration.readwise_api_key_link": "Получить токен доступа Readwise", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Сохранить статьи в Shaarli", "form.integration.shaarli_api_secret": "Секретный ключ Shaarli API", @@ -625,4 +626,4 @@ "time_elapsed.yesterday": "вчера", "tooltip.keyboard_shortcuts": "Сочетания клавиш: %s", "tooltip.logged_user": "Авторизован как %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/tr_TR.json b/internal/locale/translations/tr_TR.json index 9af3533a..9686955c 100644 --- a/internal/locale/translations/tr_TR.json +++ b/internal/locale/translations/tr_TR.json @@ -295,6 +295,7 @@ "form.integration.readwise_api_key": "Readwise Reader Access Token", "form.integration.readwise_api_key_link": "Readwise Access Token'ınızı alın", "form.integration.rssbridge_activate": "Abonelik eklerken RSS-Bridge'i kontrol edin", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Makaleleri Shaarli'ye kaydet", "form.integration.shaarli_api_secret": "Shaarli API Secret", @@ -608,4 +609,4 @@ "time_elapsed.yesterday": "dün", "tooltip.keyboard_shortcuts": "Klavye Kısayolu: %s", "tooltip.logged_user": "%s olarak giriş yapıldı" -} \ No newline at end of file +} diff --git a/internal/locale/translations/uk_UA.json b/internal/locale/translations/uk_UA.json index 60924e15..7c88be31 100644 --- a/internal/locale/translations/uk_UA.json +++ b/internal/locale/translations/uk_UA.json @@ -297,6 +297,7 @@ "form.integration.readwise_api_key": "Readwise Reader Access Token", "form.integration.readwise_api_key_link": "Get your Readwise Access Token", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_api_secret": "Shaarli API Secret", @@ -625,4 +626,4 @@ "time_elapsed.yesterday": "вчора", "tooltip.keyboard_shortcuts": "Комбінація клавіш: %s", "tooltip.logged_user": "Здійснено вхід як %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/zh_CN.json b/internal/locale/translations/zh_CN.json index 02c1ef60..e993f1c5 100644 --- a/internal/locale/translations/zh_CN.json +++ b/internal/locale/translations/zh_CN.json @@ -293,6 +293,7 @@ "form.integration.readwise_api_key": "Readwise Reader 访问令牌", "form.integration.readwise_api_key_link": "获取你的 Readwise 访问令牌", "form.integration.rssbridge_activate": "添加订阅时检查 RSS-Bridge", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge 服务器 URL", "form.integration.shaarli_activate": "保存文章到 Shaarli", "form.integration.shaarli_api_secret": "Shaarli API 密钥", @@ -591,4 +592,4 @@ "time_elapsed.yesterday": "昨天", "tooltip.keyboard_shortcuts": "快捷键: %s", "tooltip.logged_user": "当前登录 %s" -} \ No newline at end of file +} diff --git a/internal/locale/translations/zh_TW.json b/internal/locale/translations/zh_TW.json index 82b165d0..7287022c 100644 --- a/internal/locale/translations/zh_TW.json +++ b/internal/locale/translations/zh_TW.json @@ -293,6 +293,7 @@ "form.integration.readwise_api_key": "Readwise Reader 存取金鑰", "form.integration.readwise_api_key_link": "取得您的 Readwise 存取金鑰", "form.integration.rssbridge_activate": "新增訂閱時檢查 RSS-Bridge", + "form.integration.rssbridge_token": "RSS-Bridge authentication token", "form.integration.rssbridge_url": "RSS-Bridge 伺服器的網址", "form.integration.shaarli_activate": "儲存文章到 Shaarli", "form.integration.shaarli_api_secret": "Shaarli API 金鑰", @@ -591,4 +592,4 @@ "time_elapsed.yesterday": "昨天", "tooltip.keyboard_shortcuts": "快捷鍵:%s", "tooltip.logged_user": "目前登入 %s" -} \ No newline at end of file +} diff --git a/internal/model/integration.go b/internal/model/integration.go index 8f7a59e8..5311b04e 100644 --- a/internal/model/integration.go +++ b/internal/model/integration.go @@ -90,6 +90,7 @@ type Integration struct { WebhookSecret string RSSBridgeEnabled bool RSSBridgeURL string + RSSBridgeToken string OmnivoreEnabled bool OmnivoreAPIKey string OmnivoreURL string diff --git a/internal/reader/subscription/finder.go b/internal/reader/subscription/finder.go index 3e00170f..24973ea3 100644 --- a/internal/reader/subscription/finder.go +++ b/internal/reader/subscription/finder.go @@ -48,7 +48,7 @@ func (f *SubscriptionFinder) FeedResponseInfo() *model.FeedCreationRequestFromSu return f.feedResponseInfo } -func (f *SubscriptionFinder) FindSubscriptions(websiteURL, rssBridgeURL string) (Subscriptions, *locale.LocalizedErrorWrapper) { +func (f *SubscriptionFinder) FindSubscriptions(websiteURL, rssBridgeURL string, rssBridgeToken string) (Subscriptions, *locale.LocalizedErrorWrapper) { responseHandler := fetcher.NewResponseHandler(f.requestBuilder.ExecuteRequest(websiteURL)) defer responseHandler.Close() @@ -108,7 +108,7 @@ func (f *SubscriptionFinder) FindSubscriptions(websiteURL, rssBridgeURL string) // Step 5) Check if the website URL can use RSS-Bridge. if rssBridgeURL != "" { slog.Debug("Try to detect feeds with RSS-Bridge", slog.String("website_url", websiteURL)) - if subscriptions, localizedError := f.FindSubscriptionsFromRSSBridge(websiteURL, rssBridgeURL); localizedError != nil { + if subscriptions, localizedError := f.FindSubscriptionsFromRSSBridge(websiteURL, rssBridgeURL, rssBridgeToken); localizedError != nil { return nil, localizedError } else if len(subscriptions) > 0 { slog.Debug("Subscriptions found from RSS-Bridge", slog.String("website_url", websiteURL), slog.Any("subscriptions", subscriptions)) @@ -254,13 +254,14 @@ func (f *SubscriptionFinder) FindSubscriptionsFromWellKnownURLs(websiteURL strin return subscriptions, nil } -func (f *SubscriptionFinder) FindSubscriptionsFromRSSBridge(websiteURL, rssBridgeURL string) (Subscriptions, *locale.LocalizedErrorWrapper) { +func (f *SubscriptionFinder) FindSubscriptionsFromRSSBridge(websiteURL, rssBridgeURL string, rssBridgeToken string) (Subscriptions, *locale.LocalizedErrorWrapper) { slog.Debug("Trying to detect feeds using RSS-Bridge", slog.String("website_url", websiteURL), slog.String("rssbridge_url", rssBridgeURL), + slog.String("rssbridge_token", rssBridgeToken), ) - bridges, err := rssbridge.DetectBridges(rssBridgeURL, websiteURL) + bridges, err := rssbridge.DetectBridges(rssBridgeURL, rssBridgeToken, websiteURL) if err != nil { return nil, locale.NewLocalizedErrorWrapper(err, "error.unable_to_detect_rssbridge", err) } @@ -268,6 +269,7 @@ func (f *SubscriptionFinder) FindSubscriptionsFromRSSBridge(websiteURL, rssBridg slog.Debug("RSS-Bridge results", slog.String("website_url", websiteURL), slog.String("rssbridge_url", rssBridgeURL), + slog.String("rssbridge_token", rssBridgeToken), slog.Int("nb_bridges", len(bridges)), ) diff --git a/internal/storage/integration.go b/internal/storage/integration.go index 786a3c12..4ab85861 100644 --- a/internal/storage/integration.go +++ b/internal/storage/integration.go @@ -219,7 +219,8 @@ func (s *Storage) Integration(userID int64) (*model.Integration, error) { pushover_user, pushover_token, pushover_device, - pushover_prefix + pushover_prefix, + rssbridge_token FROM integrations WHERE @@ -338,6 +339,7 @@ func (s *Storage) Integration(userID int64) (*model.Integration, error) { &integration.PushoverToken, &integration.PushoverDevice, &integration.PushoverPrefix, + &integration.RSSBridgeToken, ) switch { case err == sql.ErrNoRows: @@ -464,9 +466,10 @@ func (s *Storage) UpdateIntegration(integration *model.Integration) error { pushover_user=$107, pushover_token=$108, pushover_device=$109, - pushover_prefix=$110 + pushover_prefix=$110, + rssbridge_token=$111 WHERE - user_id=$111 + user_id=$112 ` _, err := s.db.Exec( query, @@ -580,6 +583,7 @@ func (s *Storage) UpdateIntegration(integration *model.Integration) error { integration.PushoverToken, integration.PushoverDevice, integration.PushoverPrefix, + integration.RSSBridgeToken, integration.UserID, ) diff --git a/internal/template/templates/views/integrations.html b/internal/template/templates/views/integrations.html index 7eeb0a12..86948f06 100644 --- a/internal/template/templates/views/integrations.html +++ b/internal/template/templates/views/integrations.html @@ -513,6 +513,9 @@ + + +
diff --git a/internal/ui/form/integration.go b/internal/ui/form/integration.go index 5a8ef9f1..09c2a5f2 100644 --- a/internal/ui/form/integration.go +++ b/internal/ui/form/integration.go @@ -93,6 +93,7 @@ type IntegrationForm struct { WebhookSecret string RSSBridgeEnabled bool RSSBridgeURL string + RSSBridgeToken string OmnivoreEnabled bool OmnivoreAPIKey string OmnivoreURL string @@ -204,6 +205,7 @@ func (i IntegrationForm) Merge(integration *model.Integration) { integration.WebhookURL = i.WebhookURL integration.RSSBridgeEnabled = i.RSSBridgeEnabled integration.RSSBridgeURL = i.RSSBridgeURL + integration.RSSBridgeToken = i.RSSBridgeToken integration.OmnivoreEnabled = i.OmnivoreEnabled integration.OmnivoreAPIKey = i.OmnivoreAPIKey integration.OmnivoreURL = i.OmnivoreURL @@ -318,6 +320,7 @@ func NewIntegrationForm(r *http.Request) *IntegrationForm { WebhookURL: r.FormValue("webhook_url"), RSSBridgeEnabled: r.FormValue("rssbridge_enabled") == "1", RSSBridgeURL: r.FormValue("rssbridge_url"), + RSSBridgeToken: r.FormValue("rssbridge_token"), OmnivoreEnabled: r.FormValue("omnivore_enabled") == "1", OmnivoreAPIKey: r.FormValue("omnivore_api_key"), OmnivoreURL: r.FormValue("omnivore_url"), diff --git a/internal/ui/integration_show.go b/internal/ui/integration_show.go index 05fc7ca5..57ef3400 100644 --- a/internal/ui/integration_show.go +++ b/internal/ui/integration_show.go @@ -107,6 +107,7 @@ func (h *handler) showIntegrationPage(w http.ResponseWriter, r *http.Request) { WebhookSecret: integration.WebhookSecret, RSSBridgeEnabled: integration.RSSBridgeEnabled, RSSBridgeURL: integration.RSSBridgeURL, + RSSBridgeToken: integration.RSSBridgeToken, OmnivoreEnabled: integration.OmnivoreEnabled, OmnivoreAPIKey: integration.OmnivoreAPIKey, OmnivoreURL: integration.OmnivoreURL, diff --git a/internal/ui/subscription_submit.go b/internal/ui/subscription_submit.go index 16a9c3f0..93665cc5 100644 --- a/internal/ui/subscription_submit.go +++ b/internal/ui/subscription_submit.go @@ -53,8 +53,10 @@ func (h *handler) submitSubscription(w http.ResponseWriter, r *http.Request) { } var rssBridgeURL string + var rssBridgeToken string if intg, err := h.store.Integration(user.ID); err == nil && intg != nil && intg.RSSBridgeEnabled { rssBridgeURL = intg.RSSBridgeURL + rssBridgeToken = intg.RSSBridgeToken } requestBuilder := fetcher.NewRequestBuilder() @@ -73,6 +75,7 @@ func (h *handler) submitSubscription(w http.ResponseWriter, r *http.Request) { subscriptions, localizedError := subscriptionFinder.FindSubscriptions( subscriptionForm.URL, rssBridgeURL, + rssBridgeToken, ) if localizedError != nil { v.Set("form", subscriptionForm)