settings.go

  1//
  2// Copyright 2017, Sander van Harmelen
  3//
  4// Licensed under the Apache License, Version 2.0 (the "License");
  5// you may not use this file except in compliance with the License.
  6// You may obtain a copy of the License at
  7//
  8//     http://www.apache.org/licenses/LICENSE-2.0
  9//
 10// Unless required by applicable law or agreed to in writing, software
 11// distributed under the License is distributed on an "AS IS" BASIS,
 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13// See the License for the specific language governing permissions and
 14// limitations under the License.
 15//
 16
 17package gitlab
 18
 19import "time"
 20
 21// SettingsService handles communication with the application SettingsService
 22// related methods of the GitLab API.
 23//
 24// GitLab API docs: https://docs.gitlab.com/ce/api/settings.html
 25type SettingsService struct {
 26	client *Client
 27}
 28
 29// Settings represents the GitLab application settings.
 30//
 31// GitLab API docs: https://docs.gitlab.com/ce/api/settings.html
 32type Settings struct {
 33	ID                                  int               `json:"id"`
 34	CreatedAt                           *time.Time        `json:"created_at"`
 35	UpdatedAt                           *time.Time        `json:"updated_at"`
 36	AdminNotificationEmail              string            `json:"admin_notification_email"`
 37	AfterSignOutPath                    string            `json:"after_sign_out_path"`
 38	AfterSignUpText                     string            `json:"after_sign_up_text"`
 39	AkismetAPIKey                       string            `json:"akismet_api_key"`
 40	AkismetEnabled                      bool              `json:"akismet_enabled"`
 41	CircuitbreakerAccessRetries         int               `json:"circuitbreaker_access_retries"`
 42	CircuitbreakerBackoffThreshold      int               `json:"circuitbreaker_backoff_threshold"`
 43	CircuitbreakerFailureCountThreshold int               `json:"circuitbreaker_failure_count_threshold"`
 44	CircuitbreakerFailureResetTime      int               `json:"circuitbreaker_failure_reset_time"`
 45	CircuitbreakerFailureWaitTime       int               `json:"circuitbreaker_failure_wait_time"`
 46	CircuitbreakerStorageTimeout        int               `json:"circuitbreaker_storage_timeout"`
 47	ClientsideSentryDSN                 string            `json:"clientside_sentry_dsn"`
 48	ClientsideSentryEnabled             bool              `json:"clientside_sentry_enabled"`
 49	ContainerRegistryTokenExpireDelay   int               `json:"container_registry_token_expire_delay"`
 50	DefaultArtifactsExpireIn            string            `json:"default_artifacts_expire_in"`
 51	DefaultBranchProtection             int               `json:"default_branch_protection"`
 52	DefaultGroupVisibility              string            `json:"default_group_visibility"`
 53	DefaultProjectVisibility            string            `json:"default_project_visibility"`
 54	DefaultProjectsLimit                int               `json:"default_projects_limit"`
 55	DefaultSnippetVisibility            string            `json:"default_snippet_visibility"`
 56	DisabledOauthSignInSources          []string          `json:"disabled_oauth_sign_in_sources"`
 57	DomainBlacklistEnabled              bool              `json:"domain_blacklist_enabled"`
 58	DomainBlacklist                     []string          `json:"domain_blacklist"`
 59	DomainWhitelist                     []string          `json:"domain_whitelist"`
 60	DSAKeyRestriction                   int               `json:"dsa_key_restriction"`
 61	ECDSAKeyRestriction                 int               `json:"ecdsa_key_restriction"`
 62	Ed25519KeyRestriction               int               `json:"ed25519_key_restriction"`
 63	EmailAuthorInBody                   bool              `json:"email_author_in_body"`
 64	EnabledGitAccessProtocol            string            `json:"enabled_git_access_protocol"`
 65	GravatarEnabled                     bool              `json:"gravatar_enabled"`
 66	HelpPageHideCommercialContent       bool              `json:"help_page_hide_commercial_content"`
 67	HelpPageSupportURL                  string            `json:"help_page_support_url"`
 68	HomePageURL                         string            `json:"home_page_url"`
 69	HousekeepingBitmapsEnabled          bool              `json:"housekeeping_bitmaps_enabled"`
 70	HousekeepingEnabled                 bool              `json:"housekeeping_enabled"`
 71	HousekeepingFullRepackPeriod        int               `json:"housekeeping_full_repack_period"`
 72	HousekeepingGcPeriod                int               `json:"housekeeping_gc_period"`
 73	HousekeepingIncrementalRepackPeriod int               `json:"housekeeping_incremental_repack_period"`
 74	HTMLEmailsEnabled                   bool              `json:"html_emails_enabled"`
 75	ImportSources                       []string          `json:"import_sources"`
 76	KodingEnabled                       bool              `json:"koding_enabled"`
 77	KodingURL                           string            `json:"koding_url"`
 78	LocalMarkdownVersion                int               `json:"local_markdown_version"`
 79	MaxArtifactsSize                    int               `json:"max_artifacts_size"`
 80	MaxAttachmentSize                   int               `json:"max_attachment_size"`
 81	MaxPagesSize                        int               `json:"max_pages_size"`
 82	MetricsEnabled                      bool              `json:"metrics_enabled"`
 83	MetricsHost                         string            `json:"metrics_host"`
 84	MetricsMethodCallThreshold          int               `json:"metrics_method_call_threshold"`
 85	MetricsPacketSize                   int               `json:"metrics_packet_size"`
 86	MetricsPoolSize                     int               `json:"metrics_pool_size"`
 87	MetricsPort                         int               `json:"metrics_port"`
 88	MetricsSampleInterval               int               `json:"metrics_sample_interval"`
 89	MetricsTimeout                      int               `json:"metrics_timeout"`
 90	PasswordAuthenticationEnabledForWeb bool              `json:"password_authentication_enabled_for_web"`
 91	PasswordAuthenticationEnabledForGit bool              `json:"password_authentication_enabled_for_git"`
 92	PerformanceBarAllowedGroupID        string            `json:"performance_bar_allowed_group_id"`
 93	PerformanceBarEnabled               bool              `json:"performance_bar_enabled"`
 94	PlantumlEnabled                     bool              `json:"plantuml_enabled"`
 95	PlantumlURL                         string            `json:"plantuml_url"`
 96	PollingIntervalMultiplier           float64           `json:"polling_interval_multiplier,string"`
 97	ProjectExportEnabled                bool              `json:"project_export_enabled"`
 98	PrometheusMetricsEnabled            bool              `json:"prometheus_metrics_enabled"`
 99	RecaptchaEnabled                    bool              `json:"recaptcha_enabled"`
100	RecaptchaPrivateKey                 string            `json:"recaptcha_private_key"`
101	RecaptchaSiteKey                    string            `json:"recaptcha_site_key"`
102	RepositoryChecksEnabled             bool              `json:"repository_checks_enabled"`
103	RepositoryStorages                  []string          `json:"repository_storages"`
104	RequireTwoFactorAuthentication      bool              `json:"require_two_factor_authentication"`
105	RestrictedVisibilityLevels          []VisibilityValue `json:"restricted_visibility_levels"`
106	RsaKeyRestriction                   int               `json:"rsa_key_restriction"`
107	SendUserConfirmationEmail           bool              `json:"send_user_confirmation_email"`
108	SentryDSN                           string            `json:"sentry_dsn"`
109	SentryEnabled                       bool              `json:"sentry_enabled"`
110	SessionExpireDelay                  int               `json:"session_expire_delay"`
111	SharedRunnersEnabled                bool              `json:"shared_runners_enabled"`
112	SharedRunnersText                   string            `json:"shared_runners_text"`
113	SidekiqThrottlingEnabled            bool              `json:"sidekiq_throttling_enabled"`
114	SidekiqThrottlingFactor             float64           `json:"sidekiq_throttling_factor"`
115	SidekiqThrottlingQueues             []string          `json:"sidekiq_throttling_queues"`
116	SignInText                          string            `json:"sign_in_text"`
117	SignupEnabled                       bool              `json:"signup_enabled"`
118	TerminalMaxSessionTime              int               `json:"terminal_max_session_time"`
119	TwoFactorGracePeriod                int               `json:"two_factor_grace_period"`
120	UniqueIPsLimitEnabled               bool              `json:"unique_ips_limit_enabled"`
121	UniqueIPsLimitPerUser               int               `json:"unique_ips_limit_per_user"`
122	UniqueIPsLimitTimeWindow            int               `json:"unique_ips_limit_time_window"`
123	UsagePingEnabled                    bool              `json:"usage_ping_enabled"`
124	UserDefaultExternal                 bool              `json:"user_default_external"`
125	UserOauthApplications               bool              `json:"user_oauth_applications"`
126	VersionCheckEnabled                 bool              `json:"version_check_enabled"`
127}
128
129func (s Settings) String() string {
130	return Stringify(s)
131}
132
133// GetSettings gets the current application settings.
134//
135// GitLab API docs:
136// https://docs.gitlab.com/ce/api/settings.html#get-current-application.settings
137func (s *SettingsService) GetSettings(options ...OptionFunc) (*Settings, *Response, error) {
138	req, err := s.client.NewRequest("GET", "application/settings", nil, options)
139	if err != nil {
140		return nil, nil, err
141	}
142
143	as := new(Settings)
144	resp, err := s.client.Do(req, as)
145	if err != nil {
146		return nil, resp, err
147	}
148
149	return as, resp, err
150}
151
152// UpdateSettingsOptions represents the available UpdateSettings() options.
153//
154// GitLab API docs:
155// https://docs.gitlab.com/ce/api/settings.html#change-application.settings
156type UpdateSettingsOptions struct {
157	AdminNotificationEmail              *string           `url:"admin_notification_email,omitempty" json:"admin_notification_email,omitempty"`
158	AfterSignOutPath                    *string           `url:"after_sign_out_path,omitempty" json:"after_sign_out_path,omitempty"`
159	AfterSignUpText                     *string           `url:"after_sign_up_text,omitempty" json:"after_sign_up_text,omitempty"`
160	AkismetAPIKey                       *string           `url:"akismet_api_key,omitempty" json:"akismet_api_key,omitempty"`
161	AkismetEnabled                      *bool             `url:"akismet_enabled,omitempty" json:"akismet_enabled,omitempty"`
162	CircuitbreakerAccessRetries         *int              `url:"circuitbreaker_access_retries,omitempty" json:"circuitbreaker_access_retries,omitempty"`
163	CircuitbreakerBackoffThreshold      *int              `url:"circuitbreaker_backoff_threshold,omitempty" json:"circuitbreaker_backoff_threshold,omitempty"`
164	CircuitbreakerFailureCountThreshold *int              `url:"circuitbreaker_failure_count_threshold,omitempty" json:"circuitbreaker_failure_count_threshold,omitempty"`
165	CircuitbreakerFailureResetTime      *int              `url:"circuitbreaker_failure_reset_time,omitempty" json:"circuitbreaker_failure_reset_time,omitempty"`
166	CircuitbreakerFailureWaitTime       *int              `url:"circuitbreaker_failure_wait_time,omitempty" json:"circuitbreaker_failure_wait_time,omitempty"`
167	CircuitbreakerStorageTimeout        *int              `url:"circuitbreaker_storage_timeout,omitempty" json:"circuitbreaker_storage_timeout,omitempty"`
168	ClientsideSentryDSN                 *string           `url:"clientside_sentry_dsn,omitempty" json:"clientside_sentry_dsn,omitempty"`
169	ClientsideSentryEnabled             *bool             `url:"clientside_sentry_enabled,omitempty" json:"clientside_sentry_enabled,omitempty"`
170	ContainerRegistryTokenExpireDelay   *int              `url:"container_registry_token_expire_delay,omitempty" json:"container_registry_token_expire_delay,omitempty"`
171	DefaultArtifactsExpireIn            *string           `url:"default_artifacts_expire_in,omitempty" json:"default_artifacts_expire_in,omitempty"`
172	DefaultBranchProtection             *int              `url:"default_branch_protection,omitempty" json:"default_branch_protection,omitempty"`
173	DefaultGroupVisibility              *string           `url:"default_group_visibility,omitempty" json:"default_group_visibility,omitempty"`
174	DefaultProjectVisibility            *string           `url:"default_project_visibility,omitempty" json:"default_project_visibility,omitempty"`
175	DefaultProjectsLimit                *int              `url:"default_projects_limit,omitempty" json:"default_projects_limit,omitempty"`
176	DefaultSnippetVisibility            *string           `url:"default_snippet_visibility,omitempty" json:"default_snippet_visibility,omitempty"`
177	DisabledOauthSignInSources          []string          `url:"disabled_oauth_sign_in_sources,omitempty" json:"disabled_oauth_sign_in_sources,omitempty"`
178	DomainBlacklistEnabled              *bool             `url:"domain_blacklist_enabled,omitempty" json:"domain_blacklist_enabled,omitempty"`
179	DomainBlacklist                     []string          `url:"domain_blacklist,omitempty" json:"domain_blacklist,omitempty"`
180	DomainWhitelist                     []string          `url:"domain_whitelist,omitempty" json:"domain_whitelist,omitempty"`
181	DSAKeyRestriction                   *int              `url:"dsa_key_restriction,omitempty" json:"dsa_key_restriction,omitempty"`
182	ECDSAKeyRestriction                 *int              `url:"ecdsa_key_restriction,omitempty" json:"ecdsa_key_restriction,omitempty"`
183	Ed25519KeyRestriction               *int              `url:"ed25519_key_restriction,omitempty" json:"ed25519_key_restriction,omitempty"`
184	EmailAuthorInBody                   *bool             `url:"email_author_in_body,omitempty" json:"email_author_in_body,omitempty"`
185	EnabledGitAccessProtocol            *string           `url:"enabled_git_access_protocol,omitempty" json:"enabled_git_access_protocol,omitempty"`
186	GravatarEnabled                     *bool             `url:"gravatar_enabled,omitempty" json:"gravatar_enabled,omitempty"`
187	HelpPageHideCommercialContent       *bool             `url:"help_page_hide_commercial_content,omitempty" json:"help_page_hide_commercial_content,omitempty"`
188	HelpPageSupportURL                  *string           `url:"help_page_support_url,omitempty" json:"help_page_support_url,omitempty"`
189	HomePageURL                         *string           `url:"home_page_url,omitempty" json:"home_page_url,omitempty"`
190	HousekeepingBitmapsEnabled          *bool             `url:"housekeeping_bitmaps_enabled,omitempty" json:"housekeeping_bitmaps_enabled,omitempty"`
191	HousekeepingEnabled                 *bool             `url:"housekeeping_enabled,omitempty" json:"housekeeping_enabled,omitempty"`
192	HousekeepingFullRepackPeriod        *int              `url:"housekeeping_full_repack_period,omitempty" json:"housekeeping_full_repack_period,omitempty"`
193	HousekeepingGcPeriod                *int              `url:"housekeeping_gc_period,omitempty" json:"housekeeping_gc_period,omitempty"`
194	HousekeepingIncrementalRepackPeriod *int              `url:"housekeeping_incremental_repack_period,omitempty" json:"housekeeping_incremental_repack_period,omitempty"`
195	HTMLEmailsEnabled                   *bool             `url:"html_emails_enabled,omitempty" json:"html_emails_enabled,omitempty"`
196	ImportSources                       []string          `url:"import_sources,omitempty" json:"import_sources,omitempty"`
197	KodingEnabled                       *bool             `url:"koding_enabled,omitempty" json:"koding_enabled,omitempty"`
198	KodingURL                           *string           `url:"koding_url,omitempty" json:"koding_url,omitempty"`
199	LocalMarkdownVersion                *int              `url:"local_markdown_version,omitempty" json:"local_markdown_version,omitempty"`
200	MaxArtifactsSize                    *int              `url:"max_artifacts_size,omitempty" json:"max_artifacts_size,omitempty"`
201	MaxAttachmentSize                   *int              `url:"max_attachment_size,omitempty" json:"max_attachment_size,omitempty"`
202	MaxPagesSize                        *int              `url:"max_pages_size,omitempty" json:"max_pages_size,omitempty"`
203	MetricsEnabled                      *bool             `url:"metrics_enabled,omitempty" json:"metrics_enabled,omitempty"`
204	MetricsHost                         *string           `url:"metrics_host,omitempty" json:"metrics_host,omitempty"`
205	MetricsMethodCallThreshold          *int              `url:"metrics_method_call_threshold,omitempty" json:"metrics_method_call_threshold,omitempty"`
206	MetricsPacketSize                   *int              `url:"metrics_packet_size,omitempty" json:"metrics_packet_size,omitempty"`
207	MetricsPoolSize                     *int              `url:"metrics_pool_size,omitempty" json:"metrics_pool_size,omitempty"`
208	MetricsPort                         *int              `url:"metrics_port,omitempty" json:"metrics_port,omitempty"`
209	MetricsSampleInterval               *int              `url:"metrics_sample_interval,omitempty" json:"metrics_sample_interval,omitempty"`
210	MetricsTimeout                      *int              `url:"metrics_timeout,omitempty" json:"metrics_timeout,omitempty"`
211	PasswordAuthenticationEnabledForWeb *bool             `url:"password_authentication_enabled_for_web,omitempty" json:"password_authentication_enabled_for_web,omitempty"`
212	PasswordAuthenticationEnabledForGit *bool             `url:"password_authentication_enabled_for_git,omitempty" json:"password_authentication_enabled_for_git,omitempty"`
213	PerformanceBarAllowedGroupID        *string           `url:"performance_bar_allowed_group_id,omitempty" json:"performance_bar_allowed_group_id,omitempty"`
214	PerformanceBarEnabled               *bool             `url:"performance_bar_enabled,omitempty" json:"performance_bar_enabled,omitempty"`
215	PlantumlEnabled                     *bool             `url:"plantuml_enabled,omitempty" json:"plantuml_enabled,omitempty"`
216	PlantumlURL                         *string           `url:"plantuml_url,omitempty" json:"plantuml_url,omitempty"`
217	PollingIntervalMultiplier           *float64          `url:"polling_interval_multiplier,omitempty" json:"polling_interval_multiplier,omitempty"`
218	ProjectExportEnabled                *bool             `url:"project_export_enabled,omitempty" json:"project_export_enabled,omitempty"`
219	PrometheusMetricsEnabled            *bool             `url:"prometheus_metrics_enabled,omitempty" json:"prometheus_metrics_enabled,omitempty"`
220	RecaptchaEnabled                    *bool             `url:"recaptcha_enabled,omitempty" json:"recaptcha_enabled,omitempty"`
221	RecaptchaPrivateKey                 *string           `url:"recaptcha_private_key,omitempty" json:"recaptcha_private_key,omitempty"`
222	RecaptchaSiteKey                    *string           `url:"recaptcha_site_key,omitempty" json:"recaptcha_site_key,omitempty"`
223	RepositoryChecksEnabled             *bool             `url:"repository_checks_enabled,omitempty" json:"repository_checks_enabled,omitempty"`
224	RepositoryStorages                  []string          `url:"repository_storages,omitempty" json:"repository_storages,omitempty"`
225	RequireTwoFactorAuthentication      *bool             `url:"require_two_factor_authentication,omitempty" json:"require_two_factor_authentication,omitempty"`
226	RestrictedVisibilityLevels          []VisibilityValue `url:"restricted_visibility_levels,omitempty" json:"restricted_visibility_levels,omitempty"`
227	RsaKeyRestriction                   *int              `url:"rsa_key_restriction,omitempty" json:"rsa_key_restriction,omitempty"`
228	SendUserConfirmationEmail           *bool             `url:"send_user_confirmation_email,omitempty" json:"send_user_confirmation_email,omitempty"`
229	SentryDSN                           *string           `url:"sentry_dsn,omitempty" json:"sentry_dsn,omitempty"`
230	SentryEnabled                       *bool             `url:"sentry_enabled,omitempty" json:"sentry_enabled,omitempty"`
231	SessionExpireDelay                  *int              `url:"session_expire_delay,omitempty" json:"session_expire_delay,omitempty"`
232	SharedRunnersEnabled                *bool             `url:"shared_runners_enabled,omitempty" json:"shared_runners_enabled,omitempty"`
233	SharedRunnersText                   *string           `url:"shared_runners_text,omitempty" json:"shared_runners_text,omitempty"`
234	SidekiqThrottlingEnabled            *bool             `url:"sidekiq_throttling_enabled,omitempty" json:"sidekiq_throttling_enabled,omitempty"`
235	SidekiqThrottlingFactor             *float64          `url:"sidekiq_throttling_factor,omitempty" json:"sidekiq_throttling_factor,omitempty"`
236	SidekiqThrottlingQueues             []string          `url:"sidekiq_throttling_queues,omitempty" json:"sidekiq_throttling_queues,omitempty"`
237	SignInText                          *string           `url:"sign_in_text,omitempty" json:"sign_in_text,omitempty"`
238	SignupEnabled                       *bool             `url:"signup_enabled,omitempty" json:"signup_enabled,omitempty"`
239	TerminalMaxSessionTime              *int              `url:"terminal_max_session_time,omitempty" json:"terminal_max_session_time,omitempty"`
240	TwoFactorGracePeriod                *int              `url:"two_factor_grace_period,omitempty" json:"two_factor_grace_period,omitempty"`
241	UniqueIPsLimitEnabled               *bool             `url:"unique_ips_limit_enabled,omitempty" json:"unique_ips_limit_enabled,omitempty"`
242	UniqueIPsLimitPerUser               *int              `url:"unique_ips_limit_per_user,omitempty" json:"unique_ips_limit_per_user,omitempty"`
243	UniqueIPsLimitTimeWindow            *int              `url:"unique_ips_limit_time_window,omitempty" json:"unique_ips_limit_time_window,omitempty"`
244	UsagePingEnabled                    *bool             `url:"usage_ping_enabled,omitempty" json:"usage_ping_enabled,omitempty"`
245	UserDefaultExternal                 *bool             `url:"user_default_external,omitempty" json:"user_default_external,omitempty"`
246	UserOauthApplications               *bool             `url:"user_oauth_applications,omitempty" json:"user_oauth_applications,omitempty"`
247	VersionCheckEnabled                 *bool             `url:"version_check_enabled,omitempty" json:"version_check_enabled,omitempty"`
248}
249
250// UpdateSettings updates the application settings.
251//
252// GitLab API docs:
253// https://docs.gitlab.com/ce/api/settings.html#change-application.settings
254func (s *SettingsService) UpdateSettings(opt *UpdateSettingsOptions, options ...OptionFunc) (*Settings, *Response, error) {
255	req, err := s.client.NewRequest("PUT", "application/settings", opt, options)
256	if err != nil {
257		return nil, nil, err
258	}
259
260	as := new(Settings)
261	resp, err := s.client.Do(req, as)
262	if err != nil {
263		return nil, resp, err
264	}
265
266	return as, resp, err
267}