diff --git a/app/controllers/internal/configs_controller.rb b/app/controllers/internal/configs_controller.rb index b1df1bc9f..7a38f8325 100644 --- a/app/controllers/internal/configs_controller.rb +++ b/app/controllers/internal/configs_controller.rb @@ -11,7 +11,9 @@ class Internal::ConfigsController < Internal::ApplicationController clean_up_params config_params.each do |key, value| - if value.respond_to?(:to_h) + if value.is_a?(Array) + SiteConfig.public_send("#{key}=", value.reject(&:blank?)) unless value.empty? + elsif value.respond_to?(:to_h) SiteConfig.public_send("#{key}=", value.to_h) unless value.empty? else SiteConfig.public_send("#{key}=", value.strip) unless value.nil? @@ -26,7 +28,6 @@ class Internal::ConfigsController < Internal::ApplicationController def config_params allowed_params = %i[ - authentication_providers campaign_featured_tags campaign_hero_html_variant_name campaign_sidebar_enabled @@ -34,7 +35,6 @@ class Internal::ConfigsController < Internal::ApplicationController community_description community_member_description community_member_label - tagline favicon_url ga_view_id ga_fetch_rate logo_png @@ -59,11 +59,16 @@ class Internal::ConfigsController < Internal::ApplicationController shop_url sidebar_tags suggested_tags + tagline ] - params.require(:site_config).permit(allowed_params, - social_media_handles: SiteConfig.social_media_handles.keys, - email_addresses: SiteConfig.email_addresses.keys, - meta_keywords: SiteConfig.meta_keywords.keys) + + params.require(:site_config).permit( + allowed_params, + authentication_providers: [], + social_media_handles: SiteConfig.social_media_handles.keys, + email_addresses: SiteConfig.email_addresses.keys, + meta_keywords: SiteConfig.meta_keywords.keys, + ) end def extra_authorization_and_confirmation @@ -74,7 +79,6 @@ class Internal::ConfigsController < Internal::ApplicationController def clean_up_params config = params[:site_config] config[:suggested_tags] = config[:suggested_tags].downcase.delete(" ") if config[:suggested_tags] - config[:authentication_providers] = config[:authentication_providers].downcase.delete(" ") if config[:authentication_providers] config[:sidebar_tags] = config[:sidebar_tags].downcase.delete(" ") if config[:sidebar_tags] end diff --git a/app/helpers/authentication_helper.rb b/app/helpers/authentication_helper.rb index 3113fb229..9b2e947db 100644 --- a/app/helpers/authentication_helper.rb +++ b/app/helpers/authentication_helper.rb @@ -3,6 +3,12 @@ module AuthenticationHelper Authentication::Providers.get!(provider_name) end + def authentication_available_providers + Authentication::Providers.available.map do |provider_name| + Authentication::Providers.const_get(provider_name.to_s.titleize) + end + end + def authentication_enabled_providers Authentication::Providers.enabled.map do |provider_name| Authentication::Providers.get!(provider_name) diff --git a/app/models/site_config.rb b/app/models/site_config.rb index 815670481..5219aa343 100644 --- a/app/models/site_config.rb +++ b/app/models/site_config.rb @@ -44,7 +44,7 @@ class SiteConfig < RailsSettings::Base } # Authentication - field :authentication_providers, type: :array, default: %w[twitter github] + field :authentication_providers, type: :array, default: Authentication::Providers.available # Broadcast field :welcome_notifications_live_at, type: :date diff --git a/app/views/internal/configs/show.html.erb b/app/views/internal/configs/show.html.erb index 14cb97011..1118e7632 100644 --- a/app/views/internal/configs/show.html.erb +++ b/app/views/internal/configs/show.html.erb @@ -169,11 +169,16 @@
<%= f.label :authentication_providers, "Authentication providers" %> - <%= f.text_field :authentication_providers, - class: "form-control", - value: SiteConfig.authentication_providers.join(","), - placeholder: "List of valid providers: comma separated, letters only e.g. twitter,github" %> -
How can users sign in? (More options coming)
+ <%= select_tag "site_config[authentication_providers]", + options_from_collection_for_select( + authentication_available_providers, + :provider_name, + :official_name, + authentication_enabled_providers.map(&:provider_name), + ), + multiple: true, + class: "form-control selectpicker" %> +
How can users sign in?
diff --git a/app/views/layouts/internal.html.erb b/app/views/layouts/internal.html.erb index 66ebcc2ac..806d1bf6c 100644 --- a/app/views/layouts/internal.html.erb +++ b/app/views/layouts/internal.html.erb @@ -19,6 +19,7 @@ + <%= stylesheet_link_tag "internal/layout" %> @@ -49,6 +50,7 @@ + <%= javascript_include_tag "internal" %> diff --git a/spec/requests/internal/configs_spec.rb b/spec/requests/internal/configs_spec.rb index ae5f959ae..4791f981f 100644 --- a/spec/requests/internal/configs_spec.rb +++ b/spec/requests/internal/configs_spec.rb @@ -307,14 +307,17 @@ RSpec.describe "/internal/config", type: :request do end describe "Authentication" do - it "removes space authentication_providers" do - post "/internal/config", params: { site_config: { authentication_providers: "github, twitter" }, confirmation: confirmation_message } - expect(SiteConfig.authentication_providers).to eq(%w[github twitter]) + it "updates enabled authentication providers" do + enabled = Array.wrap(Authentication::Providers.available.first.to_s) + post "/internal/config", params: { site_config: { authentication_providers: enabled }, confirmation: confirmation_message } + expect(SiteConfig.authentication_providers).to eq(enabled) end - it "downcases authentication_providers" do - post "/internal/config", params: { site_config: { authentication_providers: "GitHub, Twitter" }, confirmation: confirmation_message } - expect(SiteConfig.authentication_providers).to eq(%w[github twitter]) + it "strips empty elements" do + provider = Authentication::Providers.available.first.to_s + enabled = [provider, "", nil] + post "/internal/config", params: { site_config: { authentication_providers: enabled }, confirmation: confirmation_message } + expect(SiteConfig.authentication_providers).to eq([provider]) end end end