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	MaxArtifactsSize                    int               `json:"max_artifacts_size"`
 79	MaxAttachmentSize                   int               `json:"max_attachment_size"`
 80	MaxPagesSize                        int               `json:"max_pages_size"`
 81	MetricsEnabled                      bool              `json:"metrics_enabled"`
 82	MetricsHost                         string            `json:"metrics_host"`
 83	MetricsMethodCallThreshold          int               `json:"metrics_method_call_threshold"`
 84	MetricsPacketSize                   int               `json:"metrics_packet_size"`
 85	MetricsPoolSize                     int               `json:"metrics_pool_size"`
 86	MetricsPort                         int               `json:"metrics_port"`
 87	MetricsSampleInterval               int               `json:"metrics_sample_interval"`
 88	MetricsTimeout                      int               `json:"metrics_timeout"`
 89	PasswordAuthenticationEnabledForWeb bool              `json:"password_authentication_enabled_for_web"`
 90	PasswordAuthenticationEnabledForGit bool              `json:"password_authentication_enabled_for_git"`
 91	PerformanceBarAllowedGroupID        string            `json:"performance_bar_allowed_group_id"`
 92	PerformanceBarEnabled               bool              `json:"performance_bar_enabled"`
 93	PlantumlEnabled                     bool              `json:"plantuml_enabled"`
 94	PlantumlURL                         string            `json:"plantuml_url"`
 95	PollingIntervalMultiplier           float64           `json:"polling_interval_multiplier"`
 96	ProjectExportEnabled                bool              `json:"project_export_enabled"`
 97	PrometheusMetricsEnabled            bool              `json:"prometheus_metrics_enabled"`
 98	RecaptchaEnabled                    bool              `json:"recaptcha_enabled"`
 99	RecaptchaPrivateKey                 string            `json:"recaptcha_private_key"`
