diff --git a/app/controllers/admin/settings/registrations_controller.rb b/app/controllers/admin/settings/registrations_controller.rb index 4c6cb83..3887de8 100644 --- a/app/controllers/admin/settings/registrations_controller.rb +++ b/app/controllers/admin/settings/registrations_controller.rb @@ -9,4 +9,12 @@ class Admin::Settings::RegistrationsController < Admin::SettingsController success: "Settings saved" } end + + private + + def setting_params + params.require(:setting).permit([ + :reserved_usernames, default_services: [] + ]) + end end diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb index 0ac029b..496fb9a 100644 --- a/app/controllers/admin/settings_controller.rb +++ b/app/controllers/admin/settings_controller.rb @@ -9,11 +9,12 @@ class Admin::SettingsController < Admin::BaseController changed_keys = [] setting_params.keys.each do |key| - next if setting_params[key].nil? || - (Setting.send(key).to_s == setting_params[key].strip) + next if clean_param(key).nil? || + (Setting.send(key).to_s == clean_param(key)) + changed_keys.push(key) setting = Setting.new(var: key) - setting.value = setting_params[key].strip + setting.value = clean_param(key) unless setting.valid? @errors.merge!(setting.errors) end @@ -24,7 +25,8 @@ class Admin::SettingsController < Admin::BaseController end changed_keys.each do |key| - Setting.send("#{key}=", setting_params[key].strip) + + Setting.send("#{key}=", clean_param(key)) end end @@ -37,4 +39,12 @@ class Admin::SettingsController < Admin::BaseController def setting_params params.require(:setting).permit(Setting.editable_keys.map(&:to_sym)) end + + def clean_param(key) + if Setting.get_field(key)[:type] == :string + setting_params[key].strip! + else + setting_params[key] + end + end end diff --git a/app/controllers/services/chat_controller.rb b/app/controllers/services/chat_controller.rb index dda2be5..9fafaec 100644 --- a/app/controllers/services/chat_controller.rb +++ b/app/controllers/services/chat_controller.rb @@ -3,7 +3,7 @@ class Services::ChatController < Services::BaseController before_action :require_service_available def show - @service_enabled = current_user.service_enabled?(:xmpp) + @service_enabled = current_user.service_enabled?(:ejabberd) end private diff --git a/app/helpers/dashboard_helper.rb b/app/helpers/dashboard_helper.rb deleted file mode 100644 index a94ddfc..0000000 --- a/app/helpers/dashboard_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module DashboardHelper -end diff --git a/app/helpers/donations_helper.rb b/app/helpers/donations_helper.rb deleted file mode 100644 index d04dc2d..0000000 --- a/app/helpers/donations_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module DonationsHelper -end diff --git a/app/helpers/invitations_helper.rb b/app/helpers/invitations_helper.rb deleted file mode 100644 index 1483b9e..0000000 --- a/app/helpers/invitations_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module InvitationsHelper -end diff --git a/app/helpers/lnurlpay_helper.rb b/app/helpers/lnurlpay_helper.rb deleted file mode 100644 index 45170fd..0000000 --- a/app/helpers/lnurlpay_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module LnurlpayHelper -end diff --git a/app/helpers/services_helper.rb b/app/helpers/services_helper.rb new file mode 100644 index 0000000..2b8472b --- /dev/null +++ b/app/helpers/services_helper.rb @@ -0,0 +1,12 @@ +module ServicesHelper + + def service_human_name(key, category = :external) + SERVICES[category][key][:name] || key.to_s + end + + def service_display_name(key, category = :external) + SERVICES[category][key][:display_name] || + service_human_name(key, category) + end + +end diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb deleted file mode 100644 index ffbedba..0000000 --- a/app/helpers/settings_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module SettingsHelper -end diff --git a/app/helpers/signup_helper.rb b/app/helpers/signup_helper.rb deleted file mode 100644 index f954dda..0000000 --- a/app/helpers/signup_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module SignupHelper -end diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb deleted file mode 100644 index 2310a24..0000000 --- a/app/helpers/users_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module UsersHelper -end diff --git a/app/helpers/wallet_helper.rb b/app/helpers/wallet_helper.rb deleted file mode 100644 index 9bd2230..0000000 --- a/app/helpers/wallet_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module WalletHelper -end diff --git a/app/helpers/welcome_helper.rb b/app/helpers/welcome_helper.rb deleted file mode 100644 index eeead45..0000000 --- a/app/helpers/welcome_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module WelcomeHelper -end diff --git a/app/jobs/xmpp_exchange_contacts_job.rb b/app/jobs/xmpp_exchange_contacts_job.rb index 1a9d67a..0de829c 100644 --- a/app/jobs/xmpp_exchange_contacts_job.rb +++ b/app/jobs/xmpp_exchange_contacts_job.rb @@ -2,8 +2,8 @@ class XmppExchangeContactsJob < ApplicationJob queue_as :default def perform(inviter, invitee) - return unless inviter.service_enabled?(:xmpp) && - invitee.service_enabled?(:xmpp) && + return unless inviter.service_enabled?(:ejabberd) && + invitee.service_enabled?(:ejabberd) && inviter.preferences[:xmpp_exchange_contacts_with_invitees] ejabberd = EjabberdApiClient.new 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..aa8072d 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -2,226 +2,30 @@ class Setting < RailsSettings::Base cache_prefix { "v1" } - 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" - - # - # 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 - - def self.default_services - # TODO Make configurable from respective service settings page - %w[ discourse gitea mastodon mediawiki remotestorage xmpp ] + Dir[Rails.root.join('app', 'models', 'concerns', 'settings', '*.rb')].each do |file| + require file end + + 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.available_services + known_services = SERVICES[:external].keys + known_services.select {|s| Setting.send "#{s}_enabled?" } + end + + field :default_services, type: :array, + default: self.available_services end diff --git a/app/models/user.rb b/app/models/user.rb index f387817..248a865 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -180,14 +180,14 @@ class User < ApplicationRecord def enable_service(service) current_services = services_enabled new_services = Array(service).map(&:to_s) - services = (current_services + new_services).uniq + services = (current_services + new_services).uniq.sort ldap.replace_attribute(dn, :serviceEnabled, services) end def disable_service(service) current_services = services_enabled disabled_services = Array(service).map(&:to_s) - services = (current_services - disabled_services).uniq + services = (current_services - disabled_services).uniq.sort ldap.replace_attribute(dn, :serviceEnabled, services) end diff --git a/app/views/admin/settings/registrations/show.html.erb b/app/views/admin/settings/registrations/show.html.erb index 0028c15..e330d69 100644 --- a/app/views/admin/settings/registrations/show.html.erb +++ b/app/views/admin/settings/registrations/show.html.erb @@ -9,18 +9,36 @@ <%= render partial: "admin/settings/errors", locals: { errors: @errors } %> <% end %> - +
+ One username per line +
+ <% end %> +Default services
++ These services are enabled for new users by default after signup. +
+Feature currently in development.