Class: Admin::ApplicationSettingsController

Inherits:
ApplicationController show all
Includes:
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 inherited from ApplicationController

ApplicationController::DEFAULT_GITLAB_CACHE_CONTROL

Constants included from Gitlab::Logging::CloudflareHelper

Gitlab::Logging::CloudflareHelper::CLOUDFLARE_CUSTOM_HEADERS

Constants included from Gitlab::NoCacheHeaders

Gitlab::NoCacheHeaders::DEFAULT_GITLAB_NO_CACHE_HEADERS

Instance Method Summary collapse

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

#not_found, #redirect_back_or_default, #render, #route_not_found

Methods included from Gitlab::Utils::StrongMemoize

#clear_memoization, #strong_memoize, #strong_memoized?

Methods included from Gitlab::Logging::CloudflareHelper

#store_cloudflare_headers!, #valid_cloudflare_header?

Methods included from Impersonation

#current_user

Methods included from InitializesCurrentUserMode

#current_user_mode

Methods included from Gitlab::Experimentation::ControllerConcern

#experiment_enabled?, #experiment_tracking_category_and_group, #frontend_experimentation_tracking_data, #record_experiment_user, #set_experimentation_subject_id_cookie, #track_experiment_event

Methods included from SessionsHelper

#limit_session_time, #unconfirmed_email?

Methods included from SessionlessAuthentication

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

Methods included from Gitlab::SearchContext::ControllerConcern

#search_context

Methods included from EnforcesTwoFactorAuthentication

#check_two_factor_requirement, #current_user_requires_two_factor?, #skip_two_factor?, #two_factor_authentication_reason, #two_factor_authentication_required?, #two_factor_grace_period, #two_factor_grace_period_expired?, #two_factor_skippable?, #two_factor_verifier

Methods included from WorkhorseHelper

#send_artifacts_entry, #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, #header_title, #nav, #page_card_attributes, #page_card_meta_tags, #page_description, #page_image, #page_title, #search_context, #sidebar

Methods included from GitlabRoutingHelper

#approve_access_request_group_member_path, #approve_access_request_project_member_path, #artifacts_action_path, #commit_url, #commits_url, #edit_milestone_path, #edit_pipeline_schedule_path, #environment_delete_path, #environment_metrics_path, #environment_path, #expose_fast_artifacts_path, #fast_browse_project_job_artifacts_path, #fast_download_project_job_artifacts_path, #fast_keep_project_job_artifacts_path, #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, #group_member_path, #group_members_url, #issue_path, #issue_url, #leave_group_members_path, #leave_project_members_path, #merge_request_path, #merge_request_url, #pipeline_job_url, #pipeline_path, #pipeline_schedule_path, #pipeline_schedules_path, #pipeline_url, #play_pipeline_schedule_path, #preview_markdown_path, #project_commits_path, #project_member_path, #project_members_url, #project_ref_path, #project_tree_path, #request_access_group_members_path, #request_access_project_members_path, #resend_invite_group_member_path, #resend_invite_project_member_path, #take_ownership_pipeline_schedule_path, #toggle_award_emoji_personal_snippet_path, #toggle_award_emoji_project_project_snippet_path, #toggle_award_emoji_project_project_snippet_url, #toggle_subscription_path, #wiki_page_path, #wiki_path

Methods included from API::Helpers::RelatedResourcesHelpers

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

Methods included from Gitlab::NoCacheHeaders

#no_cache_headers

Methods included from Gitlab::GonHelper

#add_gon_variables, #default_avatar_url, #push_frontend_feature_flag

Methods included from WebpackHelper

#webpack_bundle_tag, #webpack_controller_bundle_tags, #webpack_entrypoint_paths, #webpack_public_host, #webpack_public_path

Methods included from StartupCssHelper

#use_startup_css?

Instance Method Details

#clear_repository_check_statesObject


66
67
68
69
70
71
72
73
# File 'app/controllers/admin/application_settings_controller.rb', line 66

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

#create_self_monitoring_projectObject

Specs are in spec/requests/self_monitoring_project_spec.rb


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