100	RecaptchaSiteKey                    string            `json:"recaptcha_site_key"`
101	RepositoryChecksEnabled             bool              `json:"repository_checks_enabled"`
102	RepositoryStorages                  []string          `json:"repository_storages"`
103	RequireTwoFactorAuthentication      bool              `json:"require_two_factor_authentication"`
104	RestrictedVisibilityLevels          []VisibilityValue `json:"restricted_visibility_levels"`
105	RsaKeyRestriction                   int               `json:"rsa_key_restriction"`
106	SendUserConfirmationEmail           bool              `json:"send_user_confirmation_email"`
107	SentryDSN                           string            `json:"sentry_dsn"`
108	SentryEnabled                       bool              `json:"sentry_enabled"`
109	SessionExpireDelay                  int               `json:"session_expire_delay"`
110	SharedRunnersEnabled                bool              `json:"shared_runners_enabled"`
111	SharedRunnersText                   string            `json:"shared_runners_text"`
112	SidekiqThrottlingEnabled            bool              `json:"sidekiq_throttling_enabled"`
113	SidekiqThrottlingFactor             float64           `json:"sidekiq_throttling_factor"`
114	SidekiqThrottlingQueues             []string          `json:"sidekiq_throttling_queues"`
115	SignInText                          string            `json:"sign_in_text"`
116	SignupEnabled                       bool              `json:"signup_enabled"`
117	TerminalMaxSessionTime              int               `json:"terminal_max_session_time"`
118	TwoFactorGracePeriod                int               `json:"two_factor_grace_period"`
119	UniqueIPsLimitEnabled               bool              `json:"unique_ips_limit_enabled"`
120	UniqueIPsLimitPerUser               int               `json:"unique_ips_limit_per_user"`
121	UniqueIPsLimitTimeWindow            int               `json:"unique_ips_limit_time_window"`
122	UsagePingEnabled                    bool              `json:"usage_ping_enabled"`
123	UserDefaultExternal                 bool              `json:"user_default_external"`
124	UserOauthApplications               bool              `json:"user_oauth_applications"`
125	VersionCheckEnabled                 bool              `json:"version_check_enabled"`
126}
127
128func (s Settings) String() string {
129	return Stringify(s)
130}
131
132// GetSettings gets the current application settings.
133//
134// GitLab API docs:
135// https://docs.gitlab.com/ce/api/settings.html#get-current-application.settings
136func (s *SettingsService) GetSettings(options ...OptionFunc) (*Settings, *Response, error) {
137	req, err := s.client.NewRequest("GET", "application/settings", nil, options)
138	if err != nil {
139		return nil, nil, err
140	}
141
142	as := new(Settings)
143	resp, err := s.client.Do(req, as)
144	if err != nil {
145		return nil, resp, err
146	}
147
148	return as, resp, err
149}
150
151// UpdateSettingsOptions represents the available UpdateSettings() options.
152//
153// GitLab API docs:
154// https://docs.gitlab.com/ce/api/settings.html#change-application.settings
155type UpdateSettingsOptions struct {
156	AdminNotificationEmail              *string           `url:"admin_notification_email,omitempty" json:"admin_notification_email,omitempty"`
157	AfterSignOutPath                    *string           `url:"after_sign_out_path,omitempty" json:"after_sign_out_path,omitempty"`
158	AfterSignUpText                     *string           `url:"after_sign_up_text,omitempty" json:"after_sign_up_text,omitempty"`
159	AkismetAPIKey                       *string           `url:"akismet_api_key,omitempty" json:"akismet_api_key,omitempty"`
160	AkismetEnabled                      *bool             `url:"akismet_enabled,omitempty" json:"akismet_enabled,omitempty"`
161	CircuitbreakerAccessRetries         *int              `url:"circuitbreaker_access_retries,omitempty" json:"circuitbreaker_access_retries,omitempty"`
162	CircuitbreakerBackoffThreshold      *int              `url:"circuitbreaker_backoff_threshold,omitempty" json:"circuitbreaker_backoff_threshold,omitempty"`
163	CircuitbreakerFailureCountThreshold *int              `url:"circuitbreaker_failure_count_threshold,omitempty" json:"circuitbreaker_failure_count_threshold,omitempty"`
164	CircuitbreakerFailureResetTime      *int              `url:"circuitbreaker_failure_reset_time,omitempty" json:"circuitbreaker_failure_reset_time,omitempty"`
165	CircuitbreakerFailureWaitTime       *int              `url:"circuitbreaker_failure_wait_time,omitempty" json:"circuitbreaker_failure_wait_time,omitempty"`
166	CircuitbreakerStorageTimeout        *int              `url:"circuitbreaker_storage_timeout,omitempty" json:"circuitbreaker_storage_timeout,omitempty"`
167	ClientsideSentryDSN                 *string           `url:"clientside_sentry_dsn,omitempty" json:"clientside_sentry_dsn,omitempty"`
168	ClientsideSentryEnabled             *bool             `url:"clientside_sentry_enabled,omitempty" json:"clientside_sentry_enabled,omitempty"`
169	ContainerRegistryTokenExpireDelay   *int              `url:"container_registry_token_expire_delay,omitempty" json:"container_registry_token_expire_delay,omitempty"`
170	DefaultArtifactsExpireIn            *string           `url:"default_artifacts_expire_in,omitempty" json:"default_artifacts_expire_in,omitempty"`
171	DefaultBranchProtection             *int              `url:"default_branch_protection,omitempty" json:"default_branch_protection,omitempty"`
172	DefaultGroupVisibility              *string           `url:"default_group_visibility,omitempty" json:"default_group_visibility,omitempty"`
173	DefaultProjectVisibility            *string           `url:"default_project_visibility,omitempty" json:"default_project_visibility,omitempty"`
174	DefaultProjectsLimit                *int              `url:"default_projects_limit,omitempty" json:"default_projects_limit,omitempty"`
175	DefaultSnippetVisibility            *string           `url:"default_snippet_visibility,omitempty" json:"default_snippet_visibility,omitempty"`
176	DisabledOauthSignInSources          []string          `url:"disabled_oauth_sign_in_sources,omitempty" json:"disabled_oauth_sign_in_sources,omitempty"`
177	DomainBlacklistEnabled              *bool             `url:"domain_blacklist_enabled,omitempty" json:"domain_blacklist_enabled,omitempty"`
178	DomainBlacklist                     []string          `url:"domain_blacklist,omitempty" json:"domain_blacklist,omitempty"`
179	DomainWhitelist                     []string          `url:"domain_whitelist,omitempty" json:"domain_whitelist,omitempty"`
180	DSAKeyRestriction                   *int              `url:"dsa_key_restriction,omitempty" json:"dsa_key_restriction,omitempty"`
181	ECDSAKeyRestriction                 *int              `url:"ecdsa_key_restriction,omitempty" json:"ecdsa_key_restriction,omitempty"`
182	Ed25519KeyRestriction               *int              `url:"ed25519_key_restriction,omitempty" json:"ed25519_key_restriction,omitempty"`
183	EmailAuthorInBody                   *bool             `url:"email_author_in_body,omitempty" json:"email_author_in_body,omitempty"`
184	EnabledGitAccessProtocol            *string           `url:"enabled_git_access_protocol,omitempty" json:"enabled_git_access_protocol,omitempty"`
185	GravatarEnabled                     *bool             `url:"gravatar_enabled,omitempty" json:"gravatar_enabled,omitempty"`
186	HelpPageHideCommercialContent       *bool             `url:"help_page_hide_commercial_content,omitempty" json:"help_page_hide_commercial_content,omitempty"`
187	HelpPageSupportURL                  *string           `url:"help_page_support_url,omitempty" json:"help_page_support_url,omitempty"`
188	HomePageURL                         *string           `url:"home_page_url,omitempty" json:"home_page_url,omitempty"`
189	HousekeepingBitmapsEnabled          *bool             `url:"housekeeping_bitmaps_enabled,omitempty" json:"housekeeping_bitmaps_enabled,omitempty"`
190	HousekeepingEnabled                 *bool             `url:"housekeeping_enabled,omitempty" json:"housekeeping_enabled,omitempty"`
191	HousekeepingFullRepackPeriod        *int              `url:"housekeeping_full_repack_period,omitempty" json:"housekeeping_full_repack_period,omitempty"`
192	HousekeepingGcPeriod                *int              `url:"housekeeping_gc_period,omitempty" json:"housekeeping_gc_period,omitempty"`
193	HousekeepingIncrementalRepackPeriod *int              `url:"housekeeping_incremental_repack_period,omitempty" json:"housekeeping_incremental_repack_period,omitempty"`
194	HTMLEmailsEnabled                   *bool             `url:"html_emails_enabled,omitempty" json:"html_emails_enabled,omitempty"`
195	ImportSources                       []string          `url:"import_sources,omitempty" json:"import_sources,omitempty"`
196	KodingEnabled                       *bool             `url:"koding_enabled,omitempty" json:"koding_enabled,omitempty"`
197	KodingURL                           *string           `url:"koding_url,omitempty" json:"koding_url,omitempty"`
198	MaxArtifactsSize                    *int              `url:"max_artifacts_size,omitempty" json:"max_artifacts_size,omitempty"`
199	MaxAttachmentSize                   *int              `url:"max_attachment_size,omitempty" json:"max_attachment_size,omitempty"`
200	MaxPagesSize                        *int              `url:"max_pages_size,omitempty" json:"max_pages_size,omitempty"`
201	MetricsEnabled                      *bool             `url:"metrics_enabled,omitempty" json:"metrics_enabled,omitempty"`
202	MetricsHost                         *string           `url:"metrics_host,omitempty" json:"metrics_host,omitempty"`
203	MetricsMethodCallThreshold          *int              `url:"metrics_method_call_threshold,omitempty" json:"metrics_method_call_threshold,omitempty"`
204	MetricsPacketSize                   *int              `url:"metrics_packet_size,omitempty" json:"metrics_packet_size,omitempty"`
205	MetricsPoolSize                     *int              `url:"metrics_pool_size,omitempty" json:"metrics_pool_size,omitempty"`
206	MetricsPort                         *int              `url:"metrics_port,omitempty" json:"metrics_port,omitempty"`
207	MetricsSampleInterval               *int              `url:"metrics_sample_interval,omitempty" json:"metrics_sample_interval,omitempty"`
208	MetricsTimeout                      *int              `url:"metrics_timeout,omitempty" json:"metrics_timeout,omitempty"`
209	PasswordAuthenticationEnabledForWeb *bool             `url:"password_authentication_enabled_for_web,omitempty" json:"password_authentication_enabled_for_web,omitempty"`
210	PasswordAuthenticationEnabledForGit *bool             `url:"password_authentication_enabled_for_git,omitempty" json:"password_authentication_enabled_for_git,omitempty"`
211	PerformanceBarAllowedGroupID        *string           `url:"performance_bar_allowed_group_id,omitempty" json:"performance_bar_allowed_group_id,omitempty"`
212	PerformanceBarEnabled               *bool             `url:"performance_bar_enabled,omitempty" json:"performance_bar_enabled,omitempty"`
213	PlantumlEnabled                     *bool             `url:"plantuml_enabled,omitempty" json:"plantuml_enabled,omitempty"`
214	PlantumlURL                         *string           `url:"plantuml_url,omitempty" json:"plantuml_url,omitempty"`
215	PollingIntervalMultiplier           *float64          `url:"polling_interval_multiplier,omitempty" json:"polling_interval_multiplier,omitempty"`
216	ProjectExportEnabled                *bool             `url:"project_export_enabled,omitempty" json:"project_export_enabled,omitempty"`
217	PrometheusMetricsEnabled            *bool             `url:"prometheus_metrics_enabled,omitempty" json:"prometheus_metrics_enabled,omitempty"`
218	RecaptchaEnabled                    *bool             `url:"recaptcha_enabled,omitempty" json:"recaptcha_enabled,omitempty"`
219	RecaptchaPrivateKey                 *string           `url:"recaptcha_private_key,omitempty" json:"recaptcha_private_key,omitempty"`
220	RecaptchaSiteKey                    *string           `url:"recaptcha_site_key,omitempty" json:"recaptcha_site_key,omitempty"`
221	RepositoryChecksEnabled             *bool             `url:"repository_checks_enabled,omitempty" json:"repository_checks_enabled,omitempty"`
222	RepositoryStorages                  []string          `url:"repository_storages,omitempty" json:"repository_storages,omitempty"`
223	RequireTwoFactorAuthentication      *bool             `url:"require_two_factor_authentication,omitempty" json:"require_two_factor_authentication,omitempty"`
224	RestrictedVisibilityLevels          []VisibilityValue `url:"restricted_visibility_levels,omitempty" json:"restricted_visibility_levels,omitempty"`
225	RsaKeyRestriction                   *int              `url:"rsa_key_restriction,omitempty" json:"rsa_key_restriction,omitempty"`
226	SendUserConfirmationEmail           *bool             `url:"send_user_confirmation_email,omitempty" json:"send_user_confirmation_email,omitempty"`
227	SentryDSN                           *string           `url:"sentry_dsn,omitempty" json:"sentry_dsn,omitempty"`
228	SentryEnabled                       *bool             `url:"sentry_enabled,omitempty" json:"sentry_enabled,omitempty"`
229	SessionExpireDelay                  *int              `url:"session_expire_delay,omitempty" json:"session_expire_delay,omitempty"`
230	SharedRunnersEnabled                *bool             `url:"shared_runners_enabled,omitempty" json:"shared_runners_enabled,omitempty"`
231	SharedRunnersText                   *string           `url:"shared_runners_text,omitempty" json:"shared_runners_text,omitempty"`
232	SidekiqThrottlingEnabled            *bool             `url:"sidekiq_throttling_enabled,omitempty" json:"sidekiq_throttling_enabled,omitempty"`
233	SidekiqThrottlingFactor             *float64          `url:"sidekiq_throttling_factor,omitempty" json:"sidekiq_throttling_factor,omitempty"`
234	SidekiqThrottlingQueues             []string          `url:"sidekiq_throttling_queues,omitempty" json:"sidekiq_throttling_queues,omitempty"`
235	SignInText                          *string           `url:"sign_in_text,omitempty" json:"sign_in_text,omitempty"`
236	SignupEnabled                       *bool             `url:"signup_enabled,omitempty" json:"signup_enabled,omitempty"`
237	TerminalMaxSessionTime              *int              `url:"terminal_max_session_time,omitempty" json:"terminal_max_session_time,omitempty"`
238	TwoFactorGracePeriod                *int              `url:"two_factor_grace_period,omitempty" json:"two_factor_grace_period,omitempty"`
239	UniqueIPsLimitEnabled               *bool             `url:"unique_ips_limit_enabled,omitempty" json:"unique_ips_limit_enabled,omitempty"`
240	UniqueIPsLimitPerUser               *int              `url:"unique_ips_limit_per_user,omitempty" json:"unique_ips_limit_per_user,omitempty"`
241	UniqueIPsLimitTimeWindow            *int              `url:"unique_ips_limit_time_window,omitempty" json:"unique_ips_limit_time_window,omitempty"`
242	UsagePingEnabled                    *bool             `url:"usage_ping_enabled,omitempty" json:"usage_ping_enabled,omitempty"`
243	UserDefaultExternal                 *bool             `url:"user_default_external,omitempty" json:"user_default_external,omitempty"`
244	UserOauthApplications               *bool             `url:"user_oauth_applications,omitempty" json:"user_oauth_applications,omitempty"`
245	VersionCheckEnabled                 *bool             `url:"version_check_enabled,omitempty" json:"version_check_enabled,omitempty"`
246}
247
248// UpdateSettings updates the application settings.
249//
250// GitLab API docs:
251// https://docs.gitlab.com/ce/api/settings.html#change-application.settings
252func (s *SettingsService) UpdateSettings(opt *UpdateSettingsOptions, options ...OptionFunc) (*Settings, *Response, error) {
253	req, err := s.client.NewRequest("PUT", "application/settings", opt, options)
254	if err != nil {
255		return nil, nil, err
256	}
257
258	as := new(Settings)
259	resp, err := s.client.Do(req, as)
260	if err != nil {
261		return nil, resp, err
262	}
263
264	return as, resp, err
265}