debian-mirror-gitlab/app/helpers/application_settings_helper.rb

433 lines
14 KiB
Ruby
Raw Normal View History

2018-12-05 23:21:45 +05:30
# frozen_string_literal: true
2015-04-26 12:48:37 +05:30
module ApplicationSettingsHelper
2017-09-10 17:25:29 +05:30
extend self
2018-03-17 18:26:18 +05:30
2019-12-26 22:10:19 +05:30
delegate :allow_signup?,
:gravatar_enabled?,
:password_authentication_enabled_for_web?,
:akismet_enabled?,
to: :'Gitlab::CurrentSettings.current_application_settings'
2015-04-26 12:48:37 +05:30
2015-09-11 14:41:01 +05:30
def user_oauth_applications?
2018-03-17 18:26:18 +05:30
Gitlab::CurrentSettings.user_oauth_applications
2015-09-11 14:41:01 +05:30
end
2016-08-24 12:49:21 +05:30
def allowed_protocols_present?
2018-03-17 18:26:18 +05:30
Gitlab::CurrentSettings.enabled_git_access_protocol.present?
2016-08-24 12:49:21 +05:30
end
def enabled_protocol
2018-03-17 18:26:18 +05:30
case Gitlab::CurrentSettings.enabled_git_access_protocol
2016-08-24 12:49:21 +05:30
when 'http'
2019-02-15 15:39:39 +05:30
Gitlab.config.gitlab.protocol
2016-08-24 12:49:21 +05:30
when 'ssh'
'ssh'
end
end
2021-03-11 19:13:27 +05:30
def kroki_available_formats
ApplicationSetting.kroki_formats_attributes.map do |key, value|
{
name: "kroki_formats_#{key}",
label: value[:label],
value: @application_setting.kroki_formats[key] || false
}
end
end
2020-06-23 00:09:42 +05:30
def storage_weights
2021-04-17 20:07:23 +05:30
Gitlab.config.repositories.storages.keys.each_with_object(OpenStruct.new) do |storage, weights|
weights[storage.to_sym] = @application_setting.repository_storages_weighted[storage] || 0
2020-06-23 00:09:42 +05:30
end
end
2019-02-15 15:39:39 +05:30
def all_protocols_enabled?
Gitlab::CurrentSettings.enabled_git_access_protocol.blank?
end
def ssh_enabled?
all_protocols_enabled? || enabled_protocol == 'ssh'
end
def http_enabled?
all_protocols_enabled? || Gitlab::CurrentSettings.enabled_git_access_protocol == 'http'
end
2021-02-22 17:27:13 +05:30
def enabled_protocol_button(container, protocol)
2016-08-24 12:49:21 +05:30
case protocol
when 'ssh'
2021-02-22 17:27:13 +05:30
ssh_clone_button(container, append_link: false)
2016-08-24 12:49:21 +05:30
else
2021-02-22 17:27:13 +05:30
http_clone_button(container, append_link: false)
2016-08-24 12:49:21 +05:30
end
end
2015-04-26 12:48:37 +05:30
# Return a group of checkboxes that use Bootstrap's button plugin for a
# toggle button effect.
2018-11-08 19:23:39 +05:30
def restricted_level_checkboxes(help_block_id, checkbox_name, options = {})
2017-09-10 17:25:29 +05:30
Gitlab::VisibilityLevel.values.map do |level|
2015-04-26 12:48:37 +05:30
checked = restricted_visibility_levels(true).include?(level)
2017-08-17 22:00:37 +05:30
css_class = checked ? 'active' : ''
2017-09-10 17:25:29 +05:30
tag_name = "application_setting_visibility_level_#{level}"
2015-04-26 12:48:37 +05:30
2017-09-10 17:25:29 +05:30
label_tag(tag_name, class: css_class) do
2015-04-26 12:48:37 +05:30
check_box_tag(checkbox_name, level, checked,
autocomplete: 'off',
2017-08-17 22:00:37 +05:30
'aria-describedby' => help_block_id,
2018-11-08 19:23:39 +05:30
'class' => options[:class],
2017-09-10 17:25:29 +05:30
id: tag_name) + visibility_level_icon(level) + visibility_level_label(level)
2015-04-26 12:48:37 +05:30
end
end
end
2015-09-25 12:07:36 +05:30
# Return a group of checkboxes that use Bootstrap's button plugin for a
# toggle button effect.
2018-11-08 19:23:39 +05:30
def import_sources_checkboxes(help_block_id, options = {})
2015-09-25 12:07:36 +05:30
Gitlab::ImportSources.options.map do |name, source|
2019-09-30 21:07:59 +05:30
checked = @application_setting.import_sources.include?(source)
2017-08-17 22:00:37 +05:30
css_class = checked ? 'active' : ''
2015-09-25 12:07:36 +05:30
checkbox_name = 'application_setting[import_sources][]'
2017-08-17 22:00:37 +05:30
label_tag(name, class: css_class) do
2015-09-25 12:07:36 +05:30
check_box_tag(checkbox_name, source, checked,
autocomplete: 'off',
2017-08-17 22:00:37 +05:30
'aria-describedby' => help_block_id,
2018-11-08 19:23:39 +05:30
'class' => options[:class],
2017-08-17 22:00:37 +05:30
id: name.tr(' ', '_')) + name
2015-09-25 12:07:36 +05:30
end
end
end
2016-06-02 11:05:42 +05:30
def oauth_providers_checkboxes
button_based_providers.map do |source|
2019-09-30 21:07:59 +05:30
disabled = @application_setting.disabled_oauth_sign_in_sources.include?(source.to_s)
2018-05-09 12:01:36 +05:30
name = Gitlab::Auth::OAuth::Provider.label_for(source)
2021-04-17 20:07:23 +05:30
checkbox_name = 'application_setting[enabled_oauth_sign_in_sources][]'
checkbox_id = "application_setting_enabled_oauth_sign_in_sources_#{name.parameterize(separator: '_')}"
2016-06-02 11:05:42 +05:30
2021-04-17 20:07:23 +05:30
content_tag :div, class: 'form-check' do
check_box_tag(
checkbox_name,
source,
!disabled,
autocomplete: 'off',
id: checkbox_id,
class: 'form-check-input'
) +
label_tag(checkbox_id, name, class: 'form-check-label')
2016-06-02 11:05:42 +05:30
end
end
end
2016-08-24 12:49:21 +05:30
2018-03-17 18:26:18 +05:30
def key_restriction_options_for_select(type)
bit_size_options = Gitlab::SSHPublicKey.supported_sizes(type).map do |bits|
["Must be at least #{bits} bits", bits]
end
[
['Are allowed', 0],
*bit_size_options,
['Are forbidden', ApplicationSetting::FORBIDDEN_KEY_VALUE]
]
end
2020-03-13 15:44:24 +05:30
def repository_storages_options_json
options = Gitlab.config.repositories.storages.map do |name, storage|
{
label: "#{name} - #{storage['gitaly_address']}",
value: name
}
end
options.to_json
end
2019-07-07 11:18:12 +05:30
def external_authorization_description
_("If enabled, access to projects will be validated on an external service"\
" using their classification label.")
end
def external_authorization_timeout_help_text
_("Time in seconds GitLab will wait for a response from the external "\
"service. When the service does not respond in time, access will be "\
"denied.")
end
def external_authorization_url_help_text
_("When leaving the URL blank, classification labels can still be "\
"specified without disabling cross project features or performing "\
"external authorization checks.")
end
def external_authorization_client_certificate_help_text
_("The X509 Certificate to use when mutual TLS is required to communicate "\
"with the external authorization service. If left blank, the server "\
"certificate is still validated when accessing over HTTPS.")
end
def external_authorization_client_key_help_text
_("The private key to use when a client certificate is provided. This value "\
"is encrypted at rest.")
end
def external_authorization_client_pass_help_text
_("The passphrase required to decrypt the private key. This is optional "\
"and the value is encrypted at rest.")
end
2017-09-10 17:25:29 +05:30
def visible_attributes
[
2021-01-03 14:25:43 +05:30
:abuse_notification_email,
2017-09-10 17:25:29 +05:30
:after_sign_out_path,
:after_sign_up_text,
:akismet_api_key,
:akismet_enabled,
2018-11-18 11:00:15 +05:30
:allow_local_requests_from_hooks_and_services,
2019-10-12 21:52:04 +05:30
:allow_local_requests_from_web_hooks_and_services,
:allow_local_requests_from_system_hooks,
2019-06-05 12:25:43 +05:30
:dns_rebinding_protection_enabled,
2018-12-13 13:39:08 +05:30
:archive_builds_in_human_readable,
2019-09-04 21:01:54 +05:30
:asset_proxy_enabled,
:asset_proxy_secret_key,
:asset_proxy_url,
2021-03-11 19:13:27 +05:30
:asset_proxy_allowlist,
2019-12-04 20:38:33 +05:30
:static_objects_external_storage_auth_token,
:static_objects_external_storage_url,
2018-03-17 18:26:18 +05:30
:authorized_keys_enabled,
:auto_devops_enabled,
:auto_devops_domain,
2020-04-22 19:07:51 +05:30
:container_expiration_policies_enable_historic_entries,
2017-09-10 17:25:29 +05:30
:container_registry_token_expire_delay,
:default_artifacts_expire_in,
2020-07-28 23:09:34 +05:30
:default_branch_name,
2017-09-10 17:25:29 +05:30
:default_branch_protection,
2019-12-26 22:10:19 +05:30
:default_ci_config_path,
2017-09-10 17:25:29 +05:30
:default_group_visibility,
2019-07-07 11:18:12 +05:30
:default_project_creation,
2017-09-10 17:25:29 +05:30
:default_project_visibility,
:default_projects_limit,
:default_snippet_visibility,
2021-02-22 17:27:13 +05:30
:disable_feed_token,
2017-09-10 17:25:29 +05:30
:disabled_oauth_sign_in_sources,
2021-01-29 00:20:46 +05:30
:domain_denylist,
:domain_denylist_enabled,
# TODO Remove domain_denylist_raw in APIv5 (See https://gitlab.com/gitlab-org/gitlab-foss/issues/67204)
:domain_denylist_raw,
:domain_allowlist,
# TODO Remove domain_allowlist_raw in APIv5 (See https://gitlab.com/gitlab-org/gitlab-foss/issues/67204)
:domain_allowlist_raw,
:outbound_local_requests_allowlist_raw,
2018-03-17 18:26:18 +05:30
:dsa_key_restriction,
:ecdsa_key_restriction,
:ed25519_key_restriction,
2019-12-26 22:10:19 +05:30
:eks_integration_enabled,
:eks_account_id,
:eks_access_key_id,
:eks_secret_access_key,
2017-09-10 17:25:29 +05:30
:email_author_in_body,
:enabled_git_access_protocol,
2018-11-18 11:00:15 +05:30
:enforce_terms,
2019-03-02 22:35:43 +05:30
:first_day_of_week,
2020-03-13 15:44:24 +05:30
:force_pages_access_control,
2018-03-17 18:26:18 +05:30
:gitaly_timeout_default,
:gitaly_timeout_medium,
:gitaly_timeout_fast,
2020-11-24 15:15:51 +05:30
:gitpod_enabled,
:gitpod_url,
2019-09-30 21:07:59 +05:30
:grafana_enabled,
:grafana_url,
2017-09-10 17:25:29 +05:30
:gravatar_enabled,
2018-03-17 18:26:18 +05:30
:hashed_storage_enabled,
2017-09-10 17:25:29 +05:30
:help_page_hide_commercial_content,
:help_page_support_url,
2021-01-03 14:25:43 +05:30
:help_page_documentation_base_url,
2017-09-10 17:25:29 +05:30
:help_page_text,
2018-11-18 11:00:15 +05:30
:hide_third_party_offers,
2017-09-10 17:25:29 +05:30
:home_page_url,
:housekeeping_bitmaps_enabled,
:housekeeping_enabled,
:housekeeping_full_repack_period,
:housekeeping_gc_period,
:housekeeping_incremental_repack_period,
:html_emails_enabled,
:import_sources,
2021-04-17 20:07:23 +05:30
:in_product_marketing_emails_enabled,
2021-03-08 18:12:59 +05:30
:invisible_captcha_enabled,
2017-09-10 17:25:29 +05:30
:max_artifacts_size,
:max_attachment_size,
2020-06-23 00:09:42 +05:30
:max_import_size,
2017-09-10 17:25:29 +05:30
:max_pages_size,
:metrics_method_call_threshold,
2020-01-01 13:55:28 +05:30
:minimum_password_length,
2018-11-18 11:00:15 +05:30
:mirror_available,
2020-07-28 23:09:34 +05:30
:notify_on_unknown_sign_in,
2018-03-17 18:26:18 +05:30
:pages_domain_verification_enabled,
:password_authentication_enabled_for_web,
:password_authentication_enabled_for_git,
2018-11-08 19:23:39 +05:30
:performance_bar_allowed_group_path,
2017-09-10 17:25:29 +05:30
:performance_bar_enabled,
2021-02-22 17:27:13 +05:30
:personal_access_token_prefix,
:kroki_enabled,
:kroki_url,
2021-03-11 19:13:27 +05:30
:kroki_formats,
2017-09-10 17:25:29 +05:30
:plantuml_enabled,
:plantuml_url,
:polling_interval_multiplier,
2018-03-17 18:26:18 +05:30
:project_export_enabled,
2017-09-10 17:25:29 +05:30
:prometheus_metrics_enabled,
:recaptcha_enabled,
:recaptcha_private_key,
:recaptcha_site_key,
2019-09-04 21:01:54 +05:30
:login_recaptcha_protection_enabled,
2018-11-20 20:47:30 +05:30
:receive_max_input_size,
2017-09-10 17:25:29 +05:30
:repository_checks_enabled,
2020-08-09 18:53:13 +05:30
:repository_storages_weighted,
2021-01-03 14:25:43 +05:30
:require_admin_approval_after_user_signup,
2017-09-10 17:25:29 +05:30
:require_two_factor_authentication,
:restricted_visibility_levels,
2018-03-17 18:26:18 +05:30
:rsa_key_restriction,
2017-09-10 17:25:29 +05:30
:send_user_confirmation_email,
:session_expire_delay,
:shared_runners_enabled,
:shared_runners_text,
:sign_in_text,
:signup_enabled,
2019-12-26 22:10:19 +05:30
:sourcegraph_enabled,
:sourcegraph_url,
:sourcegraph_public_only,
2020-06-23 00:09:42 +05:30
:spam_check_endpoint_enabled,
:spam_check_endpoint_url,
2017-09-10 17:25:29 +05:30
:terminal_max_session_time,
2018-11-18 11:00:15 +05:30
:terms,
2018-03-17 18:26:18 +05:30
:throttle_authenticated_api_enabled,
:throttle_authenticated_api_period_in_seconds,
2018-11-18 11:00:15 +05:30
:throttle_authenticated_api_requests_per_period,
:throttle_authenticated_web_enabled,
:throttle_authenticated_web_period_in_seconds,
:throttle_authenticated_web_requests_per_period,
:throttle_unauthenticated_enabled,
:throttle_unauthenticated_period_in_seconds,
:throttle_unauthenticated_requests_per_period,
2019-12-21 20:55:43 +05:30
:throttle_protected_paths_enabled,
:throttle_protected_paths_period_in_seconds,
:throttle_protected_paths_requests_per_period,
:protected_paths_raw,
2019-09-30 21:07:59 +05:30
:time_tracking_limit_to_hours,
2017-09-10 17:25:29 +05:30
:two_factor_grace_period,
:unique_ips_limit_enabled,
:unique_ips_limit_per_user,
:unique_ips_limit_time_window,
:usage_ping_enabled,
:user_default_external,
2018-11-20 20:47:30 +05:30
:user_show_add_ssh_key_message,
:user_default_internal_regex,
2017-09-10 17:25:29 +05:30
:user_oauth_applications,
2018-03-26 14:24:53 +05:30
:version_check_enabled,
2018-12-05 23:21:45 +05:30
:web_ide_clientside_preview_enabled,
2018-12-13 13:39:08 +05:30
:diff_max_patch_bytes,
2019-02-15 15:39:39 +05:30
:commit_email_hostname,
2019-03-02 22:35:43 +05:30
:protected_ci_variables,
2019-10-12 21:52:04 +05:30
:local_markdown_version,
:snowplow_collector_hostname,
:snowplow_cookie_domain,
:snowplow_enabled,
2019-12-26 22:10:19 +05:30
:snowplow_app_id,
2019-12-21 20:55:43 +05:30
:push_event_hooks_limit,
:push_event_activities_limit,
2020-01-01 13:55:28 +05:30
:custom_http_clone_url_root,
2020-04-08 14:13:33 +05:30
:snippet_size_limit,
:email_restrictions_enabled,
2020-05-24 23:13:21 +05:30
:email_restrictions,
:issues_create_limit,
2021-03-11 19:13:27 +05:30
:notes_create_limit,
:notes_create_limit_allowlist_raw,
2020-07-28 23:09:34 +05:30
:raw_blob_request_limit,
:project_import_limit,
:project_export_limit,
:project_download_export_limit,
:group_import_limit,
:group_export_limit,
2020-10-24 23:57:45 +05:30
:group_download_export_limit,
2020-11-24 15:15:51 +05:30
:wiki_page_max_content_bytes,
2021-03-08 18:12:59 +05:30
:container_registry_delete_tags_service_timeout,
2021-03-11 19:13:27 +05:30
:rate_limiting_response_text,
:container_registry_expiration_policies_worker_capacity,
:container_registry_cleanup_tags_service_max_list_size,
:keep_latest_artifact
2017-09-10 17:25:29 +05:30
]
end
2018-12-05 23:21:45 +05:30
2019-07-07 11:18:12 +05:30
def external_authorization_service_attributes
[
:external_auth_client_cert,
:external_auth_client_key,
:external_auth_client_key_pass,
:external_authorization_service_default_label,
:external_authorization_service_enabled,
:external_authorization_service_timeout,
:external_authorization_service_url
]
end
2021-03-11 19:13:27 +05:30
# ok to remove in REST API v5
2021-01-03 14:25:43 +05:30
def deprecated_attributes
[
2021-03-11 19:13:27 +05:30
:admin_notification_email,
:asset_proxy_whitelist
2021-01-03 14:25:43 +05:30
]
end
2018-12-05 23:21:45 +05:30
def expanded_by_default?
Rails.env.test?
end
2019-07-31 22:56:46 +05:30
2019-12-26 22:10:19 +05:30
def integration_expanded?(substring)
@application_setting.errors.any? { |k| k.to_s.start_with?(substring) }
end
2019-07-31 22:56:46 +05:30
def instance_clusters_enabled?
can?(current_user, :read_cluster, Clusters::Instance.new)
end
2019-12-21 20:55:43 +05:30
def omnibus_protected_paths_throttle?
Rack::Attack.throttles.key?('protected paths')
end
2020-03-13 15:44:24 +05:30
def self_monitoring_project_data
{
'create_self_monitoring_project_path' =>
create_self_monitoring_project_admin_application_settings_path,
'status_create_self_monitoring_project_path' =>
status_create_self_monitoring_project_admin_application_settings_path,
'delete_self_monitoring_project_path' =>
delete_self_monitoring_project_admin_application_settings_path,
'status_delete_self_monitoring_project_path' =>
status_delete_self_monitoring_project_admin_application_settings_path,
'self_monitoring_project_exists' =>
Gitlab::CurrentSettings.self_monitoring_project.present?.to_s,
'self_monitoring_project_full_path' =>
Gitlab::CurrentSettings.self_monitoring_project&.full_path
}
end
2021-01-03 14:25:43 +05:30
def show_documentation_base_url_field?
Feature.enabled?(:help_page_documentation_redirect)
end
2021-01-29 00:20:46 +05:30
def signup_enabled?
!!Gitlab::CurrentSettings.signup_enabled
end
2015-04-26 12:48:37 +05:30
end
2019-12-04 20:38:33 +05:30
2020-05-24 23:13:21 +05:30
ApplicationSettingsHelper.prepend_if_ee('EE::ApplicationSettingsHelper')
2019-12-04 20:38:33 +05:30
# The methods in `EE::ApplicationSettingsHelper` should be available as both
# instance and class methods.
ApplicationSettingsHelper.extend_if_ee('EE::ApplicationSettingsHelper')