def create_self_monitoring_project
  job_id = SelfMonitoringProjectCreateWorker.perform_async # rubocop:disable CodeReuse/Worker

  render status: :accepted, json: {
    job_id: job_id,
    monitor_status: status_create_self_monitoring_project_admin_application_settings_path
  }
end

#delete_self_monitoring_projectObject

Specs are in spec/requests/self_monitoring_project_spec.rb


122
123
124
125
126
127
128
129
# File 'app/controllers/admin/application_settings_controller.rb', line 122

def delete_self_monitoring_project
  job_id = SelfMonitoringProjectDeleteWorker.perform_async # rubocop:disable CodeReuse/Worker

  render status: :accepted, json: {
    job_id: job_id,
    monitor_status: status_delete_self_monitoring_project_admin_application_settings_path
  }
end

#integrationsObject


34
35
36
# File 'app/controllers/admin/application_settings_controller.rb', line 34

def integrations
  @integrations = Service.find_or_initialize_all(Service.for_instance).sort_by(&:title)
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


78
79
80
# File 'app/controllers/admin/application_settings_controller.rb', line 78

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

#reset_health_check_tokenObject


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

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


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

def reset_registration_token
  @application_setting.reset_runners_registration_token!

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

#status_create_self_monitoring_projectObject

Specs are in spec/requests/self_monitoring_project_spec.rb


93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'app/controllers/admin/application_settings_controller.rb', line 93

def status_create_self_monitoring_project
  job_id = params[:job_id].to_s

  unless job_id.length <= PARAM_JOB_ID_MAX_SIZE
    return render status: :bad_request, json: {
      message: _('Parameter "job_id" cannot exceed length of %{job_id_max_size}' %
        { job_id_max_size: PARAM_JOB_ID_MAX_SIZE })
    }
  end

  if SelfMonitoringProjectCreateWorker.in_progress?(job_id) # rubocop:disable CodeReuse/Worker
    ::Gitlab::PollingInterval.set_header(response, interval: 3_000)

    return render status: :accepted, json: {
      message: _('Job to create self-monitoring project is in progress')
    }
  end

  if @application_setting.self_monitoring_project_id.present?
    return render status: :ok, json: self_monitoring_data
  end

  render status: :bad_request, json: {
    message: _('Self-monitoring project does not exist. Please check logs ' \
      'for any error messages')
  }
end

#status_delete_self_monitoring_projectObject

Specs are in spec/requests/self_monitoring_project_spec.rb


132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'app/controllers/admin/application_settings_controller.rb', line 132

def status_delete_self_monitoring_project
  job_id = params[:job_id].to_s

  unless job_id.length <= PARAM_JOB_ID_MAX_SIZE
    return render status: :bad_request, json: {
      message: _('Parameter "job_id" cannot exceed length of %{job_id_max_size}' %
        { job_id_max_size: PARAM_JOB_ID_MAX_SIZE })
    }
  end

  if SelfMonitoringProjectDeleteWorker.in_progress?(job_id) # rubocop:disable CodeReuse/Worker
    ::Gitlab::PollingInterval.set_header(response, interval: 3_000)

    return render status: :accepted, json: {
      message: _('Job to delete self-monitoring project is in progress')
    }
  end

  if @application_setting.self_monitoring_project_id.nil?
    return render status: :ok, json: {
      message: _('Self-monitoring project has been successfully deleted')
    }
  end

  render status: :bad_request, json: {
    message: _('Self-monitoring project was not deleted. Please check logs ' \
      'for any error messages')
  }
end

#updateObject


38
39
40
# File 'app/controllers/admin/application_settings_controller.rb', line 38

def update
  perform_update
end

#usage_dataObject


42
43
44
45
46
47
48
49
50
51
# File 'app/controllers/admin/application_settings_controller.rb', line 42

def usage_data
  respond_to do |format|
    format.html do
      usage_data_json = Gitlab::Json.pretty_generate(Gitlab::UsageData.data)

      render html: Gitlab::Highlight.highlight('payload.json', usage_data_json, language: 'json')
    end
    format.json { render json: Gitlab::UsageData.to_json }
  end
end