Skip to content

Commit 8b61ff3

Browse files
authored
fix: apply appropriate artifactory defaults for external auth (#11580)
1 parent f3d091f commit 8b61ff3

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

coderd/externalauth/externalauth.go

+41
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,9 @@ func applyDefaultsToConfig(config *codersdk.ExternalAuthConfig) {
531531
case codersdk.EnhancedExternalAuthProviderBitBucketServer:
532532
copyDefaultSettings(config, bitbucketServerDefaults(config))
533533
return
534+
case codersdk.EnhancedExternalAuthProviderJFrog:
535+
copyDefaultSettings(config, jfrogArtifactoryDefaults(config))
536+
return
534537
default:
535538
// No defaults for this type. We still want to run this apply with
536539
// an empty set of defaults.
@@ -623,6 +626,44 @@ func bitbucketServerDefaults(config *codersdk.ExternalAuthConfig) codersdk.Exter
623626
return defaults
624627
}
625628

629+
func jfrogArtifactoryDefaults(config *codersdk.ExternalAuthConfig) codersdk.ExternalAuthConfig {
630+
defaults := codersdk.ExternalAuthConfig{
631+
DisplayName: "JFrog Artifactory",
632+
Scopes: []string{"applied-permissions/user"},
633+
DisplayIcon: "/icon/jfrog.svg",
634+
}
635+
// Artifactory servers will have some base url, e.g. https://jfrog.coder.com.
636+
// We will grab this from the Auth URL. This choice is not arbitrary. It is a
637+
// static string for all integrations on the same artifactory.
638+
if config.AuthURL == "" {
639+
// No auth url, means we cannot guess the urls.
640+
return defaults
641+
}
642+
643+
auth, err := url.Parse(config.AuthURL)
644+
if err != nil {
645+
// We need a valid URL to continue with.
646+
return defaults
647+
}
648+
649+
if config.ClientID == "" {
650+
return defaults
651+
}
652+
653+
tokenURL := auth.ResolveReference(&url.URL{Path: fmt.Sprintf("/access/api/v1/integrations/%s/token", config.ClientID)})
654+
defaults.TokenURL = tokenURL.String()
655+
656+
// validate needs to return a 200 when logged in and a 401 when unauthenticated.
657+
validate := auth.ResolveReference(&url.URL{Path: "/access/api/v1/system/ping"})
658+
defaults.ValidateURL = validate.String()
659+
660+
// Some options omitted:
661+
// - Regex: Artifactory can span pretty much all domains (git, docker, etc).
662+
// I do not think we can intelligently guess this as a default.
663+
664+
return defaults
665+
}
666+
626667
var staticDefaults = map[codersdk.EnhancedExternalAuthProvider]codersdk.ExternalAuthConfig{
627668
codersdk.EnhancedExternalAuthProviderAzureDevops: {
628669
AuthURL: "https://app.vssps.visualstudio.com/oauth2/authorize",

0 commit comments

Comments
 (0)