@@ -531,6 +531,9 @@ func applyDefaultsToConfig(config *codersdk.ExternalAuthConfig) {
531
531
case codersdk .EnhancedExternalAuthProviderBitBucketServer :
532
532
copyDefaultSettings (config , bitbucketServerDefaults (config ))
533
533
return
534
+ case codersdk .EnhancedExternalAuthProviderJFrog :
535
+ copyDefaultSettings (config , jfrogArtifactoryDefaults (config ))
536
+ return
534
537
default :
535
538
// No defaults for this type. We still want to run this apply with
536
539
// an empty set of defaults.
@@ -623,6 +626,44 @@ func bitbucketServerDefaults(config *codersdk.ExternalAuthConfig) codersdk.Exter
623
626
return defaults
624
627
}
625
628
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
+
626
667
var staticDefaults = map [codersdk.EnhancedExternalAuthProvider ]codersdk.ExternalAuthConfig {
627
668
codersdk .EnhancedExternalAuthProviderAzureDevops : {
628
669
AuthURL : "https://app.vssps.visualstudio.com/oauth2/authorize" ,
0 commit comments