mirror of
https://github.com/coder/coder.git
synced 2025-07-08 11:39:50 +00:00
* feat: Support x-forwarded-for headers for IPs Fixes #4430. * Fix realip accepting headers * Fix unused headers
100 lines
6.1 KiB
Go
100 lines
6.1 KiB
Go
package codersdk
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"time"
|
|
|
|
"golang.org/x/xerrors"
|
|
)
|
|
|
|
// DeploymentConfig is the central configuration for the coder server.
|
|
// Secret values should specify `json:"-"` to prevent them from being returned by the API.
|
|
type DeploymentConfig struct {
|
|
AccessURL DeploymentConfigField[string] `json:"access_url"`
|
|
WildcardAccessURL DeploymentConfigField[string] `json:"wildcard_access_url"`
|
|
Address DeploymentConfigField[string] `json:"address"`
|
|
AutobuildPollInterval DeploymentConfigField[time.Duration] `json:"autobuild_poll_interval"`
|
|
DERPServerEnable DeploymentConfigField[bool] `json:"derp_server_enabled"`
|
|
DERPServerRegionID DeploymentConfigField[int] `json:"derp_server_region_id"`
|
|
DERPServerRegionCode DeploymentConfigField[string] `json:"derp_server_region_code"`
|
|
DERPServerRegionName DeploymentConfigField[string] `json:"derp_server_region_name"`
|
|
DERPServerSTUNAddresses DeploymentConfigField[[]string] `json:"derp_server_stun_address"`
|
|
DERPServerRelayURL DeploymentConfigField[string] `json:"derp_server_relay_address"`
|
|
DERPConfigURL DeploymentConfigField[string] `json:"derp_config_url"`
|
|
DERPConfigPath DeploymentConfigField[string] `json:"derp_config_path"`
|
|
PrometheusEnable DeploymentConfigField[bool] `json:"prometheus_enabled"`
|
|
PrometheusAddress DeploymentConfigField[string] `json:"prometheus_address"`
|
|
PprofEnable DeploymentConfigField[bool] `json:"pprof_enabled"`
|
|
PprofAddress DeploymentConfigField[string] `json:"pprof_address"`
|
|
ProxyTrustedHeaders DeploymentConfigField[[]string] `json:"proxy_trusted_headers"`
|
|
ProxyTrustedOrigins DeploymentConfigField[[]string] `json:"proxy_trusted_origins"`
|
|
CacheDirectory DeploymentConfigField[string] `json:"cache_directory"`
|
|
InMemoryDatabase DeploymentConfigField[bool] `json:"in_memory_database"`
|
|
ProvisionerDaemons DeploymentConfigField[int] `json:"provisioner_daemon_count"`
|
|
PostgresURL DeploymentConfigField[string] `json:"-"`
|
|
OAuth2GithubClientID DeploymentConfigField[string] `json:"oauth2_github_client_id"`
|
|
OAuth2GithubClientSecret DeploymentConfigField[string] `json:"-"`
|
|
OAuth2GithubAllowedOrgs DeploymentConfigField[[]string] `json:"oauth2_github_allowed_orgs"`
|
|
OAuth2GithubAllowedTeams DeploymentConfigField[[]string] `json:"oauth2_github_allowed_teams"`
|
|
OAuth2GithubAllowSignups DeploymentConfigField[bool] `json:"oauth2_github_allow_signups"`
|
|
OAuth2GithubEnterpriseBaseURL DeploymentConfigField[string] `json:"oauth2_github_enterprise_base_url"`
|
|
OIDCAllowSignups DeploymentConfigField[bool] `json:"oidc_allow_signups"`
|
|
OIDCClientID DeploymentConfigField[string] `json:"oidc_client_id"`
|
|
OIDCClientSecret DeploymentConfigField[string] `json:"-"`
|
|
OIDCEmailDomain DeploymentConfigField[string] `json:"oidc_email_domain"`
|
|
OIDCIssuerURL DeploymentConfigField[string] `json:"oidc_issuer_url"`
|
|
OIDCScopes DeploymentConfigField[[]string] `json:"oidc_scopes"`
|
|
TelemetryEnable DeploymentConfigField[bool] `json:"telemetry_enable"`
|
|
TelemetryTrace DeploymentConfigField[bool] `json:"telemetry_trace_enable"`
|
|
TelemetryURL DeploymentConfigField[string] `json:"telemetry_url"`
|
|
TLSEnable DeploymentConfigField[bool] `json:"tls_enable"`
|
|
TLSCertFiles DeploymentConfigField[[]string] `json:"tls_cert_files"`
|
|
TLSClientCAFile DeploymentConfigField[string] `json:"tls_client_ca_file"`
|
|
TLSClientAuth DeploymentConfigField[string] `json:"tls_client_auth"`
|
|
TLSKeyFiles DeploymentConfigField[[]string] `json:"tls_key_files"`
|
|
TLSMinVersion DeploymentConfigField[string] `json:"tls_min_version"`
|
|
TraceEnable DeploymentConfigField[bool] `json:"trace_enable"`
|
|
SecureAuthCookie DeploymentConfigField[bool] `json:"secure_auth_cookie"`
|
|
SSHKeygenAlgorithm DeploymentConfigField[string] `json:"ssh_keygen_algorithm"`
|
|
AutoImportTemplates DeploymentConfigField[[]string] `json:"auto_import_templates"`
|
|
MetricsCacheRefreshInterval DeploymentConfigField[time.Duration] `json:"metrics_cache_refresh_interval"`
|
|
AgentStatRefreshInterval DeploymentConfigField[time.Duration] `json:"agent_stat_refresh_interval"`
|
|
AuditLogging DeploymentConfigField[bool] `json:"audit_logging"`
|
|
BrowserOnly DeploymentConfigField[bool] `json:"browser_only"`
|
|
SCIMAPIKey DeploymentConfigField[string] `json:"-"`
|
|
UserWorkspaceQuota DeploymentConfigField[int] `json:"user_workspace_quota"`
|
|
}
|
|
|
|
type Flaggable interface {
|
|
string | bool | int | time.Duration | []string
|
|
}
|
|
|
|
type DeploymentConfigField[T Flaggable] struct {
|
|
Key string `json:"key"`
|
|
Name string `json:"name"`
|
|
Usage string `json:"usage"`
|
|
Flag string `json:"flag"`
|
|
Shorthand string `json:"shorthand"`
|
|
Enterprise bool `json:"enterprise"`
|
|
Hidden bool `json:"hidden"`
|
|
Value T `json:"value"`
|
|
}
|
|
|
|
// DeploymentConfig returns the deployment config for the coder server.
|
|
func (c *Client) DeploymentConfig(ctx context.Context) (DeploymentConfig, error) {
|
|
res, err := c.Request(ctx, http.MethodGet, "/api/v2/config/deployment", nil)
|
|
if err != nil {
|
|
return DeploymentConfig{}, xerrors.Errorf("execute request: %w", err)
|
|
}
|
|
defer res.Body.Close()
|
|
|
|
if res.StatusCode != http.StatusOK {
|
|
return DeploymentConfig{}, readBodyAsError(res)
|
|
}
|
|
|
|
var df DeploymentConfig
|
|
return df, json.NewDecoder(res.Body).Decode(&df)
|
|
}
|