Make the attribute list for application settings reusable
This commit is contained in:
parent
2e483ca9e3
commit
ea1012ccb4
5 changed files with 96 additions and 110 deletions
|
@ -76,88 +76,13 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
|
|||
params.delete(:domain_blacklist_raw) if params[:domain_blacklist_file]
|
||||
|
||||
params.require(:application_setting).permit(
|
||||
application_setting_params_attributes
|
||||
visible_application_setting_attributes
|
||||
)
|
||||
end
|
||||
|
||||
def application_setting_params_attributes
|
||||
[
|
||||
:admin_notification_email,
|
||||
:after_sign_out_path,
|
||||
:after_sign_up_text,
|
||||
:akismet_api_key,
|
||||
:akismet_enabled,
|
||||
:container_registry_token_expire_delay,
|
||||
:default_artifacts_expire_in,
|
||||
:default_branch_protection,
|
||||
:default_group_visibility,
|
||||
:default_project_visibility,
|
||||
:default_projects_limit,
|
||||
:default_snippet_visibility,
|
||||
:domain_blacklist_enabled,
|
||||
def visible_application_setting_attributes
|
||||
ApplicationSettingsHelper.visible_attributes + [
|
||||
:domain_blacklist_file,
|
||||
:domain_blacklist_raw,
|
||||
:domain_whitelist_raw,
|
||||
:email_author_in_body,
|
||||
:enabled_git_access_protocol,
|
||||
:gravatar_enabled,
|
||||
:help_page_text,
|
||||
:help_page_hide_commercial_content,
|
||||
:help_page_support_url,
|
||||
:home_page_url,
|
||||
:housekeeping_bitmaps_enabled,
|
||||
:housekeeping_enabled,
|
||||
:housekeeping_full_repack_period,
|
||||
:housekeeping_gc_period,
|
||||
:housekeeping_incremental_repack_period,
|
||||
:html_emails_enabled,
|
||||
:koding_enabled,
|
||||
:koding_url,
|
||||
:password_authentication_enabled,
|
||||
:plantuml_enabled,
|
||||
:plantuml_url,
|
||||
:max_artifacts_size,
|
||||
:max_attachment_size,
|
||||
:max_pages_size,
|
||||
:metrics_enabled,
|
||||
:metrics_host,
|
||||
:metrics_method_call_threshold,
|
||||
:metrics_packet_size,
|
||||
:metrics_pool_size,
|
||||
:metrics_port,
|
||||
:metrics_sample_interval,
|
||||
:metrics_timeout,
|
||||
:performance_bar_allowed_group_id,
|
||||
:performance_bar_enabled,
|
||||
:recaptcha_enabled,
|
||||
:recaptcha_private_key,
|
||||
:recaptcha_site_key,
|
||||
:repository_checks_enabled,
|
||||
:require_two_factor_authentication,
|
||||
:session_expire_delay,
|
||||
:sign_in_text,
|
||||
:signup_enabled,
|
||||
:sentry_dsn,
|
||||
:sentry_enabled,
|
||||
:clientside_sentry_dsn,
|
||||
:clientside_sentry_enabled,
|
||||
:send_user_confirmation_email,
|
||||
:shared_runners_enabled,
|
||||
:shared_runners_text,
|
||||
:sidekiq_throttling_enabled,
|
||||
:sidekiq_throttling_factor,
|
||||
:two_factor_grace_period,
|
||||
:user_default_external,
|
||||
:user_oauth_applications,
|
||||
:unique_ips_limit_per_user,
|
||||
:unique_ips_limit_time_window,
|
||||
:unique_ips_limit_enabled,
|
||||
:version_check_enabled,
|
||||
:terminal_max_session_time,
|
||||
:polling_interval_multiplier,
|
||||
:prometheus_metrics_enabled,
|
||||
:usage_ping_enabled,
|
||||
|
||||
disabled_oauth_sign_in_sources: [],
|
||||
import_sources: [],
|
||||
repository_storages: [],
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
module ApplicationSettingsHelper
|
||||
extend self
|
||||
delegate :gravatar_enabled?,
|
||||
:signup_enabled?,
|
||||
:password_authentication_enabled?,
|
||||
|
@ -91,4 +92,88 @@ module ApplicationSettingsHelper
|
|||
def sidekiq_queue_options_for_select
|
||||
options_for_select(Sidekiq::Queue.all.map(&:name), @application_setting.sidekiq_throttling_queues)
|
||||
end
|
||||
|
||||
def visible_attributes
|
||||
[
|
||||
:admin_notification_email,
|
||||
:after_sign_out_path,
|
||||
:after_sign_up_text,
|
||||
:akismet_api_key,
|
||||
:akismet_enabled,
|
||||
:clientside_sentry_dsn,
|
||||
:clientside_sentry_enabled,
|
||||
:container_registry_token_expire_delay,
|
||||
:default_artifacts_expire_in,
|
||||
:default_branch_protection,
|
||||
:default_group_visibility,
|
||||
:default_project_visibility,
|
||||
:default_projects_limit,
|
||||
:default_snippet_visibility,
|
||||
:disabled_oauth_sign_in_sources,
|
||||
:domain_blacklist_enabled,
|
||||
:domain_blacklist_raw,
|
||||
:domain_whitelist_raw,
|
||||
:email_author_in_body,
|
||||
:enabled_git_access_protocol,
|
||||
:gravatar_enabled,
|
||||
:help_page_hide_commercial_content,
|
||||
:help_page_support_url,
|
||||
:help_page_text,
|
||||
:home_page_url,
|
||||
:housekeeping_bitmaps_enabled,
|
||||
:housekeeping_enabled,
|
||||
:housekeeping_full_repack_period,
|
||||
:housekeeping_gc_period,
|
||||
:housekeeping_incremental_repack_period,
|
||||
:html_emails_enabled,
|
||||
:import_sources,
|
||||
:koding_enabled,
|
||||
:koding_url,
|
||||
:max_artifacts_size,
|
||||
:max_attachment_size,
|
||||
:max_pages_size,
|
||||
:metrics_enabled,
|
||||
:metrics_host,
|
||||
:metrics_method_call_threshold,
|
||||
:metrics_packet_size,
|
||||
:metrics_pool_size,
|
||||
:metrics_port,
|
||||
:metrics_sample_interval,
|
||||
:metrics_timeout,
|
||||
:password_authentication_enabled,
|
||||
:performance_bar_allowed_group_id,
|
||||
:performance_bar_enabled,
|
||||
:plantuml_enabled,
|
||||
:plantuml_url,
|
||||
:polling_interval_multiplier,
|
||||
:prometheus_metrics_enabled,
|
||||
:recaptcha_enabled,
|
||||
:recaptcha_private_key,
|
||||
:recaptcha_site_key,
|
||||
:repository_checks_enabled,
|
||||
:repository_storages,
|
||||
:require_two_factor_authentication,
|
||||
:restricted_visibility_levels,
|
||||
:send_user_confirmation_email,
|
||||
:sentry_dsn,
|
||||
:sentry_enabled,
|
||||
:session_expire_delay,
|
||||
:shared_runners_enabled,
|
||||
:shared_runners_text,
|
||||
:sidekiq_throttling_enabled,
|
||||
:sidekiq_throttling_factor,
|
||||
:sidekiq_throttling_queues,
|
||||
:sign_in_text,
|
||||
:signup_enabled,
|
||||
:terminal_max_session_time,
|
||||
:two_factor_grace_period,
|
||||
:unique_ips_limit_enabled,
|
||||
:unique_ips_limit_per_user,
|
||||
:unique_ips_limit_time_window,
|
||||
:usage_ping_enabled,
|
||||
:user_default_external,
|
||||
:user_oauth_applications,
|
||||
:version_check_enabled
|
||||
]
|
||||
end
|
||||
end
|
||||
|
|
4
changelogs/unreleased/bvl-add-all-settings-to-api.yml
Normal file
4
changelogs/unreleased/bvl-add-all-settings-to-api.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Make all application-settings accessible through the API
|
||||
merge_request: 12851
|
||||
author:
|
|
@ -671,43 +671,14 @@ module API
|
|||
|
||||
class ApplicationSetting < Grape::Entity
|
||||
expose :id
|
||||
expose :default_projects_limit
|
||||
expose :signup_enabled
|
||||
expose :password_authentication_enabled
|
||||
expose :password_authentication_enabled, as: :signin_enabled
|
||||
expose :gravatar_enabled
|
||||
expose :sign_in_text
|
||||
expose :after_sign_up_text
|
||||
expose :created_at
|
||||
expose :updated_at
|
||||
expose :home_page_url
|
||||
expose :default_branch_protection
|
||||
expose(*::ApplicationSettingsHelper.visible_attributes)
|
||||
expose(:restricted_visibility_levels) do |setting, _options|
|
||||
setting.restricted_visibility_levels.map { |level| Gitlab::VisibilityLevel.string_level(level) }
|
||||
end
|
||||
expose :max_attachment_size
|
||||
expose :session_expire_delay
|
||||
expose(:default_project_visibility) { |setting, _options| Gitlab::VisibilityLevel.string_level(setting.default_project_visibility) }
|
||||
expose(:default_snippet_visibility) { |setting, _options| Gitlab::VisibilityLevel.string_level(setting.default_snippet_visibility) }
|
||||
expose(:default_group_visibility) { |setting, _options| Gitlab::VisibilityLevel.string_level(setting.default_group_visibility) }
|
||||
expose :default_artifacts_expire_in
|
||||
expose :domain_whitelist
|
||||
expose :domain_blacklist_enabled
|
||||
expose :domain_blacklist
|
||||
expose :user_oauth_applications
|
||||
expose :after_sign_out_path
|
||||
expose :container_registry_token_expire_delay
|
||||
expose :repository_storage
|
||||
expose :repository_storages
|
||||
expose :koding_enabled
|
||||
expose :koding_url
|
||||
expose :plantuml_enabled
|
||||
expose :plantuml_url
|
||||
expose :terminal_max_session_time
|
||||
expose :polling_interval_multiplier
|
||||
expose :help_page_hide_commercial_content
|
||||
expose :help_page_text
|
||||
expose :help_page_support_url
|
||||
expose :password_authentication_enabled, as: :signin_enabled
|
||||
end
|
||||
|
||||
class Release < Grape::Entity
|
||||
|
|
|
@ -174,7 +174,8 @@ module API
|
|||
optional :terminal_max_session_time, type: Integer, desc: 'Maximum time for web terminal websocket connection (in seconds). Set to 0 for unlimited time.'
|
||||
optional :polling_interval_multiplier, type: BigDecimal, desc: 'Interval multiplier used by endpoints that perform polling. Set to 0 to disable polling.'
|
||||
|
||||
at_least_one_of(*at_least_one_of_ce)
|
||||
optional(*::ApplicationSettingsHelper.visible_attributes)
|
||||
at_least_one_of(*::ApplicationSettingsHelper.visible_attributes)
|
||||
end
|
||||
put "application/settings" do
|
||||
attrs = declared_params(include_missing: false)
|
||||
|
|
Loading…
Reference in a new issue