Class: Admin::ApplicationSettingsController

Inherits:
ApplicationController show all
Includes:
DefaultBranchProtection, IntegrationsHelper, InternalRedirect
Defined in:
app/controllers/admin/application_settings_controller.rb

Constant Summary collapse

VALID_SETTING_PANELS =
%w[general repository
ci_cd reporting metrics_and_profiling
network preferences].freeze
PARAM_JOB_ID_MAX_SIZE =

The current size of a sidekiq job’s jid is 24 characters. The size of the jid is an internal detail of Sidekiq, and they do not guarantee that it’ll stay the same. We chose 50 to give us room in case the size of the jid increases. The jid is alphanumeric, so 50 is very generous. There is a spec that ensures that the constant value is more than the size of an actual jid.

50

Constants included from Gitlab::HttpRouter::RuleContext

Gitlab::HttpRouter::RuleContext::ALLOWED_ROUTER_RULE_ACTIONS, Gitlab::HttpRouter::RuleContext::ALLOWED_ROUTER_RULE_TYPES, Gitlab::HttpRouter::RuleContext::ROUTER_RULE_ACTIONS_WITHOUT_TYPE

Constants included from StrongPaginationParams

StrongPaginationParams::PAGINATION_PARAMS

Constants included from Gitlab::Logging::CloudflareHelper

Gitlab::Logging::CloudflareHelper::CLOUDFLARE_CUSTOM_HEADERS

Constants included from Gitlab::EndpointAttributes

Gitlab::EndpointAttributes::DEFAULT_URGENCY

Constants included from Impersonation

Impersonation::SESSION_KEYS_TO_DELETE

Constants included from PreferredLanguageSwitcherHelper

PreferredLanguageSwitcherHelper::SWITCHER_MINIMUM_TRANSLATION_LEVEL

Constants included from Routing::PseudonymizationHelper

Routing::PseudonymizationHelper::PSEUDONOMIZED_GROUP, Routing::PseudonymizationHelper::PSEUDONOMIZED_ID, Routing::PseudonymizationHelper::PSEUDONOMIZED_NAMESPACE, Routing::PseudonymizationHelper::PSEUDONOMIZED_PROJECT

Constants included from ProjectsHelper

ProjectsHelper::BANNED

Constants included from Gitlab::NoCacheHeaders

Gitlab::NoCacheHeaders::DEFAULT_GITLAB_NO_CACHE_HEADERS

Instance Method Summary collapse

Methods included from DefaultBranchProtection

#normalize_default_branch_params!

Methods included from IntegrationsHelper

#add_to_slack_link, #gitlab_slack_application_data, #instance_level_integrations?, #integration_event_description, #integration_event_field_name, #integration_event_title, #integration_form_data, #integration_issue_type, #integration_list_data, #integration_overrides_data, #integration_todo_target_type, #integration_webhook_event_human_name, #integrations_help_page_path, #project_jira_issues_integration?, #scoped_edit_integration_path, #scoped_integration_path, #scoped_integrations_path, #scoped_overrides_integration_path, #scoped_reset_integration_path, #scoped_test_integration_path, #slack_integration_destroy_path

Methods included from InternalRedirect

#full_path_for_uri, #host_allowed?, #referer_path, #safe_redirect_path, #safe_redirect_path_for_url, #sanitize_redirect

Methods included from EnforcesAdminAuthentication

#authenticate_admin!, #storable_location?

Methods inherited from ApplicationController

endpoint_id_for_action, #feature_category, #handle_unverified_request, #not_found, #redirect_back_or_default, #render, #route_not_found, #urgency

Methods included from Gitlab::HttpRouter::RuleMetrics

#increment_http_router_metrics

Methods included from StrongPaginationParams

#pagination_params

Methods included from RequestPayloadLogger

#append_info_to_payload

Methods included from Gitlab::Logging::CloudflareHelper

#store_cloudflare_headers!, #valid_cloudflare_header?

Methods included from CheckRateLimit

#check_rate_limit!

Methods included from FlocOptOut

#floc_enabled?, #set_floc_opt_out_header

Methods included from Impersonation

#current_user

Methods included from InitializesCurrentUserMode

#current_user_mode

