Skip to content

Commit 0fd1f7a

Browse files
committed
Allow accepting any type as string
1 parent 0b409f3 commit 0fd1f7a

File tree

11 files changed

+90
-79
lines changed

11 files changed

+90
-79
lines changed

cli/cliui/externalauth_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func TestExternalAuth(t *testing.T) {
3131
return []codersdk.TemplateVersionExternalAuth{{
3232
ID: "github",
3333
DisplayName: "GitHub",
34-
Type: codersdk.ExternalAuthProviderGitHub,
34+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
3535
Authenticated: fetched.Load(),
3636
AuthenticateURL: "https://example.com/gitauth/github",
3737
}}, nil

cli/create_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,7 @@ func TestCreateWithGitAuth(t *testing.T) {
613613
OAuth2Config: &testutil.OAuth2Config{},
614614
ID: "github",
615615
Regex: regexp.MustCompile(`github\.com`),
616-
Type: codersdk.ExternalAuthProviderGitHub,
616+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
617617
DisplayName: "GitHub",
618618
}},
619619
IncludeProvisionerDaemon: true,

cmd/cliui/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,12 +336,12 @@ func main() {
336336
count.Add(1)
337337
return []codersdk.TemplateVersionExternalAuth{{
338338
ID: "github",
339-
Type: codersdk.ExternalAuthProviderGitHub,
339+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
340340
Authenticated: githubAuthed.Load(),
341341
AuthenticateURL: "https://example.com/gitauth/github?redirect=" + url.QueryEscape("/gitauth?notify"),
342342
}, {
343343
ID: "gitlab",
344-
Type: codersdk.ExternalAuthProviderGitLab,
344+
Type: codersdk.EnhancedExternalAuthProviderGitLab.String(),
345345
Authenticated: gitlabAuthed.Load(),
346346
AuthenticateURL: "https://example.com/gitauth/gitlab?redirect=" + url.QueryEscape("/gitauth?notify"),
347347
}}, nil

coderd/externalauth/externalauth.go

Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ type Config struct {
3535
// ID is a unique identifier for the authenticator.
3636
ID string
3737
// Type is the type of provider.
38-
Type codersdk.ExternalAuthProvider
38+
Type string
3939
// DeviceAuth is set if the provider uses the device flow.
4040
DeviceAuth *DeviceAuth
4141
// DisplayName is the name of the provider to display to the user.
@@ -117,7 +117,7 @@ validate:
117117
// to the read replica in time.
118118
//
119119
// We do an exponential backoff here to give the write time to propagate.
120-
if c.Type == codersdk.ExternalAuthProviderGitHub && r.Wait(retryCtx) {
120+
if c.Type == string(codersdk.EnhancedExternalAuthProviderGitHub) && r.Wait(retryCtx) {
121121
goto validate
122122
}
123123
// The token is no longer valid!
@@ -173,7 +173,7 @@ func (c *Config) ValidateToken(ctx context.Context, token string) (bool, *coders
173173
}
174174

175175
var user *codersdk.ExternalAuthUser
176-
if c.Type == codersdk.ExternalAuthProviderGitHub {
176+
if c.Type == string(codersdk.EnhancedExternalAuthProviderGitHub) {
177177
var ghUser github.User
178178
err = json.NewDecoder(res.Body).Decode(&ghUser)
179179
if err == nil {
@@ -219,7 +219,7 @@ func (c *Config) AppInstallations(ctx context.Context, token string) ([]codersdk
219219
return nil, false, nil
220220
}
221221
installs := []codersdk.ExternalAuthAppInstallation{}
222-
if c.Type == codersdk.ExternalAuthProviderGitHub {
222+
if c.Type == string(codersdk.EnhancedExternalAuthProviderGitHub) {
223223
var ghInstalls struct {
224224
Installations []*github.Installation `json:"installations"`
225225
}
@@ -368,24 +368,10 @@ func ConvertConfig(entries []codersdk.ExternalAuthConfig, accessURL *url.URL) ([
368368
for _, entry := range entries {
369369
entry := entry
370370

371-
var typ codersdk.ExternalAuthProvider
372-
switch codersdk.ExternalAuthProvider(entry.Type) {
373-
case codersdk.ExternalAuthProviderAzureDevops:
374-
typ = codersdk.ExternalAuthProviderAzureDevops
375-
case codersdk.ExternalAuthProviderBitBucket:
376-
typ = codersdk.ExternalAuthProviderBitBucket
377-
case codersdk.ExternalAuthProviderGitHub:
378-
typ = codersdk.ExternalAuthProviderGitHub
379-
case codersdk.ExternalAuthProviderGitLab:
380-
typ = codersdk.ExternalAuthProviderGitLab
381-
default:
382-
typ = codersdk.ExternalAuthProvider(entry.Type)
383-
}
384-
385371
// Applies defaults to the config entry.
386372
// This allows users to very simply state that they type is "GitHub",
387373
// apply their client secret and ID, and have the UI appear nicely.
388-
applyDefaultsToConfig(typ, &entry)
374+
applyDefaultsToConfig(&entry)
389375

390376
valid := httpapi.NameValid(entry.ID)
391377
if valid != nil {
@@ -400,8 +386,8 @@ func ConvertConfig(entries []codersdk.ExternalAuthConfig, accessURL *url.URL) ([
400386

401387
_, exists := ids[entry.ID]
402388
if exists {
403-
if entry.ID == string(typ) {
404-
return nil, xerrors.Errorf("multiple %s external auth providers provided. you must specify a unique id for each", typ)
389+
if entry.ID == entry.Type {
390+
return nil, xerrors.Errorf("multiple %s external auth providers provided. you must specify a unique id for each", entry.Type)
405391
}
406392
return nil, xerrors.Errorf("multiple external auth providers exist with the id %q. specify a unique id for each", entry.ID)
407393
}
@@ -433,15 +419,15 @@ func ConvertConfig(entries []codersdk.ExternalAuthConfig, accessURL *url.URL) ([
433419

434420
var oauthConfig OAuth2Config = oc
435421
// Azure DevOps uses JWT token authentication!
436-
if typ == codersdk.ExternalAuthProviderAzureDevops {
422+
if entry.Type == string(codersdk.EnhancedExternalAuthProviderAzureDevops) {
437423
oauthConfig = &jwtConfig{oc}
438424
}
439425

440426
cfg := &Config{
441427
OAuth2Config: oauthConfig,
442428
ID: entry.ID,
443429
Regex: regex,
444-
Type: typ,
430+
Type: entry.Type,
445431
NoRefresh: entry.NoRefresh,
446432
ValidateURL: entry.ValidateURL,
447433
AppInstallationsURL: entry.AppInstallationsURL,
@@ -468,8 +454,8 @@ func ConvertConfig(entries []codersdk.ExternalAuthConfig, accessURL *url.URL) ([
468454
}
469455

470456
// applyDefaultsToConfig applies defaults to the config entry.
471-
func applyDefaultsToConfig(typ codersdk.ExternalAuthProvider, config *codersdk.ExternalAuthConfig) {
472-
defaults := defaults[typ]
457+
func applyDefaultsToConfig(config *codersdk.ExternalAuthConfig) {
458+
defaults := defaults[codersdk.EnhancedExternalAuthProvider(config.Type)]
473459
if config.AuthURL == "" {
474460
config.AuthURL = defaults.AuthURL
475461
}
@@ -503,27 +489,27 @@ func applyDefaultsToConfig(typ codersdk.ExternalAuthProvider, config *codersdk.E
503489

504490
// Apply defaults if it's still empty...
505491
if config.ID == "" {
506-
config.ID = string(typ)
492+
config.ID = config.Type
507493
}
508494
if config.DisplayName == "" {
509-
config.DisplayName = string(typ)
495+
config.DisplayName = config.Type
510496
}
511497
if config.DisplayIcon == "" {
512498
// This is a key emoji.
513499
config.DisplayIcon = "/emojis/1f511.png"
514500
}
515501
}
516502

517-
var defaults = map[codersdk.ExternalAuthProvider]codersdk.ExternalAuthConfig{
518-
codersdk.ExternalAuthProviderAzureDevops: {
503+
var defaults = map[codersdk.EnhancedExternalAuthProvider]codersdk.ExternalAuthConfig{
504+
codersdk.EnhancedExternalAuthProviderAzureDevops: {
519505
AuthURL: "https://app.vssps.visualstudio.com/oauth2/authorize",
520506
TokenURL: "https://app.vssps.visualstudio.com/oauth2/token",
521507
DisplayName: "Azure DevOps",
522508
DisplayIcon: "/icon/azure-devops.svg",
523509
Regex: `^(https?://)?dev\.azure\.com(/.*)?$`,
524510
Scopes: []string{"vso.code_write"},
525511
},
526-
codersdk.ExternalAuthProviderBitBucket: {
512+
codersdk.EnhancedExternalAuthProviderBitBucket: {
527513
AuthURL: "https://bitbucket.org/site/oauth2/authorize",
528514
TokenURL: "https://bitbucket.org/site/oauth2/access_token",
529515
ValidateURL: "https://api.bitbucket.org/2.0/user",
@@ -532,7 +518,7 @@ var defaults = map[codersdk.ExternalAuthProvider]codersdk.ExternalAuthConfig{
532518
Regex: `^(https?://)?bitbucket\.org(/.*)?$`,
533519
Scopes: []string{"account", "repository:write"},
534520
},
535-
codersdk.ExternalAuthProviderGitLab: {
521+
codersdk.EnhancedExternalAuthProviderGitLab: {
536522
AuthURL: "https://gitlab.com/oauth/authorize",
537523
TokenURL: "https://gitlab.com/oauth/token",
538524
ValidateURL: "https://gitlab.com/oauth/token/info",
@@ -541,7 +527,7 @@ var defaults = map[codersdk.ExternalAuthProvider]codersdk.ExternalAuthConfig{
541527
Regex: `^(https?://)?gitlab\.com(/.*)?$`,
542528
Scopes: []string{"write_repository"},
543529
},
544-
codersdk.ExternalAuthProviderGitHub: {
530+
codersdk.EnhancedExternalAuthProviderGitHub: {
545531
AuthURL: xgithub.Endpoint.AuthURL,
546532
TokenURL: xgithub.Endpoint.TokenURL,
547533
ValidateURL: "https://api.github.com/user",

coderd/externalauth/externalauth_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ func TestRefreshToken(t *testing.T) {
176176
}),
177177
},
178178
GitConfigOpt: func(cfg *externalauth.Config) {
179-
cfg.Type = codersdk.ExternalAuthProviderGitHub
179+
cfg.Type = codersdk.EnhancedExternalAuthProviderGitHub.String()
180180
},
181181
})
182182

@@ -206,7 +206,7 @@ func TestRefreshToken(t *testing.T) {
206206
}),
207207
},
208208
GitConfigOpt: func(cfg *externalauth.Config) {
209-
cfg.Type = codersdk.ExternalAuthProviderGitHub
209+
cfg.Type = codersdk.EnhancedExternalAuthProviderGitHub.String()
210210
},
211211
})
212212

@@ -237,7 +237,7 @@ func TestRefreshToken(t *testing.T) {
237237
}),
238238
},
239239
GitConfigOpt: func(cfg *externalauth.Config) {
240-
cfg.Type = codersdk.ExternalAuthProviderGitHub
240+
cfg.Type = codersdk.EnhancedExternalAuthProviderGitHub.String()
241241
},
242242
DB: db,
243243
})
@@ -272,32 +272,32 @@ func TestConvertYAML(t *testing.T) {
272272
}{{
273273
Name: "InvalidID",
274274
Input: []codersdk.ExternalAuthConfig{{
275-
Type: string(codersdk.ExternalAuthProviderGitHub),
275+
Type: string(codersdk.EnhancedExternalAuthProviderGitHub),
276276
ID: "$hi$",
277277
}},
278278
Error: "doesn't have a valid id",
279279
}, {
280280
Name: "NoClientID",
281281
Input: []codersdk.ExternalAuthConfig{{
282-
Type: string(codersdk.ExternalAuthProviderGitHub),
282+
Type: string(codersdk.EnhancedExternalAuthProviderGitHub),
283283
}},
284284
Error: "client_id must be provided",
285285
}, {
286286
Name: "DuplicateType",
287287
Input: []codersdk.ExternalAuthConfig{{
288-
Type: string(codersdk.ExternalAuthProviderGitHub),
288+
Type: string(codersdk.EnhancedExternalAuthProviderGitHub),
289289
ClientID: "example",
290290
ClientSecret: "example",
291291
}, {
292-
Type: string(codersdk.ExternalAuthProviderGitHub),
292+
Type: string(codersdk.EnhancedExternalAuthProviderGitHub),
293293
ClientID: "example-2",
294294
ClientSecret: "example-2",
295295
}},
296296
Error: "multiple github external auth providers provided",
297297
}, {
298298
Name: "InvalidRegex",
299299
Input: []codersdk.ExternalAuthConfig{{
300-
Type: string(codersdk.ExternalAuthProviderGitHub),
300+
Type: string(codersdk.EnhancedExternalAuthProviderGitHub),
301301
ClientID: "example",
302302
ClientSecret: "example",
303303
Regex: `\K`,
@@ -306,7 +306,7 @@ func TestConvertYAML(t *testing.T) {
306306
}, {
307307
Name: "NoDeviceURL",
308308
Input: []codersdk.ExternalAuthConfig{{
309-
Type: string(codersdk.ExternalAuthProviderGitLab),
309+
Type: string(codersdk.EnhancedExternalAuthProviderGitLab),
310310
ClientID: "example",
311311
ClientSecret: "example",
312312
DeviceFlow: true,
@@ -329,7 +329,7 @@ func TestConvertYAML(t *testing.T) {
329329
t.Run("CustomScopesAndEndpoint", func(t *testing.T) {
330330
t.Parallel()
331331
config, err := externalauth.ConvertConfig([]codersdk.ExternalAuthConfig{{
332-
Type: string(codersdk.ExternalAuthProviderGitLab),
332+
Type: string(codersdk.EnhancedExternalAuthProviderGitLab),
333333
ClientID: "id",
334334
ClientSecret: "secret",
335335
AuthURL: "https://auth.com",

coderd/externalauth_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func TestExternalAuthByID(t *testing.T) {
3434
ExternalAuthConfigs: []*externalauth.Config{{
3535
ID: "test",
3636
OAuth2Config: &testutil.OAuth2Config{},
37-
Type: codersdk.ExternalAuthProviderGitHub,
37+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
3838
}},
3939
})
4040
coderdtest.CreateFirstUser(t, client)
@@ -51,7 +51,7 @@ func TestExternalAuthByID(t *testing.T) {
5151
ID: "test",
5252
OAuth2Config: &testutil.OAuth2Config{},
5353
// AzureDevops doesn't have a user endpoint!
54-
Type: codersdk.ExternalAuthProviderAzureDevops,
54+
Type: codersdk.EnhancedExternalAuthProviderAzureDevops.String(),
5555
}},
5656
})
5757
coderdtest.CreateFirstUser(t, client)
@@ -75,7 +75,7 @@ func TestExternalAuthByID(t *testing.T) {
7575
ID: "test",
7676
ValidateURL: validateSrv.URL,
7777
OAuth2Config: &testutil.OAuth2Config{},
78-
Type: codersdk.ExternalAuthProviderGitHub,
78+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
7979
}},
8080
})
8181
coderdtest.CreateFirstUser(t, client)
@@ -116,7 +116,7 @@ func TestExternalAuthByID(t *testing.T) {
116116
ValidateURL: srv.URL + "/user",
117117
AppInstallationsURL: srv.URL + "/installs",
118118
OAuth2Config: &testutil.OAuth2Config{},
119-
Type: codersdk.ExternalAuthProviderGitHub,
119+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
120120
}},
121121
})
122122
coderdtest.CreateFirstUser(t, client)
@@ -249,7 +249,7 @@ func TestGitAuthCallback(t *testing.T) {
249249
OAuth2Config: &testutil.OAuth2Config{},
250250
ID: "github",
251251
Regex: regexp.MustCompile(`github\.com`),
252-
Type: codersdk.ExternalAuthProviderGitHub,
252+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
253253
}},
254254
})
255255
user := coderdtest.CreateFirstUser(t, client)
@@ -278,7 +278,7 @@ func TestGitAuthCallback(t *testing.T) {
278278
OAuth2Config: &testutil.OAuth2Config{},
279279
ID: "github",
280280
Regex: regexp.MustCompile(`github\.com`),
281-
Type: codersdk.ExternalAuthProviderGitHub,
281+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
282282
}},
283283
})
284284
resp := coderdtest.RequestExternalAuthCallback(t, "github", client)
@@ -292,7 +292,7 @@ func TestGitAuthCallback(t *testing.T) {
292292
OAuth2Config: &testutil.OAuth2Config{},
293293
ID: "github",
294294
Regex: regexp.MustCompile(`github\.com`),
295-
Type: codersdk.ExternalAuthProviderGitHub,
295+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
296296
}},
297297
})
298298
_ = coderdtest.CreateFirstUser(t, client)
@@ -319,7 +319,7 @@ func TestGitAuthCallback(t *testing.T) {
319319
OAuth2Config: &testutil.OAuth2Config{},
320320
ID: "github",
321321
Regex: regexp.MustCompile(`github\.com`),
322-
Type: codersdk.ExternalAuthProviderGitHub,
322+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
323323
}},
324324
})
325325
user := coderdtest.CreateFirstUser(t, client)
@@ -376,7 +376,7 @@ func TestGitAuthCallback(t *testing.T) {
376376
},
377377
ID: "github",
378378
Regex: regexp.MustCompile(`github\.com`),
379-
Type: codersdk.ExternalAuthProviderGitHub,
379+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
380380
NoRefresh: true,
381381
}},
382382
})
@@ -420,7 +420,7 @@ func TestGitAuthCallback(t *testing.T) {
420420
OAuth2Config: &testutil.OAuth2Config{},
421421
ID: "github",
422422
Regex: regexp.MustCompile(`github\.com`),
423-
Type: codersdk.ExternalAuthProviderGitHub,
423+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
424424
}},
425425
})
426426
user := coderdtest.CreateFirstUser(t, client)

coderd/templateversions_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ func TestTemplateVersionsExternalAuth(t *testing.T) {
342342
OAuth2Config: &testutil.OAuth2Config{},
343343
ID: "github",
344344
Regex: regexp.MustCompile(`github\.com`),
345-
Type: codersdk.ExternalAuthProviderGitHub,
345+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
346346
}},
347347
})
348348
user := coderdtest.CreateFirstUser(t, client)

0 commit comments

Comments
 (0)