Merge branch 'bvl-add-all-settings-to-api' into 'master'
Add all ApplicationSettings attributes to the API See merge request !12851
This commit is contained in:
commit
02b25598cb
|
@ -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
|
||||
|
|
|
@ -315,7 +315,9 @@ class ApplicationSetting < ActiveRecord::Base
|
|||
Array(read_attribute(:repository_storages))
|
||||
end
|
||||
|
||||
# DEPRECATED
|
||||
# repository_storage is still required in the API. Remove in 9.0
|
||||
# Still used in API v3
|
||||
def repository_storage
|
||||
repository_storages.first
|
||||
end
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Make all application-settings accessible through the API
|
||||
merge_request: 12851
|
||||
author:
|
|
@ -42,7 +42,6 @@ Example response:
|
|||
"gravatar_enabled" : true,
|
||||
"sign_in_text" : null,
|
||||
"container_registry_token_expire_delay": 5,
|
||||
"repository_storage": "default",
|
||||
"repository_storages": ["default"],
|
||||
"koding_enabled": false,
|
||||
"koding_url": null,
|
||||
|
@ -81,7 +80,6 @@ PUT /application/settings
|
|||
| `after_sign_out_path` | string | no | Where to redirect users after logout |
|
||||
| `container_registry_token_expire_delay` | integer | no | Container Registry token duration in minutes |
|
||||
| `repository_storages` | array of strings | no | A list of names of enabled storage paths, taken from `gitlab.yml`. New projects will be created in one of these stores, chosen at random. |
|
||||
| `repository_storage` | string | no | The first entry in `repository_storages`. Deprecated, but retained for compatibility reasons |
|
||||
| `enabled_git_access_protocol` | string | no | Enabled protocols for Git access. Allowed values are: `ssh`, `http`, and `nil` to allow both protocols. |
|
||||
| `koding_enabled` | boolean | no | Enable Koding integration. Default is `false`. |
|
||||
| `koding_url` | string | yes (if `koding_enabled` is `true`) | The Koding instance URL for integration. |
|
||||
|
@ -121,7 +119,7 @@ Example response:
|
|||
"user_oauth_applications": true,
|
||||
"after_sign_out_path": "",
|
||||
"container_registry_token_expire_delay": 5,
|
||||
"repository_storage": "default",
|
||||
"repository_storages": ["default"],
|
||||
"koding_enabled": false,
|
||||
"koding_url": null,
|
||||
"plantuml_enabled": false,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -20,59 +20,6 @@ module API
|
|||
success Entities::ApplicationSetting
|
||||
end
|
||||
params do
|
||||
# CE
|
||||
at_least_one_of_ce = [
|
||||
:admin_notification_email,
|
||||
:after_sign_out_path,
|
||||
:after_sign_up_text,
|
||||
: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,
|
||||
:disabled_oauth_sign_in_sources,
|
||||
:domain_blacklist_enabled,
|
||||
:domain_whitelist,
|
||||
:email_author_in_body,
|
||||
:enabled_git_access_protocol,
|
||||
:gravatar_enabled,
|
||||
:help_page_hide_commercial_content,
|
||||
:help_page_text,
|
||||
:help_page_support_url,
|
||||
:home_page_url,
|
||||
:housekeeping_enabled,
|
||||
:html_emails_enabled,
|
||||
:import_sources,
|
||||
:koding_enabled,
|
||||
:max_artifacts_size,
|
||||
:max_attachment_size,
|
||||
:max_pages_size,
|
||||
:metrics_enabled,
|
||||
:plantuml_enabled,
|
||||
:polling_interval_multiplier,
|
||||
:recaptcha_enabled,
|
||||
:repository_checks_enabled,
|
||||
:repository_storage,
|
||||
:require_two_factor_authentication,
|
||||
:restricted_visibility_levels,
|
||||
:send_user_confirmation_email,
|
||||
:sentry_enabled,
|
||||
:clientside_sentry_enabled,
|
||||
:session_expire_delay,
|
||||
:shared_runners_enabled,
|
||||
:sidekiq_throttling_enabled,
|
||||
:sign_in_text,
|
||||
:password_authentication_enabled,
|
||||
:signin_enabled,
|
||||
:signup_enabled,
|
||||
:terminal_max_session_time,
|
||||
:user_default_external,
|
||||
:user_oauth_applications,
|
||||
:version_check_enabled
|
||||
]
|
||||
optional :default_branch_protection, type: Integer, values: [0, 1, 2], desc: 'Determine if developers can push to master'
|
||||
optional :default_project_visibility, type: String, values: Gitlab::VisibilityLevel.string_values, desc: 'The default project visibility'
|
||||
optional :default_snippet_visibility, type: String, values: Gitlab::VisibilityLevel.string_values, desc: 'The default snippet visibility'
|
||||
|
@ -151,7 +98,7 @@ module API
|
|||
given clientside_sentry_enabled: ->(val) { val } do
|
||||
requires :clientside_sentry_dsn, type: String, desc: 'Clientside Sentry Data Source Name'
|
||||
end
|
||||
optional :repository_storage, type: String, desc: 'Storage paths for new projects'
|
||||
optional :repository_storages, type: Array[String], desc: 'Storage paths for new projects'
|
||||
optional :repository_checks_enabled, type: Boolean, desc: "GitLab will periodically run 'git fsck' in all project and wiki repositories to look for silent disk corruption issues."
|
||||
optional :koding_enabled, type: Boolean, desc: 'Enable Koding'
|
||||
given koding_enabled: ->(val) { val } do
|
||||
|
@ -174,7 +121,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)
|
||||
|
|
|
@ -11,7 +11,7 @@ describe API::Settings, 'Settings' do
|
|||
expect(json_response).to be_an Hash
|
||||
expect(json_response['default_projects_limit']).to eq(42)
|
||||
expect(json_response['password_authentication_enabled']).to be_truthy
|
||||
expect(json_response['repository_storage']).to eq('default')
|
||||
expect(json_response['repository_storages']).to eq(['default'])
|
||||
expect(json_response['koding_enabled']).to be_falsey
|
||||
expect(json_response['koding_url']).to be_nil
|
||||
expect(json_response['plantuml_enabled']).to be_falsey
|
||||
|
@ -33,7 +33,7 @@ describe API::Settings, 'Settings' do
|
|||
put api("/application/settings", admin),
|
||||
default_projects_limit: 3,
|
||||
password_authentication_enabled: false,
|
||||
repository_storage: 'custom',
|
||||
repository_storages: ['custom'],
|
||||
koding_enabled: true,
|
||||
koding_url: 'http://koding.example.com',
|
||||
plantuml_enabled: true,
|
||||
|
@ -47,7 +47,6 @@ describe API::Settings, 'Settings' do
|
|||
expect(response).to have_http_status(200)
|
||||
expect(json_response['default_projects_limit']).to eq(3)
|
||||
expect(json_response['password_authentication_enabled']).to be_falsey
|
||||
expect(json_response['repository_storage']).to eq('custom')
|
||||
expect(json_response['repository_storages']).to eq(['custom'])
|
||||
expect(json_response['koding_enabled']).to be_truthy
|
||||
expect(json_response['koding_url']).to eq('http://koding.example.com')
|
||||
|
|
Loading…
Reference in New Issue