diff --git a/internal/database/migrations.go b/internal/database/migrations.go index 811ef4b8..fc2da261 100644 --- a/internal/database/migrations.go +++ b/internal/database/migrations.go @@ -990,4 +990,8 @@ var migrations = []func(tx *sql.Tx, driver string) error{ _, err = tx.Exec(sql) return err }, + func(tx *sql.Tx, _ string) (err error) { + _, err = tx.Exec(`ALTER TABLE feeds ADD COLUMN webhook_url text default '';`) + return err + }, } diff --git a/internal/integration/integration.go b/internal/integration/integration.go index 029efbbd..cd9320ef 100644 --- a/internal/integration/integration.go +++ b/internal/integration/integration.go @@ -474,20 +474,27 @@ func PushEntries(feed *model.Feed, entries model.Entries, userIntegrations *mode } if userIntegrations.WebhookEnabled { + var webhookURL string + if feed.WebhookURL != "" { + webhookURL = feed.WebhookURL + } else { + webhookURL = userIntegrations.WebhookURL + } + slog.Debug("Sending new entries to Webhook", slog.Int64("user_id", userIntegrations.UserID), slog.Int("nb_entries", len(entries)), slog.Int64("feed_id", feed.ID), - slog.String("webhook_url", userIntegrations.WebhookURL), + slog.String("webhook_url", webhookURL), ) - webhookClient := webhook.NewClient(userIntegrations.WebhookURL, userIntegrations.WebhookSecret) + webhookClient := webhook.NewClient(webhookURL, userIntegrations.WebhookSecret) if err := webhookClient.SendNewEntriesWebhookEvent(feed, entries); err != nil { slog.Debug("Unable to send new entries to Webhook", slog.Int64("user_id", userIntegrations.UserID), slog.Int("nb_entries", len(entries)), slog.Int64("feed_id", feed.ID), - slog.String("webhook_url", userIntegrations.WebhookURL), + slog.String("webhook_url", webhookURL), slog.Any("error", err), ) } diff --git a/internal/locale/translations/de_DE.json b/internal/locale/translations/de_DE.json index 34de24e8..2a003d48 100644 --- a/internal/locale/translations/de_DE.json +++ b/internal/locale/translations/de_DE.json @@ -339,6 +339,7 @@ "form.feed.label.scraper_rules": "Extraktionsregeln", "form.feed.label.rewrite_rules": "Umschreiberegeln", "form.feed.label.apprise_service_urls": "Kommaseparierte Liste der Apprise-Service-URLs", + "form.feed.label.webhook_url": "Webhook-URL überschreiben", "form.feed.label.blocklist_rules": "Blockierregeln", "form.feed.label.keeplist_rules": "Erlaubnisregeln", "form.feed.label.urlrewrite_rules": "Umschreibregeln für URL", @@ -501,8 +502,8 @@ "form.integration.shaarli_activate": "Artikel in Shaarli speichern", "form.integration.shaarli_endpoint": "Shaarli-URL", "form.integration.shaarli_api_secret": "Shaarli-API-Geheimnis", - "form.integration.webhook_activate": "Webhook aktivieren", - "form.integration.webhook_url": "Webhook-URL", + "form.integration.webhook_activate": "Webhooks aktivieren", + "form.integration.webhook_url": "Standard Webhook-URL", "form.integration.webhook_secret": "Webhook-Geheimnis", "form.integration.rssbridge_activate": "Beim Hinzufügen von Abonnements RSS-Bridge prüfen.", "form.integration.rssbridge_url": "RSS-Bridge-Server-URL", diff --git a/internal/locale/translations/el_EL.json b/internal/locale/translations/el_EL.json index 550711af..f1a096da 100644 --- a/internal/locale/translations/el_EL.json +++ b/internal/locale/translations/el_EL.json @@ -325,6 +325,7 @@ "error.feed_invalid_keeplist_rule": "Ο κανόνας keep list δεν είναι έγκυρος.", "form.feed.label.urlrewrite_rules": "επανεγγραφή κανόνων για τη διεύθυνση URL.", "form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs", + "form.feed.label.webhook_url": "Override webhook url", "error.user_mandatory_fields": "Το όνομα χρήστη είναι υποχρεωτικό.", "error.api_key_already_exists": "Αυτό το κλειδί API υπάρχει ήδη.", "error.unable_to_create_api_key": "Δεν είναι δυνατή η δημιουργία αυτού του κλειδιού API.", @@ -501,9 +502,9 @@ "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_endpoint": "Shaarli URL", "form.integration.shaarli_api_secret": "Shaarli API Secret", - "form.integration.webhook_activate": "Enable Webhook", - "form.integration.webhook_url": "Webhook URL", - "form.integration.webhook_secret": "Webhook Secret", + "form.integration.webhook_activate": "Enable Webhooks", + "form.integration.webhook_url": "Default Webhook URL", + "form.integration.webhook_secret": "Webhooks Secret", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.ntfy_activate": "Push entries to ntfy", diff --git a/internal/locale/translations/en_US.json b/internal/locale/translations/en_US.json index 287770a4..b97a95cf 100644 --- a/internal/locale/translations/en_US.json +++ b/internal/locale/translations/en_US.json @@ -339,6 +339,7 @@ "form.feed.label.scraper_rules": "Scraper Rules", "form.feed.label.rewrite_rules": "Rewrite Rules", "form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.blocklist_rules": "Block Rules", "form.feed.label.keeplist_rules": "Keep Rules", "form.feed.label.urlrewrite_rules": "URL Rewrite Rules", @@ -499,9 +500,9 @@ "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_endpoint": "Shaarli URL", "form.integration.shaarli_api_secret": "Shaarli API Secret", - "form.integration.webhook_activate": "Enable Webhook", - "form.integration.webhook_url": "Webhook URL", - "form.integration.webhook_secret": "Webhook Secret", + "form.integration.webhook_activate": "Enable Webhooks", + "form.integration.webhook_url": "Default Webhook URL", + "form.integration.webhook_secret": "Webhooks Secret", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.ntfy_activate": "Push entries to ntfy", diff --git a/internal/locale/translations/es_ES.json b/internal/locale/translations/es_ES.json index ac923c06..d2f45451 100644 --- a/internal/locale/translations/es_ES.json +++ b/internal/locale/translations/es_ES.json @@ -339,6 +339,7 @@ "form.feed.label.scraper_rules": "Reglas de extracción de información", "form.feed.label.rewrite_rules": "Reglas de reescribir", "form.feed.label.apprise_service_urls": "Lista separada por comas de las URL del servicio Apprise", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.blocklist_rules": "Reglas de Filtrado (Bloquear)", "form.feed.label.keeplist_rules": "Reglas de Filtrado (Permitir)", "form.feed.label.urlrewrite_rules": "Reglas de Filtrado (Reescritura)", @@ -501,9 +502,9 @@ "form.integration.shaarli_activate": "Guardar artículos en Shaarli", "form.integration.shaarli_endpoint": "URL de Shaarli", "form.integration.shaarli_api_secret": "Secreto API de Shaarli", - "form.integration.webhook_activate": "Habilitar Webhook", - "form.integration.webhook_url": "URL de Webhook", - "form.integration.webhook_secret": "Secreto de Webhook", + "form.integration.webhook_activate": "Habilitar Webhooks", + "form.integration.webhook_url": "Defecto URL de Webhook", + "form.integration.webhook_secret": "Secreto de Webhooks", "form.integration.rssbridge_activate": "Vericar RSS-Bridge al agregar suscripciones", "form.integration.rssbridge_url": "URL del servidro RSS-Bridge", "form.integration.ntfy_activate": "Enviar artículos a ntfy", diff --git a/internal/locale/translations/fi_FI.json b/internal/locale/translations/fi_FI.json index a4de3c8f..6ed596c4 100644 --- a/internal/locale/translations/fi_FI.json +++ b/internal/locale/translations/fi_FI.json @@ -325,6 +325,7 @@ "error.feed_invalid_keeplist_rule": "The keep list rule is invalid.", "form.feed.label.urlrewrite_rules": "URL-osoitteen uudelleenkirjoitussäännöt", "form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs", + "form.feed.label.webhook_url": "Override webhook url", "error.user_mandatory_fields": "Käyttäjätunnus on pakollinen.", "error.api_key_already_exists": "API-avain on jo olemassa.", "error.unable_to_create_api_key": "API-avainta ei voi luoda.", @@ -501,9 +502,9 @@ "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_endpoint": "Shaarli URL", "form.integration.shaarli_api_secret": "Shaarli API Secret", - "form.integration.webhook_activate": "Enable Webhook", - "form.integration.webhook_url": "Webhook URL", - "form.integration.webhook_secret": "Webhook Secret", + "form.integration.webhook_activate": "Enable Webhooks", + "form.integration.webhook_url": "Default Webhook URL", + "form.integration.webhook_secret": "Webhooks Secret", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.ntfy_activate": "Push entries to ntfy", diff --git a/internal/locale/translations/fr_FR.json b/internal/locale/translations/fr_FR.json index ce917d88..2383768d 100644 --- a/internal/locale/translations/fr_FR.json +++ b/internal/locale/translations/fr_FR.json @@ -339,6 +339,7 @@ "form.feed.label.scraper_rules": "Règles pour récupérer le contenu original", "form.feed.label.rewrite_rules": "Règles de réécriture", "form.feed.label.apprise_service_urls": "Liste séparée par des virgules des URL du service Apprise", + "form.feed.label.webhook_url": "Remplacer l'URL du webhook", "form.feed.label.blocklist_rules": "Règles de blocage", "form.feed.label.keeplist_rules": "Règles d'autorisation", "form.feed.label.urlrewrite_rules": "Règles de réécriture d'URL", diff --git a/internal/locale/translations/hi_IN.json b/internal/locale/translations/hi_IN.json index af404f67..1e4c2756 100644 --- a/internal/locale/translations/hi_IN.json +++ b/internal/locale/translations/hi_IN.json @@ -339,6 +339,7 @@ "form.feed.label.scraper_rules": "खुरचनी नियम", "form.feed.label.rewrite_rules": "नियम फिर से लिखें", "form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.blocklist_rules": "ब्लॉक नियम", "form.feed.label.keeplist_rules": "नियम बनाए रखें", "form.feed.label.urlrewrite_rules": " यूआरएल पुनर्लेखन नियम", @@ -501,9 +502,9 @@ "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_endpoint": "Shaarli URL", "form.integration.shaarli_api_secret": "Shaarli API Secret", - "form.integration.webhook_activate": "Enable Webhook", - "form.integration.webhook_url": "Webhook URL", - "form.integration.webhook_secret": "Webhook Secret", + "form.integration.webhook_activate": "Enable Webhooks", + "form.integration.webhook_url": "Default Webhook URL", + "form.integration.webhook_secret": "Webhooks Secret", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.ntfy_activate": "Push entries to ntfy", diff --git a/internal/locale/translations/id_ID.json b/internal/locale/translations/id_ID.json index 4cc1fb1a..5ace4a1a 100644 --- a/internal/locale/translations/id_ID.json +++ b/internal/locale/translations/id_ID.json @@ -329,6 +329,7 @@ "form.feed.label.scraper_rules": "Aturan Pengambil Data", "form.feed.label.rewrite_rules": "Aturan Tulis Ulang", "form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.blocklist_rules": "Aturan Blokir", "form.feed.label.keeplist_rules": "Aturan Simpan", "form.feed.label.urlrewrite_rules": "Aturan Tulis Ulang URL", @@ -491,9 +492,9 @@ "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_endpoint": "Shaarli URL", "form.integration.shaarli_api_secret": "Shaarli API Secret", - "form.integration.webhook_activate": "Enable Webhook", - "form.integration.webhook_url": "Webhook URL", - "form.integration.webhook_secret": "Webhook Secret", + "form.integration.webhook_activate": "Enable Webhooks", + "form.integration.webhook_url": "Default Webhook URL", + "form.integration.webhook_secret": "Webhooks Secret", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.ntfy_activate": "Push entries to ntfy", diff --git a/internal/locale/translations/it_IT.json b/internal/locale/translations/it_IT.json index d13ab673..d36c6b9a 100644 --- a/internal/locale/translations/it_IT.json +++ b/internal/locale/translations/it_IT.json @@ -339,6 +339,7 @@ "form.feed.label.scraper_rules": "Regole di estrazione del contenuto", "form.feed.label.rewrite_rules": "Regole di impaginazione del contenuto", "form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.blocklist_rules": "Regole di blocco", "form.feed.label.keeplist_rules": "Regole di autorizzazione", "form.feed.label.urlrewrite_rules": "Regole di riscrittura URL", @@ -501,9 +502,9 @@ "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_endpoint": "Shaarli URL", "form.integration.shaarli_api_secret": "Shaarli API Secret", - "form.integration.webhook_activate": "Enable Webhook", - "form.integration.webhook_url": "Webhook URL", - "form.integration.webhook_secret": "Webhook Secret", + "form.integration.webhook_activate": "Enable Webhooks", + "form.integration.webhook_url": "Default Webhook URL", + "form.integration.webhook_secret": "Webhooks Secret", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.api_key.label.description": "Etichetta chiave API", diff --git a/internal/locale/translations/ja_JP.json b/internal/locale/translations/ja_JP.json index 64a4d514..09768e50 100644 --- a/internal/locale/translations/ja_JP.json +++ b/internal/locale/translations/ja_JP.json @@ -332,6 +332,7 @@ "form.feed.label.keeplist_rules": "Keep ルール", "form.feed.label.urlrewrite_rules": "Rewrite URL ルール", "form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.ignore_http_cache": "HTTPキャッシュを無視", "form.feed.label.allow_self_signed_certificates": "自己署名証明書または無効な証明書を許可する", "form.feed.label.disable_http2": "Disable HTTP/2 to avoid fingerprinting", @@ -491,9 +492,9 @@ "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_endpoint": "Shaarli URL", "form.integration.shaarli_api_secret": "Shaarli API Secret", - "form.integration.webhook_activate": "Enable Webhook", - "form.integration.webhook_url": "Webhook URL", - "form.integration.webhook_secret": "Webhook Secret", + "form.integration.webhook_activate": "Enable Webhooks", + "form.integration.webhook_url": "Default Webhook URL", + "form.integration.webhook_secret": "Webhooks Secret", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.ntfy_activate": "Push entries to ntfy", diff --git a/internal/locale/translations/nl_NL.json b/internal/locale/translations/nl_NL.json index f7d9a066..3a4eab52 100644 --- a/internal/locale/translations/nl_NL.json +++ b/internal/locale/translations/nl_NL.json @@ -342,6 +342,7 @@ "form.feed.label.keeplist_rules": "Bewaarregels", "form.feed.label.urlrewrite_rules": "Herschrijfregels voor URL's", "form.feed.label.apprise_service_urls": "Door komma's gescheiden lijst van Apprise service URL's", + "form.feed.label.webhook_url": "Overschrijf webhook URL", "form.feed.label.ignore_http_cache": "Negeer HTTP-cache", "form.feed.label.allow_self_signed_certificates": "Zelfondertekende of ongeldige certificaten toestaan", "form.feed.label.disable_http2": "HTTP/2 uitschakelen om fingerprinting te voorkomen", @@ -501,9 +502,9 @@ "form.integration.shaarli_activate": "Artikelen opslaan in Shaarli", "form.integration.shaarli_endpoint": "Shaarli URL", "form.integration.shaarli_api_secret": "Shaarli API Secret", - "form.integration.webhook_activate": "Webhook activeren", - "form.integration.webhook_url": "Webhook URL", - "form.integration.webhook_secret": "Webhook Secret", + "form.integration.webhook_activate": "Webhooks activeren", + "form.integration.webhook_url": "Standard Webhook URL", + "form.integration.webhook_secret": "Webhooks Secret", "form.integration.rssbridge_activate": "Controleer RSS-Bridge bij het toevoegen van abonnementen", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.ntfy_activate": "Stuur artikelen naar ntfy", diff --git a/internal/locale/translations/pl_PL.json b/internal/locale/translations/pl_PL.json index d95912d4..8a88c04d 100644 --- a/internal/locale/translations/pl_PL.json +++ b/internal/locale/translations/pl_PL.json @@ -352,6 +352,7 @@ "form.feed.label.keeplist_rules": "Reguły utrzymywania", "form.feed.label.urlrewrite_rules": "Reguły przepisywania adresów URL", "form.feed.label.apprise_service_urls": "Rozdzielana przecinkami lista adresów URL usług Appprise", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.ignore_http_cache": "Zignoruj pamięć podręczną HTTP", "form.feed.label.allow_self_signed_certificates": "Zezwalaj na samopodpisane lub nieprawidłowe certyfikaty", "form.feed.label.disable_http2": "Wyłącz protokół HTTP/2, aby uniknąć identyfikowania", @@ -511,9 +512,9 @@ "form.integration.shaarli_activate": "Zapisuj artykuły w Shaarli", "form.integration.shaarli_endpoint": "Adres URL Shaarli", "form.integration.shaarli_api_secret": "Tajny klucz API do Shaarli", - "form.integration.webhook_activate": "Włącz Webhook", - "form.integration.webhook_url": "Adres URL Webhook", - "form.integration.webhook_secret": "Tajny klucz do Webhook", + "form.integration.webhook_activate": "Włącz Webhooks", + "form.integration.webhook_url": "Default Adres URL Webhook", + "form.integration.webhook_secret": "Tajny klucz do Webhooks", "form.integration.rssbridge_activate": "Sprawdź RSS-Bridge podczas dodawania subskrypcji", "form.integration.rssbridge_url": "Adres URL serwera RSS-Bridge", "form.integration.ntfy_activate": "Przesyłaj wpisy do ntfy", diff --git a/internal/locale/translations/pt_BR.json b/internal/locale/translations/pt_BR.json index 3e024f12..5a45b04a 100644 --- a/internal/locale/translations/pt_BR.json +++ b/internal/locale/translations/pt_BR.json @@ -342,6 +342,7 @@ "form.feed.label.keeplist_rules": "Regras de permissão", "form.feed.label.urlrewrite_rules": "Regras de reescrita de URL", "form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.ignore_http_cache": "Ignorar cache HTTP", "form.feed.label.allow_self_signed_certificates": "Permitir certificados autoassinados ou inválidos", "form.feed.label.disable_http2": "Disable HTTP/2 to avoid fingerprinting", @@ -501,9 +502,9 @@ "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_endpoint": "Shaarli URL", "form.integration.shaarli_api_secret": "Shaarli API Secret", - "form.integration.webhook_activate": "Enable Webhook", - "form.integration.webhook_url": "Webhook URL", - "form.integration.webhook_secret": "Webhook Secret", + "form.integration.webhook_activate": "Enable Webhooks", + "form.integration.webhook_url": "Default Webhook URL", + "form.integration.webhook_secret": "Webhooks Secret", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.ntfy_activate": "Push entries to ntfy", diff --git a/internal/locale/translations/ru_RU.json b/internal/locale/translations/ru_RU.json index bd1c09c9..a911de4e 100644 --- a/internal/locale/translations/ru_RU.json +++ b/internal/locale/translations/ru_RU.json @@ -352,6 +352,7 @@ "form.feed.label.keeplist_rules": "Правила белого списка", "form.feed.label.urlrewrite_rules": "Правила перезаписи URL", "form.feed.label.apprise_service_urls": "Список ссылок сервисов Apprise, разделенный запятой", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.ignore_http_cache": "Игнорировать HTTP кеш", "form.feed.label.allow_self_signed_certificates": "Разрешить самоподписанные или недействительные сертификаты", "form.feed.label.disable_http2": "Disable HTTP/2 to avoid fingerprinting", diff --git a/internal/locale/translations/tr_TR.json b/internal/locale/translations/tr_TR.json index 8f5f2860..77ac41a6 100644 --- a/internal/locale/translations/tr_TR.json +++ b/internal/locale/translations/tr_TR.json @@ -154,6 +154,7 @@ "form.feed.fieldset.rules": "Kurallar", "form.feed.label.allow_self_signed_certificates": "Kendinden imzalı veya geçersiz sertifikalara izin ver", "form.feed.label.apprise_service_urls": "Apprise hizmet URL'lerinin virgülle ayrılmış listesi", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.blocklist_rules": "Engelleme Kuralları", "form.feed.label.category": "Kategori", "form.feed.label.cookie": "Çerezleri Ayarla", @@ -270,8 +271,8 @@ "form.integration.wallabag_password": "Wallabag Parolası", "form.integration.wallabag_username": "Wallabag Kullanıcı Adı", "form.integration.webhook_activate": "Webhook'u etkinleştir", - "form.integration.webhook_secret": "Webhook Secret", - "form.integration.webhook_url": "Webhook URL", + "form.integration.webhook_secret": "Webhooks Secret", + "form.integration.webhook_url": "Default Webhook URL", "form.integration.ntfy_activate": "Push entries to ntfy", "form.integration.ntfy_topic": "Ntfy topic", "form.integration.ntfy_url": "Ntfy URL (optional, default is ntfy.sh)", diff --git a/internal/locale/translations/uk_UA.json b/internal/locale/translations/uk_UA.json index 6008666b..ceda3ecd 100644 --- a/internal/locale/translations/uk_UA.json +++ b/internal/locale/translations/uk_UA.json @@ -352,6 +352,7 @@ "form.feed.label.keeplist_rules": "Правила дозволення", "form.feed.label.urlrewrite_rules": "Правила перезапису URL-адрес", "form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.ignore_http_cache": "Ігнорувати кеш HTTP", "form.feed.label.allow_self_signed_certificates": "Дозволити сертифікати з власним підписом або недійсні", "form.feed.label.disable_http2": "Disable HTTP/2 to avoid fingerprinting", @@ -511,9 +512,9 @@ "form.integration.shaarli_activate": "Save articles to Shaarli", "form.integration.shaarli_endpoint": "Shaarli URL", "form.integration.shaarli_api_secret": "Shaarli API Secret", - "form.integration.webhook_activate": "Enable Webhook", - "form.integration.webhook_url": "Webhook URL", - "form.integration.webhook_secret": "Webhook Secret", + "form.integration.webhook_activate": "Enable Webhooks", + "form.integration.webhook_url": "Default Webhook URL", + "form.integration.webhook_secret": "Webhooks Secret", "form.integration.rssbridge_activate": "Check RSS-Bridge when adding subscriptions", "form.integration.rssbridge_url": "RSS-Bridge server URL", "form.integration.ntfy_activate": "Push entries to ntfy", diff --git a/internal/locale/translations/zh_CN.json b/internal/locale/translations/zh_CN.json index a9216919..cf66df9c 100644 --- a/internal/locale/translations/zh_CN.json +++ b/internal/locale/translations/zh_CN.json @@ -332,6 +332,7 @@ "form.feed.label.keeplist_rules": "保留规则", "form.feed.label.urlrewrite_rules": "URL 重写规则", "form.feed.label.apprise_service_urls": "使用逗号分隔的 Apprise 服务 URL 列表", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.ignore_http_cache": "忽略 HTTP 缓存", "form.feed.label.allow_self_signed_certificates": "允许自签名证书或无效证书", "form.feed.label.disable_http2": "关闭 HTTP/2 避免记录指纹", @@ -491,9 +492,9 @@ "form.integration.shaarli_activate": "保存文章到 Shaarli", "form.integration.shaarli_endpoint": "Shaarli URL", "form.integration.shaarli_api_secret": "Shaarli API 密钥", - "form.integration.webhook_activate": "启用 Webhook", - "form.integration.webhook_url": "Webhook URL", - "form.integration.webhook_secret": "Webhook 密钥", + "form.integration.webhook_activate": "启用 Webhooks", + "form.integration.webhook_url": "Default Webhook URL", + "form.integration.webhook_secret": "Webhooks 密钥", "form.integration.rssbridge_activate": "添加订阅时检查 RSS-Bridge", "form.integration.rssbridge_url": "RSS-Bridge 服务器 URL", "form.integration.ntfy_activate": "推送条目到ntfy", diff --git a/internal/locale/translations/zh_TW.json b/internal/locale/translations/zh_TW.json index cb13525e..562b906f 100644 --- a/internal/locale/translations/zh_TW.json +++ b/internal/locale/translations/zh_TW.json @@ -332,6 +332,7 @@ "form.feed.label.keeplist_rules": "保留規則", "form.feed.label.urlrewrite_rules": "網址重寫規則", "form.feed.label.apprise_service_urls": "使用逗號分隔的 Apprise 服務網址列表", + "form.feed.label.webhook_url": "Override webhook url", "form.feed.label.ignore_http_cache": "忽略 HTTP 快取", "form.feed.label.allow_self_signed_certificates": "允許自簽或無效的憑證", "form.feed.label.disable_http2": "停用 HTTP/2 以避免指紋追蹤", @@ -491,9 +492,9 @@ "form.integration.shaarli_activate": "儲存文章到 Shaarli", "form.integration.shaarli_endpoint": "Shaarli 網址", "form.integration.shaarli_api_secret": "Shaarli API 金鑰", - "form.integration.webhook_activate": "啟用 Webhook", - "form.integration.webhook_url": "Webhook 網址", - "form.integration.webhook_secret": "Webhook Secret", + "form.integration.webhook_activate": "啟用 Webhooks", + "form.integration.webhook_url": "Default Webhook 網址", + "form.integration.webhook_secret": "Webhooks Secret", "form.integration.rssbridge_activate": "新增訂閱時檢查 RSS-Bridge", "form.integration.rssbridge_url": "RSS-Bridge 伺服器的網址", "form.integration.ntfy_activate": "推送文章到 Ntfy", diff --git a/internal/model/feed.go b/internal/model/feed.go index 1682b111..3f55e464 100644 --- a/internal/model/feed.go +++ b/internal/model/feed.go @@ -53,6 +53,7 @@ type Feed struct { HideGlobally bool `json:"hide_globally"` DisableHTTP2 bool `json:"disable_http2"` AppriseServiceURLs string `json:"apprise_service_urls"` + WebhookURL string `json:"webhook_url"` NtfyEnabled bool `json:"ntfy_enabled"` NtfyPriority int `json:"ntfy_priority"` diff --git a/internal/storage/feed.go b/internal/storage/feed.go index 464a0342..4131e7c5 100644 --- a/internal/storage/feed.go +++ b/internal/storage/feed.go @@ -246,11 +246,12 @@ func (s *Storage) CreateFeed(feed *model.Feed) error { url_rewrite_rules, no_media_player, apprise_service_urls, + webhook_url, disable_http2, description ) VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26) + ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27) RETURNING id ` @@ -280,6 +281,7 @@ func (s *Storage) CreateFeed(feed *model.Feed) error { feed.UrlRewriteRules, feed.NoMediaPlayer, feed.AppriseServiceURLs, + feed.WebhookURL, feed.DisableHTTP2, feed.Description, ).Scan(&feed.ID) @@ -354,12 +356,13 @@ func (s *Storage) UpdateFeed(feed *model.Feed) (err error) { url_rewrite_rules=$25, no_media_player=$26, apprise_service_urls=$27, - disable_http2=$28, - description=$29, - ntfy_enabled=$30, - ntfy_priority=$31 + webhook_url=$28, + disable_http2=$29, + description=$30, + ntfy_enabled=$31, + ntfy_priority=$32 WHERE - id=$32 AND user_id=$33 + id=$33 AND user_id=$34 ` _, err = s.db.Exec(query, feed.FeedURL, @@ -389,6 +392,7 @@ func (s *Storage) UpdateFeed(feed *model.Feed) (err error) { feed.UrlRewriteRules, feed.NoMediaPlayer, feed.AppriseServiceURLs, + feed.WebhookURL, feed.DisableHTTP2, feed.Description, feed.NtfyEnabled, diff --git a/internal/storage/feed_query_builder.go b/internal/storage/feed_query_builder.go index 271c011a..436920e5 100644 --- a/internal/storage/feed_query_builder.go +++ b/internal/storage/feed_query_builder.go @@ -165,6 +165,7 @@ func (f *FeedQueryBuilder) GetFeeds() (model.Feeds, error) { fi.icon_id, u.timezone, f.apprise_service_urls, + f.webhook_url, f.disable_http2, f.ntfy_enabled, f.ntfy_priority @@ -235,6 +236,7 @@ func (f *FeedQueryBuilder) GetFeeds() (model.Feeds, error) { &iconID, &tz, &feed.AppriseServiceURLs, + &feed.WebhookURL, &feed.DisableHTTP2, &feed.NtfyEnabled, &feed.NtfyPriority, diff --git a/internal/template/templates/views/edit_feed.html b/internal/template/templates/views/edit_feed.html index 3c302b8d..7ab1541c 100644 --- a/internal/template/templates/views/edit_feed.html +++ b/internal/template/templates/views/edit_feed.html @@ -209,6 +209,16 @@ +
+ Webhook +
+ +
+ +
+
diff --git a/internal/ui/feed_edit.go b/internal/ui/feed_edit.go index 21cf5dc2..a6962600 100644 --- a/internal/ui/feed_edit.go +++ b/internal/ui/feed_edit.go @@ -63,6 +63,7 @@ func (h *handler) showEditFeedPage(w http.ResponseWriter, r *http.Request) { HideGlobally: feed.HideGlobally, CategoryHidden: feed.Category.HideGlobally, AppriseServiceURLs: feed.AppriseServiceURLs, + WebhookURL: feed.WebhookURL, DisableHTTP2: feed.DisableHTTP2, NtfyEnabled: feed.NtfyEnabled, NtfyPriority: feed.NtfyPriority, diff --git a/internal/ui/form/feed.go b/internal/ui/form/feed.go index b9b05bc4..8212e910 100644 --- a/internal/ui/form/feed.go +++ b/internal/ui/form/feed.go @@ -35,6 +35,7 @@ type FeedForm struct { HideGlobally bool CategoryHidden bool // Category has "hide_globally" AppriseServiceURLs string + WebhookURL string DisableHTTP2 bool NtfyEnabled bool NtfyPriority int @@ -66,6 +67,7 @@ func (f FeedForm) Merge(feed *model.Feed) *model.Feed { feed.NoMediaPlayer = f.NoMediaPlayer feed.HideGlobally = f.HideGlobally feed.AppriseServiceURLs = f.AppriseServiceURLs + feed.WebhookURL = f.WebhookURL feed.DisableHTTP2 = f.DisableHTTP2 feed.NtfyEnabled = f.NtfyEnabled feed.NtfyPriority = f.NtfyPriority @@ -105,6 +107,7 @@ func NewFeedForm(r *http.Request) *FeedForm { NoMediaPlayer: r.FormValue("no_media_player") == "1", HideGlobally: r.FormValue("hide_globally") == "1", AppriseServiceURLs: r.FormValue("apprise_service_urls"), + WebhookURL: r.FormValue("webhook_url"), DisableHTTP2: r.FormValue("disable_http2") == "1", NtfyEnabled: r.FormValue("ntfy_enabled") == "1", NtfyPriority: ntfyPriority,