From 83f72546989d71633a4be3008548910ece76798e Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Mon, 26 Feb 2024 12:10:23 -0600 Subject: [PATCH 1/2] feat: external auth defaults for gitea Add some sane defaults for gitea to make it easier to configure --- coderd/externalauth/externalauth.go | 34 +++++++++++++++++++++++++++++ codersdk/externalauth.go | 4 +++- docs/admin/external-auth.md | 11 ++++++++++ site/src/api/typesGenerated.ts | 2 ++ site/static/icon/gitea.svg | 12 ++++++++++ 5 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 site/static/icon/gitea.svg diff --git a/coderd/externalauth/externalauth.go b/coderd/externalauth/externalauth.go index 5ab113ede59e0..b6c14fa180921 100644 --- a/coderd/externalauth/externalauth.go +++ b/coderd/externalauth/externalauth.go @@ -566,6 +566,9 @@ func applyDefaultsToConfig(config *codersdk.ExternalAuthConfig) { case codersdk.EnhancedExternalAuthProviderJFrog: copyDefaultSettings(config, jfrogArtifactoryDefaults(config)) return + case codersdk.EnhancedExternalAuthProviderGitea: + copyDefaultSettings(config, giteaDefaults(config)) + return default: // No defaults for this type. We still want to run this apply with // an empty set of defaults. @@ -696,6 +699,37 @@ func jfrogArtifactoryDefaults(config *codersdk.ExternalAuthConfig) codersdk.Exte return defaults } +func giteaDefaults(config *codersdk.ExternalAuthConfig) codersdk.ExternalAuthConfig { + defaults := codersdk.ExternalAuthConfig{ + DisplayName: "Gitea", + Scopes: []string{"read:repository", " write:repository", "read:user"}, + DisplayIcon: "/icon/gitea.svg", + } + // Gitea's servers will have some base url, e.g: https://gitea.coder.com. + // If an auth url is not set, we will assume they are using the default + // public Gitea. + if config.AuthURL == "" { + config.AuthURL = "https://gitea.com/login/oauth/authorize" + } + + auth, err := url.Parse(config.AuthURL) + if err != nil { + // We need a valid URL to continue with. + return defaults + } + + // Default regex should be anything using the same host as the auth url. + defaults.Regex = fmt.Sprintf(`^(https?://)?%s(/.*)?$`, strings.ReplaceAll(auth.Host, ".", `\.`)) + + tokenURL := auth.ResolveReference(&url.URL{Path: "/login/oauth/access_token"}) + defaults.TokenURL = tokenURL.String() + + validate := auth.ResolveReference(&url.URL{Path: "/login/oauth/userinfo"}) + defaults.ValidateURL = validate.String() + + return defaults +} + var staticDefaults = map[codersdk.EnhancedExternalAuthProvider]codersdk.ExternalAuthConfig{ codersdk.EnhancedExternalAuthProviderAzureDevops: { AuthURL: "https://app.vssps.visualstudio.com/oauth2/authorize", diff --git a/codersdk/externalauth.go b/codersdk/externalauth.go index d0b48c1a058fe..b4013e70ad131 100644 --- a/codersdk/externalauth.go +++ b/codersdk/externalauth.go @@ -24,7 +24,8 @@ func (e EnhancedExternalAuthProvider) Git() bool { EnhancedExternalAuthProviderGitLab, EnhancedExternalAuthProviderBitBucketCloud, EnhancedExternalAuthProviderBitBucketServer, - EnhancedExternalAuthProviderAzureDevops: + EnhancedExternalAuthProviderAzureDevops, + EnhancedExternalAuthProviderGitea: return true default: return false @@ -41,6 +42,7 @@ const ( EnhancedExternalAuthProviderBitBucketServer EnhancedExternalAuthProvider = "bitbucket-server" EnhancedExternalAuthProviderSlack EnhancedExternalAuthProvider = "slack" EnhancedExternalAuthProviderJFrog EnhancedExternalAuthProvider = "jfrog" + EnhancedExternalAuthProviderGitea EnhancedExternalAuthProvider = "gitea" ) type ExternalAuth struct { diff --git a/docs/admin/external-auth.md b/docs/admin/external-auth.md index cab2cc0a5a3ce..ce14f97281073 100644 --- a/docs/admin/external-auth.md +++ b/docs/admin/external-auth.md @@ -124,6 +124,17 @@ CODER_EXTERNAL_AUTH_0_TOKEN_URL="https://gitlab.company.org/oauth/token" CODER_EXTERNAL_AUTH_0_REGEX=gitlab\.company\.org ``` +### Gitea + +```env +CODER_EXTERNAL_AUTH_0_ID="gitea" +CODER_EXTERNAL_AUTH_0_TYPE=gitea +CODER_EXTERNAL_AUTH_0_CLIENT_ID=xxxxxxx +CODER_EXTERNAL_AUTH_0_CLIENT_SECRET=xxxxxxx +# If self managed, set the Auth URL to your Gitea instance +CODER_EXTERNAL_AUTH_0_AUTH_URL="https://gitea.com/login/oauth/authorize" +``` + ### Self-managed git providers Custom authentication and token URLs should be used for self-managed Git diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index c24005c754775..1e27e3c980e23 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -2005,6 +2005,7 @@ export type EnhancedExternalAuthProvider = | "azure-devops" | "bitbucket-cloud" | "bitbucket-server" + | "gitea" | "github" | "gitlab" | "jfrog" @@ -2013,6 +2014,7 @@ export const EnhancedExternalAuthProviders: EnhancedExternalAuthProvider[] = [ "azure-devops", "bitbucket-cloud", "bitbucket-server", + "gitea", "github", "gitlab", "jfrog", diff --git a/site/static/icon/gitea.svg b/site/static/icon/gitea.svg new file mode 100644 index 0000000000000..797d894bc2657 --- /dev/null +++ b/site/static/icon/gitea.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file From 819ff1a8bc9d2739d9bf86a03e3781080d18dc45 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Mon, 26 Feb 2024 12:14:17 -0600 Subject: [PATCH 2/2] make gen --- site/src/theme/icons.json | 1 + 1 file changed, 1 insertion(+) diff --git a/site/src/theme/icons.json b/site/src/theme/icons.json index de791cdd0c122..7fd29e815da53 100644 --- a/site/src/theme/icons.json +++ b/site/src/theme/icons.json @@ -35,6 +35,7 @@ "gateway.svg", "gcp.png", "git.svg", + "gitea.svg", "github.svg", "gitlab.svg", "go.svg",