mirror of
https://github.com/miniflux/v2.git
synced 2025-06-27 16:36:00 +00:00
feat(rssbridge): support auth token for RSS-Bridge
This commit is contained in:
parent
81ec32a8b6
commit
553c578f2e
31 changed files with 90 additions and 29 deletions
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
},
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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ä"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 के रूप में लॉग इन किया"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 としてログイン中"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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ı"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,6 +90,7 @@ type Integration struct {
|
|||
WebhookSecret string
|
||||
RSSBridgeEnabled bool
|
||||
RSSBridgeURL string
|
||||
RSSBridgeToken string
|
||||
OmnivoreEnabled bool
|
||||
OmnivoreAPIKey string
|
||||
OmnivoreURL string
|
||||
|
|
|
@ -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)),
|
||||
)
|
||||
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
|
||||
|
|
|
@ -513,6 +513,9 @@
|
|||
<label for="form-rssbridge-url">{{ t "form.integration.rssbridge_url" }}</label>
|
||||
<input type="url" name="rssbridge_url" id="form-rssbridge-url" value="{{ .form.RSSBridgeURL }}" spellcheck="false">
|
||||
|
||||
<label for="form-rssbridge-token">{{ t "form.integration.rssbridge_token" }}</label>
|
||||
<input type="password" name="rssbridge_token" id="form-rssbridge-token" value="{{ .form.RSSBridgeToken }}" spellcheck="false">
|
||||
|
||||
<div class="buttons">
|
||||
<button type="submit" class="button button-primary" data-label-loading="{{ t "form.submit.saving" }}">{{ t "action.update" }}</button>
|
||||
</div>
|
||||
|
|
|
@ -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"),
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue