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

380 lines
12 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
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
2016-08-24 12:49:21 +05:30
def enabled_project_button(project, protocol)
case protocol
when 'ssh'
2018-03-17 18:26:18 +05:30
ssh_clone_button(project, append_link: false)
2016-08-24 12:49:21 +05:30
else
2018-03-17 18:26:18 +05:30
http_clone_button(project, 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-12-05 23:21:45 +05:30
css_class = ['btn']
css_class << 'active' unless disabled
2016-06-02 11:05:42 +05:30
checkbox_name = 'application_setting[enabled_oauth_sign_in_sources][]'
2018-05-09 12:01:36 +05:30
name = Gitlab::Auth::OAuth::Provider.label_for(source)
2016-06-02 11:05:42 +05:30
2018-12-05 23:21:45 +05:30
label_tag(checkbox_name, class: css_class.join(' ')) do
2016-06-02 11:05:42 +05:30
check_box_tag(checkbox_name, source, !disabled,
2018-05-09 12:01:36 +05:30
autocomplete: 'off',
id: name.tr(' ', '_')) + name
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
def repository_storages_options_for_select(selected)
2017-08-17 22:00:37 +05:30
options = Gitlab.config.repositories.storages.map do |name, storage|
2018-05-09 12:01:36 +05:30
["#{name} - #{storage['gitaly_address']}", name]
2016-08-24 12:49:21 +05:30
end
2018-03-17 18:26:18 +05:30
options_for_select(options, selected)
2016-08-24 12:49:21 +05:30
end
2017-08-17 22:00:37 +05:30
2020-03-09 13:42:32 +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
[
:admin_notification_email,
: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,
:asset_proxy_whitelist,
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,
2017-09-10 17:25:29 +05:30
:container_registry_token_expire_delay,
:default_artifacts_expire_in,
: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,
:disabled_oauth_sign_in_sources,
2019-12-04 20:38:33 +05:30
:domain_blacklist,
2017-09-10 17:25:29 +05:30
:domain_blacklist_enabled,
2019-12-04 20:38:33 +05:30
# TODO Remove domain_blacklist_raw in APIv5 (See https://gitlab.com/gitlab-org/gitlab-foss/issues/67204)
2017-09-10 17:25:29 +05:30
:domain_blacklist_raw,
2019-12-04 20:38:33 +05:30
:domain_whitelist,
# TODO Remove domain_whitelist_raw in APIv5 (See https://gitlab.com/gitlab-org/gitlab-foss/issues/67204)
2017-09-10 17:25:29 +05:30
:domain_whitelist_raw,
2019-10-12 21:52:04 +05:30
:outbound_local_requests_whitelist_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-09 13:42:32 +05:30
:force_pages_access_control,
2018-03-17 18:26:18 +05:30
:gitaly_timeout_default,
:gitaly_timeout_medium,
:gitaly_timeout_fast,
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,
: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,
: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,
2020-01-01 13:55:28 +05:30
:minimum_password_length,
2018-11-18 11:00:15 +05:30
:mirror_available,
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,
: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,
:repository_storages,
: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,
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,
2018-11-18 11:00:15 +05:30
:instance_statistics_visibility_private,
2017-09-10 17:25:29 +05:30
: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,
:snowplow_iglu_registry_url,
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,
:email_restrictions
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
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-09 13:42:32 +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
2015-04-26 12:48:37 +05:30
end
2019-12-04 20:38:33 +05:30
ApplicationSettingsHelper.prepend_if_ee('EE::ApplicationSettingsHelper') # rubocop: disable Cop/InjectEnterpriseEditionModule
# The methods in `EE::ApplicationSettingsHelper` should be available as both
# instance and class methods.
ApplicationSettingsHelper.extend_if_ee('EE::ApplicationSettingsHelper')