integration.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package form // import "miniflux.app/v2/internal/ui/form"
  4. import (
  5. "net/http"
  6. "strconv"
  7. "miniflux.app/v2/internal/model"
  8. )
  9. // IntegrationForm represents user integration settings form.
  10. type IntegrationForm struct {
  11. PinboardEnabled bool
  12. PinboardToken string
  13. PinboardTags string
  14. PinboardMarkAsUnread bool
  15. InstapaperEnabled bool
  16. InstapaperUsername string
  17. InstapaperPassword string
  18. FeverEnabled bool
  19. FeverUsername string
  20. FeverPassword string
  21. GoogleReaderEnabled bool
  22. GoogleReaderUsername string
  23. GoogleReaderPassword string
  24. WallabagEnabled bool
  25. WallabagOnlyURL bool
  26. WallabagURL string
  27. WallabagClientID string
  28. WallabagClientSecret string
  29. WallabagUsername string
  30. WallabagPassword string
  31. NotionEnabled bool
  32. NotionPageID string
  33. NotionToken string
  34. NunuxKeeperEnabled bool
  35. NunuxKeeperURL string
  36. NunuxKeeperAPIKey string
  37. EspialEnabled bool
  38. EspialURL string
  39. EspialAPIKey string
  40. EspialTags string
  41. ReadwiseEnabled bool
  42. ReadwiseAPIKey string
  43. PocketEnabled bool
  44. PocketAccessToken string
  45. PocketConsumerKey string
  46. TelegramBotEnabled bool
  47. TelegramBotToken string
  48. TelegramBotChatID string
  49. TelegramBotTopicID *int64
  50. TelegramBotDisableWebPagePreview bool
  51. TelegramBotDisableNotification bool
  52. TelegramBotDisableButtons bool
  53. LinkAceEnabled bool
  54. LinkAceURL string
  55. LinkAceAPIKey string
  56. LinkAceTags string
  57. LinkAcePrivate bool
  58. LinkAceCheckDisabled bool
  59. LinkdingEnabled bool
  60. LinkdingURL string
  61. LinkdingAPIKey string
  62. LinkdingTags string
  63. LinkdingMarkAsUnread bool
  64. LinkwardenEnabled bool
  65. LinkwardenURL string
  66. LinkwardenAPIKey string
  67. MatrixBotEnabled bool
  68. MatrixBotUser string
  69. MatrixBotPassword string
  70. MatrixBotURL string
  71. MatrixBotChatID string
  72. AppriseEnabled bool
  73. AppriseURL string
  74. AppriseServicesURL string
  75. ReadeckEnabled bool
  76. ReadeckURL string
  77. ReadeckAPIKey string
  78. ReadeckLabels string
  79. ReadeckOnlyURL bool
  80. ShioriEnabled bool
  81. ShioriURL string
  82. ShioriUsername string
  83. ShioriPassword string
  84. ShaarliEnabled bool
  85. ShaarliURL string
  86. ShaarliAPISecret string
  87. WebhookEnabled bool
  88. WebhookURL string
  89. WebhookSecret string
  90. RSSBridgeEnabled bool
  91. RSSBridgeURL string
  92. OmnivoreEnabled bool
  93. OmnivoreAPIKey string
  94. OmnivoreURL string
  95. RaindropEnabled bool
  96. RaindropToken string
  97. RaindropCollectionID string
  98. RaindropTags string
  99. }
  100. // Merge copy form values to the model.
  101. func (i IntegrationForm) Merge(integration *model.Integration) {
  102. integration.PinboardEnabled = i.PinboardEnabled
  103. integration.PinboardToken = i.PinboardToken
  104. integration.PinboardTags = i.PinboardTags
  105. integration.PinboardMarkAsUnread = i.PinboardMarkAsUnread
  106. integration.InstapaperEnabled = i.InstapaperEnabled
  107. integration.InstapaperUsername = i.InstapaperUsername
  108. integration.InstapaperPassword = i.InstapaperPassword
  109. integration.FeverEnabled = i.FeverEnabled
  110. integration.FeverUsername = i.FeverUsername
  111. integration.GoogleReaderEnabled = i.GoogleReaderEnabled
  112. integration.GoogleReaderUsername = i.GoogleReaderUsername
  113. integration.WallabagEnabled = i.WallabagEnabled
  114. integration.WallabagOnlyURL = i.WallabagOnlyURL
  115. integration.WallabagURL = i.WallabagURL
  116. integration.WallabagClientID = i.WallabagClientID
  117. integration.WallabagClientSecret = i.WallabagClientSecret
  118. integration.WallabagUsername = i.WallabagUsername
  119. integration.WallabagPassword = i.WallabagPassword
  120. integration.NotionEnabled = i.NotionEnabled
  121. integration.NotionPageID = i.NotionPageID
  122. integration.NotionToken = i.NotionToken
  123. integration.NunuxKeeperEnabled = i.NunuxKeeperEnabled
  124. integration.NunuxKeeperURL = i.NunuxKeeperURL
  125. integration.NunuxKeeperAPIKey = i.NunuxKeeperAPIKey
  126. integration.EspialEnabled = i.EspialEnabled
  127. integration.EspialURL = i.EspialURL
  128. integration.EspialAPIKey = i.EspialAPIKey
  129. integration.EspialTags = i.EspialTags
  130. integration.ReadwiseEnabled = i.ReadwiseEnabled
  131. integration.ReadwiseAPIKey = i.ReadwiseAPIKey
  132. integration.PocketEnabled = i.PocketEnabled
  133. integration.PocketAccessToken = i.PocketAccessToken
  134. integration.PocketConsumerKey = i.PocketConsumerKey
  135. integration.TelegramBotEnabled = i.TelegramBotEnabled
  136. integration.TelegramBotToken = i.TelegramBotToken
  137. integration.TelegramBotChatID = i.TelegramBotChatID
  138. integration.TelegramBotTopicID = i.TelegramBotTopicID
  139. integration.TelegramBotDisableWebPagePreview = i.TelegramBotDisableWebPagePreview
  140. integration.TelegramBotDisableNotification = i.TelegramBotDisableNotification
  141. integration.TelegramBotDisableButtons = i.TelegramBotDisableButtons
  142. integration.LinkAceEnabled = i.LinkAceEnabled
  143. integration.LinkAceURL = i.LinkAceURL
  144. integration.LinkAceAPIKey = i.LinkAceAPIKey
  145. integration.LinkAceTags = i.LinkAceTags
  146. integration.LinkAcePrivate = i.LinkAcePrivate
  147. integration.LinkAceCheckDisabled = i.LinkAceCheckDisabled
  148. integration.LinkdingEnabled = i.LinkdingEnabled
  149. integration.LinkdingURL = i.LinkdingURL
  150. integration.LinkdingAPIKey = i.LinkdingAPIKey
  151. integration.LinkdingTags = i.LinkdingTags
  152. integration.LinkdingMarkAsUnread = i.LinkdingMarkAsUnread
  153. integration.LinkwardenEnabled = i.LinkwardenEnabled
  154. integration.LinkwardenURL = i.LinkwardenURL
  155. integration.LinkwardenAPIKey = i.LinkwardenAPIKey
  156. integration.MatrixBotEnabled = i.MatrixBotEnabled
  157. integration.MatrixBotUser = i.MatrixBotUser
  158. integration.MatrixBotPassword = i.MatrixBotPassword
  159. integration.MatrixBotURL = i.MatrixBotURL
  160. integration.MatrixBotChatID = i.MatrixBotChatID
  161. integration.AppriseEnabled = i.AppriseEnabled
  162. integration.AppriseServicesURL = i.AppriseServicesURL
  163. integration.AppriseURL = i.AppriseURL
  164. integration.ReadeckEnabled = i.ReadeckEnabled
  165. integration.ReadeckURL = i.ReadeckURL
  166. integration.ReadeckAPIKey = i.ReadeckAPIKey
  167. integration.ReadeckLabels = i.ReadeckLabels
  168. integration.ReadeckOnlyURL = i.ReadeckOnlyURL
  169. integration.ShioriEnabled = i.ShioriEnabled
  170. integration.ShioriURL = i.ShioriURL
  171. integration.ShioriUsername = i.ShioriUsername
  172. integration.ShioriPassword = i.ShioriPassword
  173. integration.ShaarliEnabled = i.ShaarliEnabled
  174. integration.ShaarliURL = i.ShaarliURL
  175. integration.ShaarliAPISecret = i.ShaarliAPISecret
  176. integration.WebhookEnabled = i.WebhookEnabled
  177. integration.WebhookURL = i.WebhookURL
  178. integration.RSSBridgeEnabled = i.RSSBridgeEnabled
  179. integration.RSSBridgeURL = i.RSSBridgeURL
  180. integration.OmnivoreEnabled = i.OmnivoreEnabled
  181. integration.OmnivoreAPIKey = i.OmnivoreAPIKey
  182. integration.OmnivoreURL = i.OmnivoreURL
  183. integration.RaindropEnabled = i.RaindropEnabled
  184. integration.RaindropToken = i.RaindropToken
  185. integration.RaindropCollectionID = i.RaindropCollectionID
  186. integration.RaindropTags = i.RaindropTags
  187. }
  188. // NewIntegrationForm returns a new IntegrationForm.
  189. func NewIntegrationForm(r *http.Request) *IntegrationForm {
  190. return &IntegrationForm{
  191. PinboardEnabled: r.FormValue("pinboard_enabled") == "1",
  192. PinboardToken: r.FormValue("pinboard_token"),
  193. PinboardTags: r.FormValue("pinboard_tags"),
  194. PinboardMarkAsUnread: r.FormValue("pinboard_mark_as_unread") == "1",
  195. InstapaperEnabled: r.FormValue("instapaper_enabled") == "1",
  196. InstapaperUsername: r.FormValue("instapaper_username"),
  197. InstapaperPassword: r.FormValue("instapaper_password"),
  198. FeverEnabled: r.FormValue("fever_enabled") == "1",
  199. FeverUsername: r.FormValue("fever_username"),
  200. FeverPassword: r.FormValue("fever_password"),
  201. GoogleReaderEnabled: r.FormValue("googlereader_enabled") == "1",
  202. GoogleReaderUsername: r.FormValue("googlereader_username"),
  203. GoogleReaderPassword: r.FormValue("googlereader_password"),
  204. WallabagEnabled: r.FormValue("wallabag_enabled") == "1",
  205. WallabagOnlyURL: r.FormValue("wallabag_only_url") == "1",
  206. WallabagURL: r.FormValue("wallabag_url"),
  207. WallabagClientID: r.FormValue("wallabag_client_id"),
  208. WallabagClientSecret: r.FormValue("wallabag_client_secret"),
  209. WallabagUsername: r.FormValue("wallabag_username"),
  210. WallabagPassword: r.FormValue("wallabag_password"),
  211. NotionEnabled: r.FormValue("notion_enabled") == "1",
  212. NotionPageID: r.FormValue("notion_page_id"),
  213. NotionToken: r.FormValue("notion_token"),
  214. NunuxKeeperEnabled: r.FormValue("nunux_keeper_enabled") == "1",
  215. NunuxKeeperURL: r.FormValue("nunux_keeper_url"),
  216. NunuxKeeperAPIKey: r.FormValue("nunux_keeper_api_key"),
  217. EspialEnabled: r.FormValue("espial_enabled") == "1",
  218. EspialURL: r.FormValue("espial_url"),
  219. EspialAPIKey: r.FormValue("espial_api_key"),
  220. EspialTags: r.FormValue("espial_tags"),
  221. ReadwiseEnabled: r.FormValue("readwise_enabled") == "1",
  222. ReadwiseAPIKey: r.FormValue("readwise_api_key"),
  223. PocketEnabled: r.FormValue("pocket_enabled") == "1",
  224. PocketAccessToken: r.FormValue("pocket_access_token"),
  225. PocketConsumerKey: r.FormValue("pocket_consumer_key"),
  226. TelegramBotEnabled: r.FormValue("telegram_bot_enabled") == "1",
  227. TelegramBotToken: r.FormValue("telegram_bot_token"),
  228. TelegramBotChatID: r.FormValue("telegram_bot_chat_id"),
  229. TelegramBotTopicID: optionalInt64Field(r.FormValue("telegram_bot_topic_id")),
  230. TelegramBotDisableWebPagePreview: r.FormValue("telegram_bot_disable_web_page_preview") == "1",
  231. TelegramBotDisableNotification: r.FormValue("telegram_bot_disable_notification") == "1",
  232. TelegramBotDisableButtons: r.FormValue("telegram_bot_disable_buttons") == "1",
  233. LinkAceEnabled: r.FormValue("linkace_enabled") == "1",
  234. LinkAceURL: r.FormValue("linkace_url"),
  235. LinkAceAPIKey: r.FormValue("linkace_api_key"),
  236. LinkAceTags: r.FormValue("linkace_tags"),
  237. LinkAcePrivate: r.FormValue("linkace_is_private") == "1",
  238. LinkAceCheckDisabled: r.FormValue("linkace_check_disabled") == "1",
  239. LinkdingEnabled: r.FormValue("linkding_enabled") == "1",
  240. LinkdingURL: r.FormValue("linkding_url"),
  241. LinkdingAPIKey: r.FormValue("linkding_api_key"),
  242. LinkdingTags: r.FormValue("linkding_tags"),
  243. LinkdingMarkAsUnread: r.FormValue("linkding_mark_as_unread") == "1",
  244. LinkwardenEnabled: r.FormValue("linkwarden_enabled") == "1",
  245. LinkwardenURL: r.FormValue("linkwarden_url"),
  246. LinkwardenAPIKey: r.FormValue("linkwarden_api_key"),
  247. MatrixBotEnabled: r.FormValue("matrix_bot_enabled") == "1",
  248. MatrixBotUser: r.FormValue("matrix_bot_user"),
  249. MatrixBotPassword: r.FormValue("matrix_bot_password"),
  250. MatrixBotURL: r.FormValue("matrix_bot_url"),
  251. MatrixBotChatID: r.FormValue("matrix_bot_chat_id"),
  252. AppriseEnabled: r.FormValue("apprise_enabled") == "1",
  253. AppriseURL: r.FormValue("apprise_url"),
  254. AppriseServicesURL: r.FormValue("apprise_services_url"),
  255. ReadeckEnabled: r.FormValue("readeck_enabled") == "1",
  256. ReadeckURL: r.FormValue("readeck_url"),
  257. ReadeckAPIKey: r.FormValue("readeck_api_key"),
  258. ReadeckLabels: r.FormValue("readeck_labels"),
  259. ReadeckOnlyURL: r.FormValue("readeck_only_url") == "1",
  260. ShioriEnabled: r.FormValue("shiori_enabled") == "1",
  261. ShioriURL: r.FormValue("shiori_url"),
  262. ShioriUsername: r.FormValue("shiori_username"),
  263. ShioriPassword: r.FormValue("shiori_password"),
  264. ShaarliEnabled: r.FormValue("shaarli_enabled") == "1",
  265. ShaarliURL: r.FormValue("shaarli_url"),
  266. ShaarliAPISecret: r.FormValue("shaarli_api_secret"),
  267. WebhookEnabled: r.FormValue("webhook_enabled") == "1",
  268. WebhookURL: r.FormValue("webhook_url"),
  269. RSSBridgeEnabled: r.FormValue("rssbridge_enabled") == "1",
  270. RSSBridgeURL: r.FormValue("rssbridge_url"),
  271. OmnivoreEnabled: r.FormValue("omnivore_enabled") == "1",
  272. OmnivoreAPIKey: r.FormValue("omnivore_api_key"),
  273. OmnivoreURL: r.FormValue("omnivore_url"),
  274. RaindropEnabled: r.FormValue("raindrop_enabled") == "1",
  275. RaindropToken: r.FormValue("raindrop_token"),
  276. RaindropCollectionID: r.FormValue("raindrop_collection_id"),
  277. RaindropTags: r.FormValue("raindrop_tags"),
  278. }
  279. }
  280. func optionalInt64Field(formValue string) *int64 {
  281. if formValue == "" {
  282. return nil
  283. }
  284. value, _ := strconv.ParseInt(formValue, 10, 64)
  285. return &value
  286. }