integration.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  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. }
  96. // Merge copy form values to the model.
  97. func (i IntegrationForm) Merge(integration *model.Integration) {
  98. integration.PinboardEnabled = i.PinboardEnabled
  99. integration.PinboardToken = i.PinboardToken
  100. integration.PinboardTags = i.PinboardTags
  101. integration.PinboardMarkAsUnread = i.PinboardMarkAsUnread
  102. integration.InstapaperEnabled = i.InstapaperEnabled
  103. integration.InstapaperUsername = i.InstapaperUsername
  104. integration.InstapaperPassword = i.InstapaperPassword
  105. integration.FeverEnabled = i.FeverEnabled
  106. integration.FeverUsername = i.FeverUsername
  107. integration.GoogleReaderEnabled = i.GoogleReaderEnabled
  108. integration.GoogleReaderUsername = i.GoogleReaderUsername
  109. integration.WallabagEnabled = i.WallabagEnabled
  110. integration.WallabagOnlyURL = i.WallabagOnlyURL
  111. integration.WallabagURL = i.WallabagURL
  112. integration.WallabagClientID = i.WallabagClientID
  113. integration.WallabagClientSecret = i.WallabagClientSecret
  114. integration.WallabagUsername = i.WallabagUsername
  115. integration.WallabagPassword = i.WallabagPassword
  116. integration.NotionEnabled = i.NotionEnabled
  117. integration.NotionPageID = i.NotionPageID
  118. integration.NotionToken = i.NotionToken
  119. integration.NunuxKeeperEnabled = i.NunuxKeeperEnabled
  120. integration.NunuxKeeperURL = i.NunuxKeeperURL
  121. integration.NunuxKeeperAPIKey = i.NunuxKeeperAPIKey
  122. integration.EspialEnabled = i.EspialEnabled
  123. integration.EspialURL = i.EspialURL
  124. integration.EspialAPIKey = i.EspialAPIKey
  125. integration.EspialTags = i.EspialTags
  126. integration.ReadwiseEnabled = i.ReadwiseEnabled
  127. integration.ReadwiseAPIKey = i.ReadwiseAPIKey
  128. integration.PocketEnabled = i.PocketEnabled
  129. integration.PocketAccessToken = i.PocketAccessToken
  130. integration.PocketConsumerKey = i.PocketConsumerKey
  131. integration.TelegramBotEnabled = i.TelegramBotEnabled
  132. integration.TelegramBotToken = i.TelegramBotToken
  133. integration.TelegramBotChatID = i.TelegramBotChatID
  134. integration.TelegramBotTopicID = i.TelegramBotTopicID
  135. integration.TelegramBotDisableWebPagePreview = i.TelegramBotDisableWebPagePreview
  136. integration.TelegramBotDisableNotification = i.TelegramBotDisableNotification
  137. integration.TelegramBotDisableButtons = i.TelegramBotDisableButtons
  138. integration.LinkAceEnabled = i.LinkAceEnabled
  139. integration.LinkAceURL = i.LinkAceURL
  140. integration.LinkAceAPIKey = i.LinkAceAPIKey
  141. integration.LinkAceTags = i.LinkAceTags
  142. integration.LinkAcePrivate = i.LinkAcePrivate
  143. integration.LinkAceCheckDisabled = i.LinkAceCheckDisabled
  144. integration.LinkdingEnabled = i.LinkdingEnabled
  145. integration.LinkdingURL = i.LinkdingURL
  146. integration.LinkdingAPIKey = i.LinkdingAPIKey
  147. integration.LinkdingTags = i.LinkdingTags
  148. integration.LinkdingMarkAsUnread = i.LinkdingMarkAsUnread
  149. integration.LinkwardenEnabled = i.LinkwardenEnabled
  150. integration.LinkwardenURL = i.LinkwardenURL
  151. integration.LinkwardenAPIKey = i.LinkwardenAPIKey
  152. integration.MatrixBotEnabled = i.MatrixBotEnabled
  153. integration.MatrixBotUser = i.MatrixBotUser
  154. integration.MatrixBotPassword = i.MatrixBotPassword
  155. integration.MatrixBotURL = i.MatrixBotURL
  156. integration.MatrixBotChatID = i.MatrixBotChatID
  157. integration.AppriseEnabled = i.AppriseEnabled
  158. integration.AppriseServicesURL = i.AppriseServicesURL
  159. integration.AppriseURL = i.AppriseURL
  160. integration.ReadeckEnabled = i.ReadeckEnabled
  161. integration.ReadeckURL = i.ReadeckURL
  162. integration.ReadeckAPIKey = i.ReadeckAPIKey
  163. integration.ReadeckLabels = i.ReadeckLabels
  164. integration.ReadeckOnlyURL = i.ReadeckOnlyURL
  165. integration.ShioriEnabled = i.ShioriEnabled
  166. integration.ShioriURL = i.ShioriURL
  167. integration.ShioriUsername = i.ShioriUsername
  168. integration.ShioriPassword = i.ShioriPassword
  169. integration.ShaarliEnabled = i.ShaarliEnabled
  170. integration.ShaarliURL = i.ShaarliURL
  171. integration.ShaarliAPISecret = i.ShaarliAPISecret
  172. integration.WebhookEnabled = i.WebhookEnabled
  173. integration.WebhookURL = i.WebhookURL
  174. integration.RSSBridgeEnabled = i.RSSBridgeEnabled
  175. integration.RSSBridgeURL = i.RSSBridgeURL
  176. integration.OmnivoreEnabled = i.OmnivoreEnabled
  177. integration.OmnivoreAPIKey = i.OmnivoreAPIKey
  178. integration.OmnivoreURL = i.OmnivoreURL
  179. }
  180. // NewIntegrationForm returns a new IntegrationForm.
  181. func NewIntegrationForm(r *http.Request) *IntegrationForm {
  182. return &IntegrationForm{
  183. PinboardEnabled: r.FormValue("pinboard_enabled") == "1",
  184. PinboardToken: r.FormValue("pinboard_token"),
  185. PinboardTags: r.FormValue("pinboard_tags"),
  186. PinboardMarkAsUnread: r.FormValue("pinboard_mark_as_unread") == "1",
  187. InstapaperEnabled: r.FormValue("instapaper_enabled") == "1",
  188. InstapaperUsername: r.FormValue("instapaper_username"),
  189. InstapaperPassword: r.FormValue("instapaper_password"),
  190. FeverEnabled: r.FormValue("fever_enabled") == "1",
  191. FeverUsername: r.FormValue("fever_username"),
  192. FeverPassword: r.FormValue("fever_password"),
  193. GoogleReaderEnabled: r.FormValue("googlereader_enabled") == "1",
  194. GoogleReaderUsername: r.FormValue("googlereader_username"),
  195. GoogleReaderPassword: r.FormValue("googlereader_password"),
  196. WallabagEnabled: r.FormValue("wallabag_enabled") == "1",
  197. WallabagOnlyURL: r.FormValue("wallabag_only_url") == "1",
  198. WallabagURL: r.FormValue("wallabag_url"),
  199. WallabagClientID: r.FormValue("wallabag_client_id"),
  200. WallabagClientSecret: r.FormValue("wallabag_client_secret"),
  201. WallabagUsername: r.FormValue("wallabag_username"),
  202. WallabagPassword: r.FormValue("wallabag_password"),
  203. NotionEnabled: r.FormValue("notion_enabled") == "1",
  204. NotionPageID: r.FormValue("notion_page_id"),
  205. NotionToken: r.FormValue("notion_token"),
  206. NunuxKeeperEnabled: r.FormValue("nunux_keeper_enabled") == "1",
  207. NunuxKeeperURL: r.FormValue("nunux_keeper_url"),
  208. NunuxKeeperAPIKey: r.FormValue("nunux_keeper_api_key"),
  209. EspialEnabled: r.FormValue("espial_enabled") == "1",
  210. EspialURL: r.FormValue("espial_url"),
  211. EspialAPIKey: r.FormValue("espial_api_key"),
  212. EspialTags: r.FormValue("espial_tags"),
  213. ReadwiseEnabled: r.FormValue("readwise_enabled") == "1",
  214. ReadwiseAPIKey: r.FormValue("readwise_api_key"),
  215. PocketEnabled: r.FormValue("pocket_enabled") == "1",
  216. PocketAccessToken: r.FormValue("pocket_access_token"),
  217. PocketConsumerKey: r.FormValue("pocket_consumer_key"),
  218. TelegramBotEnabled: r.FormValue("telegram_bot_enabled") == "1",
  219. TelegramBotToken: r.FormValue("telegram_bot_token"),
  220. TelegramBotChatID: r.FormValue("telegram_bot_chat_id"),
  221. TelegramBotTopicID: optionalInt64Field(r.FormValue("telegram_bot_topic_id")),
  222. TelegramBotDisableWebPagePreview: r.FormValue("telegram_bot_disable_web_page_preview") == "1",
  223. TelegramBotDisableNotification: r.FormValue("telegram_bot_disable_notification") == "1",
  224. TelegramBotDisableButtons: r.FormValue("telegram_bot_disable_buttons") == "1",
  225. LinkAceEnabled: r.FormValue("linkace_enabled") == "1",
  226. LinkAceURL: r.FormValue("linkace_url"),
  227. LinkAceAPIKey: r.FormValue("linkace_api_key"),
  228. LinkAceTags: r.FormValue("linkace_tags"),
  229. LinkAcePrivate: r.FormValue("linkace_is_private") == "1",
  230. LinkAceCheckDisabled: r.FormValue("linkace_check_disabled") == "1",
  231. LinkdingEnabled: r.FormValue("linkding_enabled") == "1",
  232. LinkdingURL: r.FormValue("linkding_url"),
  233. LinkdingAPIKey: r.FormValue("linkding_api_key"),
  234. LinkdingTags: r.FormValue("linkding_tags"),
  235. LinkdingMarkAsUnread: r.FormValue("linkding_mark_as_unread") == "1",
  236. LinkwardenEnabled: r.FormValue("linkwarden_enabled") == "1",
  237. LinkwardenURL: r.FormValue("linkwarden_url"),
  238. LinkwardenAPIKey: r.FormValue("linkwarden_api_key"),
  239. MatrixBotEnabled: r.FormValue("matrix_bot_enabled") == "1",
  240. MatrixBotUser: r.FormValue("matrix_bot_user"),
  241. MatrixBotPassword: r.FormValue("matrix_bot_password"),
  242. MatrixBotURL: r.FormValue("matrix_bot_url"),
  243. MatrixBotChatID: r.FormValue("matrix_bot_chat_id"),
  244. AppriseEnabled: r.FormValue("apprise_enabled") == "1",
  245. AppriseURL: r.FormValue("apprise_url"),
  246. AppriseServicesURL: r.FormValue("apprise_services_url"),
  247. ReadeckEnabled: r.FormValue("readeck_enabled") == "1",
  248. ReadeckURL: r.FormValue("readeck_url"),
  249. ReadeckAPIKey: r.FormValue("readeck_api_key"),
  250. ReadeckLabels: r.FormValue("readeck_labels"),
  251. ReadeckOnlyURL: r.FormValue("readeck_only_url") == "1",
  252. ShioriEnabled: r.FormValue("shiori_enabled") == "1",
  253. ShioriURL: r.FormValue("shiori_url"),
  254. ShioriUsername: r.FormValue("shiori_username"),
  255. ShioriPassword: r.FormValue("shiori_password"),
  256. ShaarliEnabled: r.FormValue("shaarli_enabled") == "1",
  257. ShaarliURL: r.FormValue("shaarli_url"),
  258. ShaarliAPISecret: r.FormValue("shaarli_api_secret"),
  259. WebhookEnabled: r.FormValue("webhook_enabled") == "1",
  260. WebhookURL: r.FormValue("webhook_url"),
  261. RSSBridgeEnabled: r.FormValue("rssbridge_enabled") == "1",
  262. RSSBridgeURL: r.FormValue("rssbridge_url"),
  263. OmnivoreEnabled: r.FormValue("omnivore_enabled") == "1",
  264. OmnivoreAPIKey: r.FormValue("omnivore_api_key"),
  265. OmnivoreURL: r.FormValue("omnivore_url"),
  266. }
  267. }
  268. func optionalInt64Field(formValue string) *int64 {
  269. if formValue == "" {
  270. return nil
  271. }
  272. value, _ := strconv.ParseInt(formValue, 10, 64)
  273. return &value
  274. }