settings.go 22 KB

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