Methods included from SessionsHelper

#obfuscated_email, #remember_me_enabled?, #unconfirmed_email?, #unconfirmed_verification_email?, #verification_data, #verification_email

Methods included from SessionlessAuthentication

#authenticate_sessionless_user!, #request_authenticator, #sessionless_bypass_admin_mode!, #sessionless_sign_in, #sessionless_user?

Methods included from PreferredLanguageSwitcherHelper

#ordered_selectable_locales

Methods included from Gitlab::SearchContext::ControllerConcern

#search_context

Methods included from EnforcesTwoFactorAuthentication

#check_two_factor_requirement, #current_user_requires_two_factor?, #execute_action_for_2fa_reason, #mfa_help_page_url, #skip_two_factor?, #two_factor_authentication_required?, #two_factor_grace_period, #two_factor_grace_period_expired?, #two_factor_skippable?, #two_factor_verifier

Methods included from WorkhorseHelper

#attachment_content_disposition, #content_disposition_for_blob, #inline_content_disposition, #send_artifacts_entry, #send_dependency, #send_git_archive, #send_git_blob, #send_git_diff, #send_git_patch, #set_workhorse_internal_api_content_type, #workhorse_set_content_type!

Methods included from SafeParamsHelper

#safe_params

Methods included from PageLayoutHelper

#blank_container, #container_class, #favicon, #fluid_layout, #full_content_class, #header_title, #nav, #page_canonical_link, #page_card_attributes, #page_card_meta_tags, #page_description, #page_image, #page_itemtype, #page_title, #search_context, #sidebar, #user_status_properties

Methods included from Routing::PackagesHelper

#package_path

Methods included from Routing::PseudonymizationHelper

#masked_page_url, #masked_query_params, #masked_referrer_url, #referrer_params

Methods included from Routing::GraphqlHelper

#graphql_etag_pipeline_path, #graphql_etag_pipeline_sha_path, #graphql_etag_project_on_demand_scan_counts_path

Methods included from Routing::WikiHelper

#group_wiki_page_url, #project_wiki_page_url, #wiki_page_path, #wiki_path

Methods included from Routing::SnippetsHelper

#gitlab_dashboard_snippets_path, #gitlab_raw_snippet_blob_path, #gitlab_raw_snippet_blob_url, #gitlab_raw_snippet_path, #gitlab_raw_snippet_url, #gitlab_snippet_note_path, #gitlab_snippet_note_url, #gitlab_snippet_notes_path, #gitlab_snippet_notes_url, #gitlab_snippet_path, #gitlab_snippet_url, #gitlab_toggle_award_emoji_snippet_note_path, #gitlab_toggle_award_emoji_snippet_note_url, #gitlab_toggle_award_emoji_snippet_path, #gitlab_toggle_award_emoji_snippet_url, #preview_markdown_path, #toggle_award_emoji_personal_snippet_path, #toggle_award_emoji_project_project_snippet_path, #toggle_award_emoji_project_project_snippet_url

Methods included from Routing::PipelineSchedulesHelper

#edit_pipeline_schedule_path, #pipeline_schedule_path, #pipeline_schedules_path, #play_pipeline_schedule_path, #take_ownership_pipeline_schedule_path

Methods included from Routing::ArtifactsHelper

#artifacts_action_path, #expose_fast_artifacts_path, #fast_browse_project_job_artifacts_path, #fast_download_project_job_artifacts_path, #fast_keep_project_job_artifacts_path

Methods included from Routing::MembersHelper

#source_members_url

Methods included from Routing::Groups::MembersHelper

#approve_access_request_group_member_path, #group_member_path, #group_members_url, #leave_group_members_path, #request_access_group_members_path, #resend_invite_group_member_path

Methods included from Routing::Projects::MembersHelper

#approve_access_request_project_member_path, #leave_project_members_path, #project_member_path, #project_members_url, #request_access_project_members_path, #resend_invite_project_member_path

Methods included from Routing::ProjectsHelper

#commit_url, #commits_url, #edit_milestone_path, #environment_delete_path, #environment_path, #issue_path, #issue_url, #merge_request_path, #merge_request_url, #pipeline_job_url, #pipeline_path, #pipeline_url, #project_commits_path, #project_ref_path, #project_tree_path, #release_url, #toggle_subscription_path, #work_item_url

