Make default user services configurable by admin
This commit is contained in:
		
							parent
							
								
									5addd25186
								
							
						
					
					
						commit
						fc2bec6246
					
				| @ -9,4 +9,12 @@ class Admin::Settings::RegistrationsController < Admin::SettingsController | |||||||
|       success: "Settings saved" |       success: "Settings saved" | ||||||
|     } |     } | ||||||
|   end |   end | ||||||
|  | 
 | ||||||
|  |   private | ||||||
|  | 
 | ||||||
|  |     def setting_params | ||||||
|  |       params.require(:setting).permit([ | ||||||
|  |         :reserved_usernames, default_services: [] | ||||||
|  |       ]) | ||||||
|  |     end | ||||||
| end | end | ||||||
|  | |||||||
| @ -9,11 +9,12 @@ class Admin::SettingsController < Admin::BaseController | |||||||
|     changed_keys = [] |     changed_keys = [] | ||||||
| 
 | 
 | ||||||
|     setting_params.keys.each do |key| |     setting_params.keys.each do |key| | ||||||
|       next if setting_params[key].nil? || |       next if clean_param(key).nil? || | ||||||
|               (Setting.send(key).to_s == setting_params[key].strip) |         (Setting.send(key).to_s == clean_param(key)) | ||||||
|  | 
 | ||||||
|       changed_keys.push(key) |       changed_keys.push(key) | ||||||
|       setting = Setting.new(var: key) |       setting = Setting.new(var: key) | ||||||
|       setting.value = setting_params[key].strip |       setting.value = clean_param(key) | ||||||
|       unless setting.valid? |       unless setting.valid? | ||||||
|         @errors.merge!(setting.errors) |         @errors.merge!(setting.errors) | ||||||
|       end |       end | ||||||
| @ -24,7 +25,8 @@ class Admin::SettingsController < Admin::BaseController | |||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     changed_keys.each do |key| |     changed_keys.each do |key| | ||||||
|       Setting.send("#{key}=", setting_params[key].strip) | 
 | ||||||
|  |       Setting.send("#{key}=", clean_param(key)) | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
| @ -37,4 +39,12 @@ class Admin::SettingsController < Admin::BaseController | |||||||
|     def setting_params |     def setting_params | ||||||
|       params.require(:setting).permit(Setting.editable_keys.map(&:to_sym)) |       params.require(:setting).permit(Setting.editable_keys.map(&:to_sym)) | ||||||
|     end |     end | ||||||
|  | 
 | ||||||
|  |     def clean_param(key) | ||||||
|  |       if Setting.get_field(key)[:type] == :string | ||||||
|  |         setting_params[key].strip! | ||||||
|  |       else | ||||||
|  |         setting_params[key] | ||||||
|  |       end | ||||||
|  |     end | ||||||
| end | end | ||||||
|  | |||||||
| @ -9,18 +9,35 @@ | |||||||
|         <%= render partial: "admin/settings/errors", locals: { errors: @errors } %> |         <%= render partial: "admin/settings/errors", locals: { errors: @errors } %> | ||||||
|       <% end %> |       <% end %> | ||||||
| 
 | 
 | ||||||
|       <label class="block"> |       <ul role="list"> | ||||||
|         <p class="font-bold mb-1">Reserved usernames</p> |         <%= render FormElements::FieldsetComponent.new( | ||||||
|         <p class="text-gray-500"> |               title: "Reserved usernames", | ||||||
|           These usernames cannot be registered as accounts: |               description: "These usernames cannot be registered as accounts." | ||||||
|         </p> |             ) do %> | ||||||
|         <%= f.text_area :reserved_usernames, |           <%= f.text_area :reserved_usernames, | ||||||
|           value: Setting.reserved_usernames.join("\n"), |             value: Setting.reserved_usernames.join("\n"), | ||||||
|           class: "h-44 mb-2" %> |             class: "h-44 w-60" %> | ||||||
|         <p class="text-sm text-gray-500"> |           <p class="text-sm text-gray-500"> | ||||||
|           One username per line |             One username per line | ||||||
|         </p> |           </p> | ||||||
|       </label> |         <% end %> | ||||||
|  |         <li> | ||||||
|  |           <p class="font-bold mb-1">Default services</p> | ||||||
|  |           <p class="text-gray-500"> | ||||||
|  |             These services are enabled for new users by default after signup. | ||||||
|  |           </p> | ||||||
|  |           <div class="flex flex-wrap gap-x-6 gap-y-2"> | ||||||
|  |             <% Setting.available_services.each do |option| %> | ||||||
|  |               <div class="md:inline-block"> | ||||||
|  |                 <%= f.check_box :default_services, | ||||||
|  |                   { multiple: true, checked: Setting.default_services.include?(option) }, | ||||||
|  |                   option, nil %> | ||||||
|  |                 <%= f.label "default_services_#{option.parameterize}", service_human_name(option) %> | ||||||
|  |               </div> | ||||||
|  |             <% end %> | ||||||
|  |           </div> | ||||||
|  |         </li> | ||||||
|  |       </ul> | ||||||
|     </section> |     </section> | ||||||
| 
 | 
 | ||||||
|     <section> |     <section> | ||||||
|  | |||||||
| @ -8,14 +8,16 @@ RSpec.describe Setting, type: :model do | |||||||
|       Setting.ejabberd_enabled = true |       Setting.ejabberd_enabled = true | ||||||
|       Setting.email_enabled = false |       Setting.email_enabled = false | ||||||
|       Setting.gitea_enabled = false |       Setting.gitea_enabled = false | ||||||
|  |       Setting.lndhub_enabled = true | ||||||
|       Setting.mastodon_enabled = true |       Setting.mastodon_enabled = true | ||||||
|       Setting.mediawiki_enabled = false |       Setting.mediawiki_enabled = false | ||||||
|  |       Setting.nostr_enabled = false | ||||||
|       Setting.remotestorage_enabled = true |       Setting.remotestorage_enabled = true | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     it "contains all enabled services" do |     it "contains all enabled services" do | ||||||
|       expect(Setting.available_services).to eq(%w[ |       expect(Setting.available_services).to eq(%w[ | ||||||
|         discourse ejabberd mastodon remotestorage |         discourse ejabberd lndhub mastodon remotestorage | ||||||
|       ]) |       ]) | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user