From 4ae10c9b535087e0228c68b993421934b778d019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Wed, 28 Aug 2024 14:39:08 +0200 Subject: [PATCH 01/12] Refactor settings model Move the various sections to their own concerns, so they're easier to find and maintain --- .../concerns/settings/btcpay_settings.rb | 24 ++ .../concerns/settings/discourse_settings.rb | 16 ++ .../concerns/settings/drone_ci_settings.rb | 13 + .../concerns/settings/ejabberd_settings.rb | 19 ++ .../concerns/settings/email_settings.rb | 28 +++ .../concerns/settings/general_settings.rb | 34 +++ .../concerns/settings/gitea_settings.rb | 13 + .../settings/lightning_network_settings.rb | 25 ++ .../concerns/settings/mastodon_settings.rb | 16 ++ .../concerns/settings/media_wiki_settings.rb | 13 + .../concerns/settings/nostr_settings.rb | 22 ++ .../settings/open_collective_settings.rb | 9 + .../settings/remote_storage_settings.rb | 16 ++ app/models/concerns/settings/xmpp_settings.rb | 11 + app/models/setting.rb | 233 ++---------------- 15 files changed, 276 insertions(+), 216 deletions(-) create mode 100644 app/models/concerns/settings/btcpay_settings.rb create mode 100644 app/models/concerns/settings/discourse_settings.rb create mode 100644 app/models/concerns/settings/drone_ci_settings.rb create mode 100644 app/models/concerns/settings/ejabberd_settings.rb create mode 100644 app/models/concerns/settings/email_settings.rb create mode 100644 app/models/concerns/settings/general_settings.rb create mode 100644 app/models/concerns/settings/gitea_settings.rb create mode 100644 app/models/concerns/settings/lightning_network_settings.rb create mode 100644 app/models/concerns/settings/mastodon_settings.rb create mode 100644 app/models/concerns/settings/media_wiki_settings.rb create mode 100644 app/models/concerns/settings/nostr_settings.rb create mode 100644 app/models/concerns/settings/open_collective_settings.rb create mode 100644 app/models/concerns/settings/remote_storage_settings.rb create mode 100644 app/models/concerns/settings/xmpp_settings.rb diff --git a/app/models/concerns/settings/btcpay_settings.rb b/app/models/concerns/settings/btcpay_settings.rb new file mode 100644 index 0000000..c3a3b23 --- /dev/null +++ b/app/models/concerns/settings/btcpay_settings.rb @@ -0,0 +1,24 @@ +module Settings + module BtcpaySettings + extend ActiveSupport::Concern + + included do + field :btcpay_api_url, type: :string, + default: ENV["BTCPAY_API_URL"].presence + + field :btcpay_enabled, type: :boolean, + default: ENV["BTCPAY_API_URL"].present? + + field :btcpay_public_url, type: :string, + default: ENV["BTCPAY_PUBLIC_URL"].presence + + field :btcpay_store_id, type: :string, + default: ENV["BTCPAY_STORE_ID"].presence + + field :btcpay_auth_token, type: :string, + default: ENV["BTCPAY_AUTH_TOKEN"].presence + + field :btcpay_publish_wallet_balances, type: :boolean, default: true + end + end +end diff --git a/app/models/concerns/settings/discourse_settings.rb b/app/models/concerns/settings/discourse_settings.rb new file mode 100644 index 0000000..e246281 --- /dev/null +++ b/app/models/concerns/settings/discourse_settings.rb @@ -0,0 +1,16 @@ +module Settings + module DiscourseSettings + extend ActiveSupport::Concern + + included do + field :discourse_public_url, type: :string, + default: ENV["DISCOURSE_PUBLIC_URL"].presence + + field :discourse_enabled, type: :boolean, + default: ENV["DISCOURSE_PUBLIC_URL"].present? + + field :discourse_connect_secret, type: :string, + default: ENV["DISCOURSE_CONNECT_SECRET"].presence + end + end +end diff --git a/app/models/concerns/settings/drone_ci_settings.rb b/app/models/concerns/settings/drone_ci_settings.rb new file mode 100644 index 0000000..5e9c770 --- /dev/null +++ b/app/models/concerns/settings/drone_ci_settings.rb @@ -0,0 +1,13 @@ +module Settings + module DroneCiSettings + extend ActiveSupport::Concern + + included do + field :droneci_public_url, type: :string, + default: ENV["DRONECI_PUBLIC_URL"].presence + + field :droneci_enabled, type: :boolean, + default: ENV["DRONECI_PUBLIC_URL"].present? + end + end +end diff --git a/app/models/concerns/settings/ejabberd_settings.rb b/app/models/concerns/settings/ejabberd_settings.rb new file mode 100644 index 0000000..5aa76b1 --- /dev/null +++ b/app/models/concerns/settings/ejabberd_settings.rb @@ -0,0 +1,19 @@ +module Settings + module EjabberdSettings + extend ActiveSupport::Concern + + included do + field :ejabberd_enabled, type: :boolean, + default: ENV["EJABBERD_API_URL"].present? + + field :ejabberd_api_url, type: :string, + default: ENV["EJABBERD_API_URL"].presence + + field :ejabberd_admin_url, type: :string, + default: ENV["EJABBERD_ADMIN_URL"].presence + + field :ejabberd_buddy_roster, type: :string, + default: "Buddies" + end + end +end diff --git a/app/models/concerns/settings/email_settings.rb b/app/models/concerns/settings/email_settings.rb new file mode 100644 index 0000000..9329b9a --- /dev/null +++ b/app/models/concerns/settings/email_settings.rb @@ -0,0 +1,28 @@ +module Settings + module EmailSettings + extend ActiveSupport::Concern + + included do + field :email_enabled, type: :boolean, + default: ENV["EMAIL_SMTP_HOST"].present? + + # field :email_smtp_host, type: :string, + # default: ENV["EMAIL_SMTP_HOST"].presence + # + # field :email_smtp_port, type: :string, + # default: ENV["EMAIL_SMTP_PORT"].presence || 587 + # + # field :email_smtp_enable_starttls, type: :string, + # default: ENV["EMAIL_SMTP_PORT"].presence || true + # + # field :email_auth_method, type: :string, + # default: ENV["EMAIL_AUTH_METHOD"].presence || "plain" + # + # field :email_imap_host, type: :string, + # default: ENV["EMAIL_IMAP_HOST"].presence + # + # field :email_imap_port, type: :string, + # default: ENV["EMAIL_IMAP_PORT"].presence || 993 + end + end +end diff --git a/app/models/concerns/settings/general_settings.rb b/app/models/concerns/settings/general_settings.rb new file mode 100644 index 0000000..8c87903 --- /dev/null +++ b/app/models/concerns/settings/general_settings.rb @@ -0,0 +1,34 @@ +module Settings + module GeneralSettings + extend ActiveSupport::Concern + + included do + field :primary_domain, type: :string, + default: ENV["PRIMARY_DOMAIN"].presence + + field :accounts_domain, type: :string, + default: ENV["AKKOUNTS_DOMAIN"].presence + + # + # Internal services + # + + field :redis_url, type: :string, + default: ENV["REDIS_URL"] || "redis://localhost:6379/0" + + field :s3_enabled, type: :boolean, + default: ENV["S3_ENABLED"] && ENV["S3_ENABLED"].to_s != "false" + + field :sentry_enabled, type: :boolean, readonly: true, + default: ENV["SENTRY_DSN"].present? + + # + # Registrations + # + + field :reserved_usernames, type: :array, default: %w[ + account accounts donations mail webmaster support + ] + end + end +end diff --git a/app/models/concerns/settings/gitea_settings.rb b/app/models/concerns/settings/gitea_settings.rb new file mode 100644 index 0000000..a63f08d --- /dev/null +++ b/app/models/concerns/settings/gitea_settings.rb @@ -0,0 +1,13 @@ +module Settings + module GiteaSettings + extend ActiveSupport::Concern + + included do + field :gitea_public_url, type: :string, + default: ENV["GITEA_PUBLIC_URL"].presence + + field :gitea_enabled, type: :boolean, + default: ENV["GITEA_PUBLIC_URL"].present? + end + end +end diff --git a/app/models/concerns/settings/lightning_network_settings.rb b/app/models/concerns/settings/lightning_network_settings.rb new file mode 100644 index 0000000..95a9579 --- /dev/null +++ b/app/models/concerns/settings/lightning_network_settings.rb @@ -0,0 +1,25 @@ +module Settings + module LightningNetworkSettings + extend ActiveSupport::Concern + + included do + field :lndhub_api_url, type: :string, + default: ENV["LNDHUB_API_URL"].presence + + field :lndhub_enabled, type: :boolean, + default: ENV["LNDHUB_API_URL"].present? + + field :lndhub_admin_token, type: :string, + default: ENV["LNDHUB_ADMIN_TOKEN"].presence + + field :lndhub_admin_enabled, type: :boolean, + default: ENV["LNDHUB_ADMIN_UI"] || false + + field :lndhub_public_key, type: :string, + default: (ENV["LNDHUB_PUBLIC_KEY"] || "") + + field :lndhub_keysend_enabled, type: :boolean, + default: -> { self.lndhub_public_key.present? } + end + end +end diff --git a/app/models/concerns/settings/mastodon_settings.rb b/app/models/concerns/settings/mastodon_settings.rb new file mode 100644 index 0000000..7532c15 --- /dev/null +++ b/app/models/concerns/settings/mastodon_settings.rb @@ -0,0 +1,16 @@ +module Settings + module MastodonSettings + extend ActiveSupport::Concern + + included do + field :mastodon_public_url, type: :string, + default: ENV["MASTODON_PUBLIC_URL"].presence + + field :mastodon_enabled, type: :boolean, + default: ENV["MASTODON_PUBLIC_URL"].present? + + field :mastodon_address_domain, type: :string, + default: ENV["MASTODON_ADDRESS_DOMAIN"].presence || self.primary_domain + end + end +end diff --git a/app/models/concerns/settings/media_wiki_settings.rb b/app/models/concerns/settings/media_wiki_settings.rb new file mode 100644 index 0000000..adf3a85 --- /dev/null +++ b/app/models/concerns/settings/media_wiki_settings.rb @@ -0,0 +1,13 @@ +module Settings + module MediaWikiSettings + extend ActiveSupport::Concern + + included do + field :mediawiki_public_url, type: :string, + default: ENV["MEDIAWIKI_PUBLIC_URL"].presence + + field :mediawiki_enabled, type: :boolean, + default: ENV["MEDIAWIKI_PUBLIC_URL"].present? + end + end +end diff --git a/app/models/concerns/settings/nostr_settings.rb b/app/models/concerns/settings/nostr_settings.rb new file mode 100644 index 0000000..194b3f0 --- /dev/null +++ b/app/models/concerns/settings/nostr_settings.rb @@ -0,0 +1,22 @@ +module Settings + module NostrSettings + extend ActiveSupport::Concern + + included do + field :nostr_enabled, type: :boolean, + default: ENV["NOSTR_PRIVATE_KEY"].present? + + field :nostr_private_key, type: :string, + default: ENV["NOSTR_PRIVATE_KEY"].presence + + field :nostr_public_key, type: :string, + default: ENV["NOSTR_PUBLIC_KEY"].presence + + field :nostr_relay_url, type: :string, + default: ENV["NOSTR_RELAY_URL"].presence + + field :nostr_zaps_relay_limit, type: :integer, + default: 12 + end + end +end diff --git a/app/models/concerns/settings/open_collective_settings.rb b/app/models/concerns/settings/open_collective_settings.rb new file mode 100644 index 0000000..ae9a3df --- /dev/null +++ b/app/models/concerns/settings/open_collective_settings.rb @@ -0,0 +1,9 @@ +module Settings + module OpenCollectiveSettings + extend ActiveSupport::Concern + + included do + field :opencollective_enabled, type: :boolean, default: true + end + end +end diff --git a/app/models/concerns/settings/remote_storage_settings.rb b/app/models/concerns/settings/remote_storage_settings.rb new file mode 100644 index 0000000..0290e25 --- /dev/null +++ b/app/models/concerns/settings/remote_storage_settings.rb @@ -0,0 +1,16 @@ +module Settings + module RemoteStorageSettings + extend ActiveSupport::Concern + + included do + field :remotestorage_enabled, type: :boolean, + default: ENV["RS_STORAGE_URL"].present? + + field :rs_storage_url, type: :string, + default: ENV["RS_STORAGE_URL"].presence + + field :rs_redis_url, type: :string, + default: ENV["RS_REDIS_URL"] || "redis://localhost:6379/1" + end + end +end diff --git a/app/models/concerns/settings/xmpp_settings.rb b/app/models/concerns/settings/xmpp_settings.rb new file mode 100644 index 0000000..eb9535c --- /dev/null +++ b/app/models/concerns/settings/xmpp_settings.rb @@ -0,0 +1,11 @@ +module Settings + module XmppSettings + extend ActiveSupport::Concern + + included do + field :xmpp_default_rooms, type: :array, default: [] + field :xmpp_autojoin_default_rooms, type: :boolean, default: false + field :xmpp_notifications_from_address, type: :string, default: primary_domain + end + end +end diff --git a/app/models/setting.rb b/app/models/setting.rb index 4bdac21..c27bcf2 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -2,223 +2,24 @@ class Setting < RailsSettings::Base cache_prefix { "v1" } - field :primary_domain, type: :string, - default: ENV["PRIMARY_DOMAIN"].presence + Dir[Rails.root.join('app', 'models', 'concerns', 'settings', '*.rb')].each do |file| + require file + end - field :accounts_domain, type: :string, - default: ENV["AKKOUNTS_DOMAIN"].presence - - # - # Internal services - # - - field :redis_url, type: :string, - default: ENV["REDIS_URL"] || "redis://localhost:6379/0" - - field :s3_enabled, type: :boolean, - default: ENV["S3_ENABLED"] && ENV["S3_ENABLED"].to_s != "false" - - # - # Registrations - # - - field :reserved_usernames, type: :array, default: %w[ - account accounts donations mail webmaster support - ] - - # - # XMPP - # - - field :xmpp_default_rooms, type: :array, default: [] - field :xmpp_autojoin_default_rooms, type: :boolean, default: false - field :xmpp_notifications_from_address, type: :string, default: primary_domain - - # - # Sentry - # - - field :sentry_enabled, type: :boolean, readonly: true, - default: ENV["SENTRY_DSN"].present? - - # - # BTCPay Server - # - - field :btcpay_api_url, type: :string, - default: ENV["BTCPAY_API_URL"].presence - - field :btcpay_enabled, type: :boolean, - default: ENV["BTCPAY_API_URL"].present? - - field :btcpay_public_url, type: :string, - default: ENV["BTCPAY_PUBLIC_URL"].presence - - field :btcpay_store_id, type: :string, - default: ENV["BTCPAY_STORE_ID"].presence - - field :btcpay_auth_token, type: :string, - default: ENV["BTCPAY_AUTH_TOKEN"].presence - - field :btcpay_publish_wallet_balances, type: :boolean, default: true - - # - # Discourse - # - - field :discourse_public_url, type: :string, - default: ENV["DISCOURSE_PUBLIC_URL"].presence - - field :discourse_enabled, type: :boolean, - default: ENV["DISCOURSE_PUBLIC_URL"].present? - - field :discourse_connect_secret, type: :string, - default: ENV["DISCOURSE_CONNECT_SECRET"].presence - - # - # Drone CI - # - - field :droneci_public_url, type: :string, - default: ENV["DRONECI_PUBLIC_URL"].presence - - field :droneci_enabled, type: :boolean, - default: ENV["DRONECI_PUBLIC_URL"].present? - - # - # ejabberd - # - - field :ejabberd_enabled, type: :boolean, - default: ENV["EJABBERD_API_URL"].present? - - field :ejabberd_api_url, type: :string, - default: ENV["EJABBERD_API_URL"].presence - - field :ejabberd_admin_url, type: :string, - default: ENV["EJABBERD_ADMIN_URL"].presence - - field :ejabberd_buddy_roster, type: :string, - default: "Buddies" - - # - # Gitea - # - - field :gitea_public_url, type: :string, - default: ENV["GITEA_PUBLIC_URL"].presence - - field :gitea_enabled, type: :boolean, - default: ENV["GITEA_PUBLIC_URL"].present? - - # - # Lightning Network - # - - field :lndhub_api_url, type: :string, - default: ENV["LNDHUB_API_URL"].presence - - field :lndhub_enabled, type: :boolean, - default: ENV["LNDHUB_API_URL"].present? - - field :lndhub_admin_token, type: :string, - default: ENV["LNDHUB_ADMIN_TOKEN"].presence - - field :lndhub_admin_enabled, type: :boolean, - default: ENV["LNDHUB_ADMIN_UI"] || false - - field :lndhub_public_key, type: :string, - default: (ENV["LNDHUB_PUBLIC_KEY"] || "") - - field :lndhub_keysend_enabled, type: :boolean, - default: -> { self.lndhub_public_key.present? } - - # - # Mastodon - # - - field :mastodon_public_url, type: :string, - default: ENV["MASTODON_PUBLIC_URL"].presence - - field :mastodon_enabled, type: :boolean, - default: ENV["MASTODON_PUBLIC_URL"].present? - - field :mastodon_address_domain, type: :string, - default: ENV["MASTODON_ADDRESS_DOMAIN"].presence || self.primary_domain - - # - # MediaWiki - # - - field :mediawiki_public_url, type: :string, - default: ENV["MEDIAWIKI_PUBLIC_URL"].presence - - field :mediawiki_enabled, type: :boolean, - default: ENV["MEDIAWIKI_PUBLIC_URL"].present? - - # - # Nostr - # - - field :nostr_enabled, type: :boolean, - default: ENV["NOSTR_PRIVATE_KEY"].present? - - field :nostr_private_key, type: :string, - default: ENV["NOSTR_PRIVATE_KEY"].presence - - field :nostr_public_key, type: :string, - default: ENV["NOSTR_PUBLIC_KEY"].presence - - field :nostr_relay_url, type: :string, - default: ENV["NOSTR_RELAY_URL"].presence - - field :nostr_zaps_relay_limit, type: :integer, - default: 12 - - # - # OpenCollective - # - - field :opencollective_enabled, type: :boolean, default: true - - # - # RemoteStorage - # - - field :remotestorage_enabled, type: :boolean, - default: ENV["RS_STORAGE_URL"].present? - - field :rs_storage_url, type: :string, - default: ENV["RS_STORAGE_URL"].presence - - field :rs_redis_url, type: :string, - default: ENV["RS_REDIS_URL"] || "redis://localhost:6379/1" - - - # - # E-Mail Service - # - - field :email_enabled, type: :boolean, - default: ENV["EMAIL_SMTP_HOST"].present? - - # field :email_smtp_host, type: :string, - # default: ENV["EMAIL_SMTP_HOST"].presence - # - # field :email_smtp_port, type: :string, - # default: ENV["EMAIL_SMTP_PORT"].presence || 587 - # - # field :email_smtp_enable_starttls, type: :string, - # default: ENV["EMAIL_SMTP_PORT"].presence || true - # - # field :email_auth_method, type: :string, - # default: ENV["EMAIL_AUTH_METHOD"].presence || "plain" - # - # field :email_imap_host, type: :string, - # default: ENV["EMAIL_IMAP_HOST"].presence - # - # field :email_imap_port, type: :string, - # default: ENV["EMAIL_IMAP_PORT"].presence || 993 + include Settings::GeneralSettings + include Settings::BtcpaySettings + include Settings::DiscourseSettings + include Settings::DroneCiSettings + include Settings::EjabberdSettings + include Settings::EmailSettings + include Settings::GiteaSettings + include Settings::LightningNetworkSettings + include Settings::MastodonSettings + include Settings::MediaWikiSettings + include Settings::NostrSettings + include Settings::OpenCollectiveSettings + include Settings::RemoteStorageSettings + include Settings::XmppSettings def self.default_services # TODO Make configurable from respective service settings page From 15e2f9b9624fd97bc5c4940ef5eddf83ebfa5c1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Wed, 28 Aug 2024 14:55:34 +0200 Subject: [PATCH 02/12] Remove "in development" note --- app/views/admin/settings/services/_remotestorage.html.erb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/views/admin/settings/services/_remotestorage.html.erb b/app/views/admin/settings/services/_remotestorage.html.erb index 5b8f47b..eca46a9 100644 --- a/app/views/admin/settings/services/_remotestorage.html.erb +++ b/app/views/admin/settings/services/_remotestorage.html.erb @@ -1,5 +1,4 @@

RemoteStorage

-

Feature currently in development.