Methods included from API::Helpers::RelatedResourcesHelpers

#expose_path, #expose_url, #issues_available?, #mrs_available?, #project_feature_string_access_level

Methods included from ApplicationSettingsHelper

#all_protocols_enabled?, #allowed_protocols_present?, #anti_spam_service_enabled?, #deprecated_attributes, #enabled_protocol, #enabled_protocol_button, #expanded_by_default?, #external_authorization_allow_token_help_text, #external_authorization_client_certificate_help_text, #external_authorization_client_key_help_text, #external_authorization_client_pass_help_text, #external_authorization_client_url_help_text, #external_authorization_description, #external_authorization_service_attributes, #external_authorization_timeout_help_text, #external_authorization_url_help_text, #http_enabled?, #import_sources_checkboxes, #instance_clusters_enabled?, #integration_expanded?, #key_restriction_options_for_select, #kroki_available_formats, #oauth_providers_checkboxes, #pending_user_count, #registration_features_can_be_prompted?, #repository_storages_options_json, #restricted_level_checkboxes, #runner_token_expiration_interval_attributes, #sidekiq_job_limiter_mode_help_text, #sidekiq_job_limiter_modes_for_select, #signup_enabled?, #signup_form_data, #ssh_enabled?, #storage_weights, #user_oauth_applications?, #valid_runner_registrars, #visible_attributes

Methods included from ProjectsHelper

#able_to_see_forks_count?, #able_to_see_issues?, #able_to_see_merge_requests?, #any_projects?, #author_content_tag, #autodeploy_flash_notice, #badge_count, #branch_rules_path, #can_admin_associated_clusters?, #can_admin_project_member?, #can_change_visibility_level?, #can_disable_emails?, #can_push_code?, #can_set_diff_preview_in_email?, #can_view_branch_rules?, #clusters_deprecation_alert_message, #dashboard_projects_app_data, #delete_confirm_phrase, #directory?, #error_tracking_setting_project_json, #explore_projects_tab?, #external_classification_label_help_message, #fork_button_data_attributes, #hidden_issue_icon, #home_panel_data_attributes, #http_clone_url_to_repo, #import_from_bitbucket_message, #inactive_project_deletion_date, #issue_css_classes, #issue_manual_ordering_class, #last_pipeline_from_status_cache, #last_push_event, #link_to_autodeploy_doc, #link_to_data_loss_doc, #link_to_member, #link_to_member_avatar, #link_to_namespace_change_doc, #link_to_project, #load_catalog_resources, #load_pipeline_status, #localized_project_human_access, #membership_locked?, #no_password_message, #notification_data_attributes, #project_can_be_shared?, #project_classes, #project_coverage_chart_data_attributes, #project_incident_management_setting, #project_license_name, #project_permissions_panel_data, #project_title, #projects_filtered_search_and_sort_app_data, #push_to_create_project_command, #remote_mirror_setting_enabled?, #remove_fork_project_confirm_json, #remove_fork_project_description_message, #remove_fork_project_warning_message, #remove_project_message, #show_archived_project_banner?, #show_auto_devops_implicitly_enabled_banner?, #show_clusters_alert?, #show_count?, #show_dashboard_projects_welcome_page?, #show_inactive_project_deletion_banner?, #show_invalid_gpg_key_message?, #show_lfs_misconfiguration_banner?, #show_mobile_devops_project_promo?, #show_no_password_message?, #show_no_ssh_key_message?, #show_projects?, #show_terraform_banner?, #show_xcode_link?, #ssh_clone_url_to_repo, #star_count_data_attributes, #transfer_project_confirm_button, #transfer_project_message, #visibility_level_content, #visible_fork_source, #vue_fork_divergence_data, #xcode_uri_to_repo

Methods included from Gitlab::Allowable

#can?, #can_all?, #can_any?

Methods included from CompareHelper

#create_mr_button?, #create_mr_path, #project_compare_selector_data, #target_projects

Methods included from Gitlab::NoCacheHeaders

#no_cache_headers

Methods included from Gitlab::GonHelper

