application_settings_helper.rb 8.4 KB
Newer Older
1
module ApplicationSettingsHelper
2
  extend self
3

4
5
6
  delegate  :allow_signup?,
            :gravatar_enabled?,
            :password_authentication_enabled_for_web?,
Douwe Maan's avatar
Douwe Maan committed
7
8
            :akismet_enabled?,
            :koding_enabled?,
9
            to: :'Gitlab::CurrentSettings.current_application_settings'
10

11
  def user_oauth_applications?
12
    Gitlab::CurrentSettings.user_oauth_applications
13
14
  end

15
  def allowed_protocols_present?
16
    Gitlab::CurrentSettings.enabled_git_access_protocol.present?
17
18
19
  end

  def enabled_protocol
20
    case Gitlab::CurrentSettings.enabled_git_access_protocol
21
22
23
24
25
26
27
    when 'http'
      gitlab_config.protocol
    when 'ssh'
      'ssh'
    end
  end

28
  def enabled_project_button(project, protocol)
29
30
    case protocol
    when 'ssh'
31
      ssh_clone_button(project, append_link: false)
32
    else
33
      http_clone_button(project, append_link: false)
34
35
36
    end
  end

37
38
  # Return a group of checkboxes that use Bootstrap's button plugin for a
  # toggle button effect.
39
  def restricted_level_checkboxes(help_block_id, checkbox_name)
40
    Gitlab::VisibilityLevel.values.map do |level|
41
      checked = restricted_visibility_levels(true).include?(level)
42
      css_class = checked ? 'active' : ''
43
      tag_name = "application_setting_visibility_level_#{level}"
44

45
      label_tag(tag_name, class: css_class) do
46
47
        check_box_tag(checkbox_name, level, checked,
                      autocomplete: 'off',
48
                      'aria-describedby' => help_block_id,
49
                      id: tag_name) + visibility_level_icon(level) + visibility_level_label(level)
50
51
52
      end
    end
  end
53
54
55
56
57

  # Return a group of checkboxes that use Bootstrap's button plugin for a
  # toggle button effect.
  def import_sources_checkboxes(help_block_id)
    Gitlab::ImportSources.options.map do |name, source|
58
      checked = Gitlab::CurrentSettings.import_sources.include?(source)
59
      css_class = checked ? 'active' : ''
60
61
      checkbox_name = 'application_setting[import_sources][]'

62
      label_tag(name, class: css_class) do
63
64
        check_box_tag(checkbox_name, source, checked,
                      autocomplete: 'off',
65
66
                      'aria-describedby' => help_block_id,
                      id: name.tr(' ', '_')) + name
67
68
69
      end
    end
  end
70

71
  def oauth_providers_checkboxes
72
    button_based_providers.map do |source|
73
      disabled = Gitlab::CurrentSettings.disabled_oauth_sign_in_sources.include?(source.to_s)
74
      css_class = 'btn'
Andrei Gliga's avatar
Andrei Gliga committed
75
      css_class << ' active' unless disabled
76
      checkbox_name = 'application_setting[enabled_oauth_sign_in_sources][]'
77
      name = Gitlab::Auth::OAuth::Provider.label_for(source)
78
79

      label_tag(checkbox_name, class: css_class) do
80
        check_box_tag(checkbox_name, source, !disabled,
81
82
                      autocomplete: 'off',
                      id: name.tr(' ', '_')) + name
83
84
85
      end
    end
  end
86

87
88
89
  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]
90
    end
91
92
93
94
95
96

    [
      ['Are allowed', 0],
      *bit_size_options,
      ['Are forbidden', ApplicationSetting::FORBIDDEN_KEY_VALUE]
    ]
97
98
  end

99
  def repository_storages_options_for_select(selected)
100
    options = Gitlab.config.repositories.storages.map do |name, storage|
101
      ["#{name} - #{storage['gitaly_address']}", name]
102
103
    end

104
    options_for_select(options, selected)
105
  end
106
107
108
109

  def sidekiq_queue_options_for_select
    options_for_select(Sidekiq::Queue.all.map(&:name), @application_setting.sidekiq_throttling_queues)
  end
