1
0
Fork 0
mirror of https://github.com/miniflux/v2.git synced 2025-06-27 16:36:00 +00:00
miniflux-v2/internal/ui/form/integration.go

363 lines
18 KiB
Go
Raw Normal View History

// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
2017-12-02 19:32:14 -08:00
package form // import "miniflux.app/v2/internal/ui/form"
2017-12-02 19:32:14 -08:00
import (
"net/http"
"strconv"
2017-12-02 19:32:14 -08:00
"miniflux.app/v2/internal/model"
2017-12-02 19:32:14 -08:00
)
// IntegrationForm represents user integration settings form.
type IntegrationForm struct {
PinboardEnabled bool
PinboardToken string
PinboardTags string
PinboardMarkAsUnread bool
InstapaperEnabled bool
InstapaperUsername string
InstapaperPassword string
FeverEnabled bool
FeverUsername string
FeverPassword string
GoogleReaderEnabled bool
GoogleReaderUsername string
GoogleReaderPassword string
WallabagEnabled bool
WallabagOnlyURL bool
WallabagURL string
WallabagClientID string
WallabagClientSecret string
WallabagUsername string
WallabagPassword string
NotionEnabled bool
NotionPageID string
NotionToken string
NunuxKeeperEnabled bool
NunuxKeeperURL string
NunuxKeeperAPIKey string
EspialEnabled bool
EspialURL string
EspialAPIKey string
EspialTags string
ReadwiseEnabled bool
ReadwiseAPIKey string
TelegramBotEnabled bool
TelegramBotToken string
TelegramBotChatID string
TelegramBotTopicID *int64
TelegramBotDisableWebPagePreview bool
TelegramBotDisableNotification bool
TelegramBotDisableButtons bool
2024-01-23 18:12:31 +01:00
LinkAceEnabled bool
LinkAceURL string
LinkAceAPIKey string
LinkAceTags string
LinkAcePrivate bool
LinkAceCheckDisabled bool
LinkdingEnabled bool
LinkdingURL string
LinkdingAPIKey string
LinkdingTags string
LinkdingMarkAsUnread bool
2024-02-12 02:12:37 +01:00
LinkwardenEnabled bool
LinkwardenURL string
LinkwardenAPIKey string
MatrixBotEnabled bool
MatrixBotUser string
MatrixBotPassword string
MatrixBotURL string
MatrixBotChatID string
AppriseEnabled bool
AppriseURL string
AppriseServicesURL string
2024-02-22 03:57:34 +00:00
ReadeckEnabled bool
ReadeckURL string
ReadeckAPIKey string
ReadeckLabels string
ReadeckOnlyURL bool
ShioriEnabled bool
ShioriURL string
ShioriUsername string
ShioriPassword string
ShaarliEnabled bool
ShaarliURL string
ShaarliAPISecret string
WebhookEnabled bool
WebhookURL string
WebhookSecret string
2023-10-22 14:10:56 -04:00
RSSBridgeEnabled bool
RSSBridgeURL string
RSSBridgeToken string
2023-12-04 23:05:04 -05:00
OmnivoreEnabled bool
OmnivoreAPIKey string
OmnivoreURL string
KarakeepEnabled bool
KarakeepAPIKey string
KarakeepURL string
RaindropEnabled bool
RaindropToken string
RaindropCollectionID string
RaindropTags string
2024-07-04 22:59:47 +03:00
BetulaEnabled bool
BetulaURL string
BetulaToken string
NtfyEnabled bool
NtfyTopic string
NtfyURL string
NtfyAPIToken string
NtfyUsername string
NtfyPassword string
NtfyIconURL string
NtfyInternalLinks bool
CuboxEnabled bool
CuboxAPILink string
DiscordEnabled bool
DiscordWebhookLink string
SlackEnabled bool
SlackWebhookLink string
PushoverEnabled bool
PushoverUser string
PushoverToken string
PushoverDevice string
PushoverPrefix string
2017-12-02 19:32:14 -08:00
}
// Merge copy form values to the model.
func (i IntegrationForm) Merge(integration *model.Integration) {
integration.PinboardEnabled = i.PinboardEnabled
integration.PinboardToken = i.PinboardToken
integration.PinboardTags = i.PinboardTags
integration.PinboardMarkAsUnread = i.PinboardMarkAsUnread
2017-12-02 21:12:03 -08:00
integration.InstapaperEnabled = i.InstapaperEnabled
integration.InstapaperUsername = i.InstapaperUsername
integration.InstapaperPassword = i.InstapaperPassword
2017-12-03 17:44:27 -08:00
integration.FeverEnabled = i.FeverEnabled
integration.FeverUsername = i.FeverUsername
integration.GoogleReaderEnabled = i.GoogleReaderEnabled
integration.GoogleReaderUsername = i.GoogleReaderUsername
2017-12-18 20:52:46 -08:00
integration.WallabagEnabled = i.WallabagEnabled
integration.WallabagOnlyURL = i.WallabagOnlyURL
2017-12-18 20:52:46 -08:00
integration.WallabagURL = i.WallabagURL
integration.WallabagClientID = i.WallabagClientID
integration.WallabagClientSecret = i.WallabagClientSecret
integration.WallabagUsername = i.WallabagUsername
integration.WallabagPassword = i.WallabagPassword
2023-07-08 00:20:14 +02:00
integration.NotionEnabled = i.NotionEnabled
integration.NotionPageID = i.NotionPageID
integration.NotionToken = i.NotionToken
2018-02-25 19:49:08 +00:00
integration.NunuxKeeperEnabled = i.NunuxKeeperEnabled
integration.NunuxKeeperURL = i.NunuxKeeperURL
integration.NunuxKeeperAPIKey = i.NunuxKeeperAPIKey
2022-04-21 05:44:47 +03:00
integration.EspialEnabled = i.EspialEnabled
integration.EspialURL = i.EspialURL
integration.EspialAPIKey = i.EspialAPIKey
integration.EspialTags = i.EspialTags
2023-07-27 23:51:44 -04:00
integration.ReadwiseEnabled = i.ReadwiseEnabled
integration.ReadwiseAPIKey = i.ReadwiseAPIKey
2021-09-08 11:04:22 +08:00
integration.TelegramBotEnabled = i.TelegramBotEnabled
integration.TelegramBotToken = i.TelegramBotToken
integration.TelegramBotChatID = i.TelegramBotChatID
integration.TelegramBotTopicID = i.TelegramBotTopicID
integration.TelegramBotDisableWebPagePreview = i.TelegramBotDisableWebPagePreview
integration.TelegramBotDisableNotification = i.TelegramBotDisableNotification
integration.TelegramBotDisableButtons = i.TelegramBotDisableButtons
2024-01-23 18:12:31 +01:00
integration.LinkAceEnabled = i.LinkAceEnabled
integration.LinkAceURL = i.LinkAceURL
integration.LinkAceAPIKey = i.LinkAceAPIKey
integration.LinkAceTags = i.LinkAceTags
integration.LinkAcePrivate = i.LinkAcePrivate
integration.LinkAceCheckDisabled = i.LinkAceCheckDisabled
2022-05-23 23:53:06 +08:00
integration.LinkdingEnabled = i.LinkdingEnabled
integration.LinkdingURL = i.LinkdingURL
integration.LinkdingAPIKey = i.LinkdingAPIKey
integration.LinkdingTags = i.LinkdingTags
integration.LinkdingMarkAsUnread = i.LinkdingMarkAsUnread
2024-02-12 02:12:37 +01:00
integration.LinkwardenEnabled = i.LinkwardenEnabled
integration.LinkwardenURL = i.LinkwardenURL
integration.LinkwardenAPIKey = i.LinkwardenAPIKey
2022-10-14 17:18:44 +02:00
integration.MatrixBotEnabled = i.MatrixBotEnabled
integration.MatrixBotUser = i.MatrixBotUser
integration.MatrixBotPassword = i.MatrixBotPassword
integration.MatrixBotURL = i.MatrixBotURL
integration.MatrixBotChatID = i.MatrixBotChatID
2023-08-01 05:55:17 +02:00
integration.AppriseEnabled = i.AppriseEnabled
integration.AppriseServicesURL = i.AppriseServicesURL
integration.AppriseURL = i.AppriseURL
2024-02-22 03:57:34 +00:00
integration.ReadeckEnabled = i.ReadeckEnabled
integration.ReadeckURL = i.ReadeckURL
integration.ReadeckAPIKey = i.ReadeckAPIKey
integration.ReadeckLabels = i.ReadeckLabels
integration.ReadeckOnlyURL = i.ReadeckOnlyURL
2023-08-13 12:48:29 -07:00
integration.ShioriEnabled = i.ShioriEnabled
integration.ShioriURL = i.ShioriURL
integration.ShioriUsername = i.ShioriUsername
integration.ShioriPassword = i.ShioriPassword
2023-08-13 14:30:57 -07:00
integration.ShaarliEnabled = i.ShaarliEnabled
integration.ShaarliURL = i.ShaarliURL
integration.ShaarliAPISecret = i.ShaarliAPISecret
2023-09-08 22:45:17 -07:00
integration.WebhookEnabled = i.WebhookEnabled
integration.WebhookURL = i.WebhookURL
2023-10-22 14:10:56 -04:00
integration.RSSBridgeEnabled = i.RSSBridgeEnabled
integration.RSSBridgeURL = i.RSSBridgeURL
integration.RSSBridgeToken = i.RSSBridgeToken
2023-12-04 23:05:04 -05:00
integration.OmnivoreEnabled = i.OmnivoreEnabled
integration.OmnivoreAPIKey = i.OmnivoreAPIKey
integration.OmnivoreURL = i.OmnivoreURL
integration.KarakeepEnabled = i.KarakeepEnabled
integration.KarakeepAPIKey = i.KarakeepAPIKey
integration.KarakeepURL = i.KarakeepURL
integration.RaindropEnabled = i.RaindropEnabled
integration.RaindropToken = i.RaindropToken
integration.RaindropCollectionID = i.RaindropCollectionID
integration.RaindropTags = i.RaindropTags
2024-07-04 22:59:47 +03:00
integration.BetulaEnabled = i.BetulaEnabled
integration.BetulaURL = i.BetulaURL
integration.BetulaToken = i.BetulaToken
integration.NtfyEnabled = i.NtfyEnabled
integration.NtfyTopic = i.NtfyTopic
integration.NtfyURL = i.NtfyURL
integration.NtfyAPIToken = i.NtfyAPIToken
integration.NtfyUsername = i.NtfyUsername
integration.NtfyPassword = i.NtfyPassword
integration.NtfyIconURL = i.NtfyIconURL
integration.NtfyInternalLinks = i.NtfyInternalLinks
integration.CuboxEnabled = i.CuboxEnabled
integration.CuboxAPILink = i.CuboxAPILink
integration.DiscordEnabled = i.DiscordEnabled
integration.DiscordWebhookLink = i.DiscordWebhookLink
integration.SlackEnabled = i.SlackEnabled
integration.SlackWebhookLink = i.SlackWebhookLink
integration.PushoverEnabled = i.PushoverEnabled
integration.PushoverUser = i.PushoverUser
integration.PushoverToken = i.PushoverToken
integration.PushoverDevice = i.PushoverDevice
integration.PushoverPrefix = i.PushoverPrefix
2017-12-02 19:32:14 -08:00
}
// NewIntegrationForm returns a new IntegrationForm.
2017-12-02 19:32:14 -08:00
func NewIntegrationForm(r *http.Request) *IntegrationForm {
return &IntegrationForm{
PinboardEnabled: r.FormValue("pinboard_enabled") == "1",
PinboardToken: r.FormValue("pinboard_token"),
PinboardTags: r.FormValue("pinboard_tags"),
PinboardMarkAsUnread: r.FormValue("pinboard_mark_as_unread") == "1",
InstapaperEnabled: r.FormValue("instapaper_enabled") == "1",
InstapaperUsername: r.FormValue("instapaper_username"),
InstapaperPassword: r.FormValue("instapaper_password"),
FeverEnabled: r.FormValue("fever_enabled") == "1",
FeverUsername: r.FormValue("fever_username"),
FeverPassword: r.FormValue("fever_password"),
GoogleReaderEnabled: r.FormValue("googlereader_enabled") == "1",
GoogleReaderUsername: r.FormValue("googlereader_username"),
GoogleReaderPassword: r.FormValue("googlereader_password"),
WallabagEnabled: r.FormValue("wallabag_enabled") == "1",
WallabagOnlyURL: r.FormValue("wallabag_only_url") == "1",
WallabagURL: r.FormValue("wallabag_url"),
WallabagClientID: r.FormValue("wallabag_client_id"),
WallabagClientSecret: r.FormValue("wallabag_client_secret"),
WallabagUsername: r.FormValue("wallabag_username"),
WallabagPassword: r.FormValue("wallabag_password"),
NotionEnabled: r.FormValue("notion_enabled") == "1",
NotionPageID: r.FormValue("notion_page_id"),
NotionToken: r.FormValue("notion_token"),
NunuxKeeperEnabled: r.FormValue("nunux_keeper_enabled") == "1",
NunuxKeeperURL: r.FormValue("nunux_keeper_url"),
NunuxKeeperAPIKey: r.FormValue("nunux_keeper_api_key"),
EspialEnabled: r.FormValue("espial_enabled") == "1",
EspialURL: r.FormValue("espial_url"),
EspialAPIKey: r.FormValue("espial_api_key"),
EspialTags: r.FormValue("espial_tags"),
ReadwiseEnabled: r.FormValue("readwise_enabled") == "1",
ReadwiseAPIKey: r.FormValue("readwise_api_key"),
TelegramBotEnabled: r.FormValue("telegram_bot_enabled") == "1",
TelegramBotToken: r.FormValue("telegram_bot_token"),
TelegramBotChatID: r.FormValue("telegram_bot_chat_id"),
TelegramBotTopicID: optionalInt64Field(r.FormValue("telegram_bot_topic_id")),
TelegramBotDisableWebPagePreview: r.FormValue("telegram_bot_disable_web_page_preview") == "1",
TelegramBotDisableNotification: r.FormValue("telegram_bot_disable_notification") == "1",
TelegramBotDisableButtons: r.FormValue("telegram_bot_disable_buttons") == "1",
2024-01-23 18:12:31 +01:00
LinkAceEnabled: r.FormValue("linkace_enabled") == "1",
LinkAceURL: r.FormValue("linkace_url"),
LinkAceAPIKey: r.FormValue("linkace_api_key"),
LinkAceTags: r.FormValue("linkace_tags"),
LinkAcePrivate: r.FormValue("linkace_is_private") == "1",
LinkAceCheckDisabled: r.FormValue("linkace_check_disabled") == "1",
LinkdingEnabled: r.FormValue("linkding_enabled") == "1",
LinkdingURL: r.FormValue("linkding_url"),
LinkdingAPIKey: r.FormValue("linkding_api_key"),
LinkdingTags: r.FormValue("linkding_tags"),
LinkdingMarkAsUnread: r.FormValue("linkding_mark_as_unread") == "1",
2024-02-12 02:12:37 +01:00
LinkwardenEnabled: r.FormValue("linkwarden_enabled") == "1",
LinkwardenURL: r.FormValue("linkwarden_url"),
LinkwardenAPIKey: r.FormValue("linkwarden_api_key"),
MatrixBotEnabled: r.FormValue("matrix_bot_enabled") == "1",
MatrixBotUser: r.FormValue("matrix_bot_user"),
MatrixBotPassword: r.FormValue("matrix_bot_password"),
MatrixBotURL: r.FormValue("matrix_bot_url"),
MatrixBotChatID: r.FormValue("matrix_bot_chat_id"),
AppriseEnabled: r.FormValue("apprise_enabled") == "1",
AppriseURL: r.FormValue("apprise_url"),
AppriseServicesURL: r.FormValue("apprise_services_url"),
2024-02-22 03:57:34 +00:00
ReadeckEnabled: r.FormValue("readeck_enabled") == "1",
ReadeckURL: r.FormValue("readeck_url"),
ReadeckAPIKey: r.FormValue("readeck_api_key"),
ReadeckLabels: r.FormValue("readeck_labels"),
ReadeckOnlyURL: r.FormValue("readeck_only_url") == "1",
ShioriEnabled: r.FormValue("shiori_enabled") == "1",
ShioriURL: r.FormValue("shiori_url"),
ShioriUsername: r.FormValue("shiori_username"),
ShioriPassword: r.FormValue("shiori_password"),
ShaarliEnabled: r.FormValue("shaarli_enabled") == "1",
ShaarliURL: r.FormValue("shaarli_url"),
ShaarliAPISecret: r.FormValue("shaarli_api_secret"),
WebhookEnabled: r.FormValue("webhook_enabled") == "1",
WebhookURL: r.FormValue("webhook_url"),
2023-10-22 14:10:56 -04:00
RSSBridgeEnabled: r.FormValue("rssbridge_enabled") == "1",
RSSBridgeURL: r.FormValue("rssbridge_url"),
RSSBridgeToken: r.FormValue("rssbridge_token"),
2023-12-04 23:05:04 -05:00
OmnivoreEnabled: r.FormValue("omnivore_enabled") == "1",
OmnivoreAPIKey: r.FormValue("omnivore_api_key"),
OmnivoreURL: r.FormValue("omnivore_url"),
KarakeepEnabled: r.FormValue("karakeep_enabled") == "1",
KarakeepAPIKey: r.FormValue("karakeep_api_key"),
KarakeepURL: r.FormValue("karakeep_url"),
RaindropEnabled: r.FormValue("raindrop_enabled") == "1",
RaindropToken: r.FormValue("raindrop_token"),
RaindropCollectionID: r.FormValue("raindrop_collection_id"),
RaindropTags: r.FormValue("raindrop_tags"),
2024-07-04 22:59:47 +03:00
BetulaEnabled: r.FormValue("betula_enabled") == "1",
BetulaURL: r.FormValue("betula_url"),
BetulaToken: r.FormValue("betula_token"),
NtfyEnabled: r.FormValue("ntfy_enabled") == "1",
NtfyTopic: r.FormValue("ntfy_topic"),
NtfyURL: r.FormValue("ntfy_url"),
NtfyAPIToken: r.FormValue("ntfy_api_token"),
NtfyUsername: r.FormValue("ntfy_username"),
NtfyPassword: r.FormValue("ntfy_password"),
NtfyIconURL: r.FormValue("ntfy_icon_url"),
NtfyInternalLinks: r.FormValue("ntfy_internal_links") == "1",
CuboxEnabled: r.FormValue("cubox_enabled") == "1",
CuboxAPILink: r.FormValue("cubox_api_link"),
DiscordEnabled: r.FormValue("discord_enabled") == "1",
DiscordWebhookLink: r.FormValue("discord_webhook_link"),
SlackEnabled: r.FormValue("slack_enabled") == "1",
SlackWebhookLink: r.FormValue("slack_webhook_link"),
PushoverEnabled: r.FormValue("pushover_enabled") == "1",
PushoverUser: r.FormValue("pushover_user"),
PushoverToken: r.FormValue("pushover_token"),
PushoverDevice: r.FormValue("pushover_device"),
PushoverPrefix: r.FormValue("pushover_prefix"),
2017-12-02 19:32:14 -08:00
}
}
func optionalInt64Field(formValue string) *int64 {
if formValue == "" {
return nil
}
value, _ := strconv.ParseInt(formValue, 10, 64)
return &value
}