#add_browsersdk_tracking, #add_gon_variables, #current_organization, #default_avatar_url, #push_force_frontend_feature_flag, #push_frontend_ability, #push_frontend_feature_flag, #push_namespace_setting, #push_to_gon_attributes

Methods included from WebpackHelper

#prefetch_link_tag, #webpack_bundle_tag, #webpack_controller_bundle_tags, #webpack_entrypoint_paths, #webpack_preload_asset_tag, #webpack_public_host, #webpack_public_path

Methods included from ViteHelper

#universal_path_to_stylesheet, #universal_stylesheet_link_tag, #vite_enabled?, #vite_hmr_http_url, #vite_hmr_websocket_url, #vite_page_entrypoint_paths

Methods included from ContentSecurityPolicyPatch

#content_security_policy_with_context

Instance Method Details

#clear_repository_check_statesObject



104
105
106
107
108
109
110
111
# File 'app/controllers/admin/application_settings_controller.rb', line 104

def clear_repository_check_states
  RepositoryCheck::ClearWorker.perform_async # rubocop:disable CodeReuse/Worker

  redirect_to(
    general_admin_application_settings_path,
    notice: _('Started asynchronous removal of all repository check states.')
  )
end

#integrationsObject



54
55
56
57
58
59
60
# File 'app/controllers/admin/application_settings_controller.rb', line 54

def integrations
  return not_found unless instance_level_integrations?

  @integrations = Integration.find_or_initialize_all_non_project_specific(
    Integration.for_instance, include_instance_specific: true
  ).sort_by { |int| int.title.downcase }
end

#lets_encrypt_terms_of_serviceObject

Getting ToS url requires ‘directory` api call to Let’s Encrypt which could result in 500 error/slow rendering on settings page Because of that we use separate controller action



116
117
118
# File 'app/controllers/admin/application_settings_controller.rb', line 116

def lets_encrypt_terms_of_service
  redirect_to ::Gitlab::LetsEncrypt.terms_of_service_url
end

#reset_error_tracking_access_tokenObject



97
98
99
100
101
102
# File 'app/controllers/admin/application_settings_controller.rb', line 97

def reset_error_tracking_access_token
  @application_setting.reset_error_tracking_access_token!

  redirect_to general_admin_application_settings_path,
    notice: _('New error tracking access token has been generated!')
end

#reset_health_check_tokenObject



91
92
93
94
95
# File 'app/controllers/admin/application_settings_controller.rb', line 91

def reset_health_check_token
  @application_setting.reset_health_check_access_token!
  flash[:notice] = _('New health check access token has been generated!')
  redirect_back_or_default
end

#reset_registration_tokenObject



84
85
86
87
88
89
# File 'app/controllers/admin/application_settings_controller.rb', line 84

def reset_registration_token
  ::Ci::Runners::ResetRegistrationTokenService.new(@application_setting, current_user).execute

  flash[:notice] = _('New runners registration token has been generated!')
  redirect_to admin_runners_path
end

#slack_app_manifest_downloadObject



124
125
126
# File 'app/controllers/admin/application_settings_controller.rb', line 124

def slack_app_manifest_download
  send_data Slack::Manifest.to_json, type: :json, disposition: 'attachment', filename: 'slack_manifest.json'
end

#slack_app_manifest_shareObject



120
121
122
# File 'app/controllers/admin/application_settings_controller.rb', line 120

def slack_app_manifest_share
  redirect_to Slack::Manifest.share_url
end

#updateObject



62
63
64
# File 'app/controllers/admin/application_settings_controller.rb', line 62

def update
  perform_update
end

#usage_dataObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'app/controllers/admin/application_settings_controller.rb', line 66

def usage_data
  return not_found unless prerecorded_service_ping_data.present?

  respond_to do |format|
    format.html do
      usage_data_json = Gitlab::Json.pretty_generate(prerecorded_service_ping_data)

      render html: Gitlab::Highlight.highlight('payload.json', usage_data_json, language: 'json')
    end

    format.json do
      Gitlab::InternalEvents.track_event('usage_data_download_payload_clicked', user: current_user)

      render json: Gitlab::Json.dump(prerecorded_service_ping_data)
    end
  end
end