110

111
112
113
114
115
116
117
118
119
120
121
122
  def circuitbreaker_failure_count_help_text
    health_link = link_to(s_('AdminHealthPageLink|health page'), admin_health_check_path)
    api_link = link_to(s_('CircuitBreakerApiLink|circuitbreaker api'), help_page_path("api/repository_storage_health"))
    message = _("The number of failures of after which GitLab will completely "\
                "prevent access to the storage. The number of failures can be "\
                "reset in the admin interface: %{link_to_health_page} or using "\
                "the %{api_documentation_link}.")
    message = message % { link_to_health_page: health_link, api_documentation_link: api_link }

    message.html_safe
  end

123
124
125
126
  def circuitbreaker_access_retries_help_text
    _('The number of attempts GitLab will make to access a storage.')
  end

127
128
129
130
131
132
133
134
135
136
  def circuitbreaker_failure_reset_time_help_text
    _("The time in seconds GitLab will keep failure information. When no "\
      "failures occur during this time, information about the mount is reset.")
  end

  def circuitbreaker_storage_timeout_help_text
    _("The time in seconds GitLab will try to access storage. After this time a "\
      "timeout error will be raised.")
  end

137
138
139
140
141
  def circuitbreaker_check_interval_help_text
    _("The time in seconds between storage checks. When a previous check did "\
      "complete yet, GitLab will skip a check.")
  end

142
143
144
145
146
147
148
  def visible_attributes
    [
      :admin_notification_email,
      :after_sign_out_path,
      :after_sign_up_text,
      :akismet_api_key,
      :akismet_enabled,
149
      :authorized_keys_enabled,
150
      :auto_devops_enabled,
151
      :auto_devops_domain,
152
      :circuitbreaker_access_retries,
153
      :circuitbreaker_check_interval,
154
155
156
      :circuitbreaker_failure_count_threshold,
      :circuitbreaker_failure_reset_time,
      :circuitbreaker_storage_timeout,
157
158
159
160
161
162
163
164
165
166
167
168
169
      :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,
170
171
172
      :dsa_key_restriction,
      :ecdsa_key_restriction,
      :ed25519_key_restriction,
173
174
      :email_author_in_body,
      :enabled_git_access_protocol,
175
176
177
      :gitaly_timeout_default,
      :gitaly_timeout_medium,
      :gitaly_timeout_fast,
178
      :gravatar_enabled,
179
      :hashed_storage_enabled,
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
      :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,
204
      :pages_domain_verification_enabled,
205
      :password_authentication_enabled_for_web,
206
      :password_authentication_enabled_for_git,
207
208
209
210
211
      :performance_bar_allowed_group_id,
      :performance_bar_enabled,
      :plantuml_enabled,
      :plantuml_url,
      :polling_interval_multiplier,
212
      :project_export_enabled,
213
214
215
216
217
218
219
220
      :prometheus_metrics_enabled,
      :recaptcha_enabled,
      :recaptcha_private_key,
      :recaptcha_site_key,
      :repository_checks_enabled,
      :repository_storages,
      :require_two_factor_authentication,
      :restricted_visibility_levels,
221
      :rsa_key_restriction,
222
223
224
225
226
227
228
229
230
231
232
233
      :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,
Michael Kozono's avatar
Michael Kozono committed
234
235
236
237
238
239
240
241
242
      :throttle_unauthenticated_enabled,
      :throttle_unauthenticated_requests_per_period,
      :throttle_unauthenticated_period_in_seconds,
      :throttle_authenticated_web_enabled,
      :throttle_authenticated_web_requests_per_period,
      :throttle_authenticated_web_period_in_seconds,
      :throttle_authenticated_api_enabled,
      :throttle_authenticated_api_requests_per_period,
      :throttle_authenticated_api_period_in_seconds,
243
244
245
246
247
248
249
      :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,
250
      :version_check_enabled,
Bob Van Landuyt's avatar
Bob Van Landuyt committed
251
252
      :allow_local_requests_from_hooks_and_services,
      :enforce_terms,
253
254
      :terms,
      :mirror_available
255
256
    ]
  end
257
end