Provider returns a Provider interface for the given name.
(ctx context.Context, name string, scopes string)
| 585 | |
| 586 | // Provider returns a Provider interface for the given name. |
| 587 | func (a *API) Provider(ctx context.Context, name string, scopes string) (provider.Provider, conf.OAuthProviderConfiguration, error) { |
| 588 | config := a.config |
| 589 | db := a.db.WithContext(ctx) |
| 590 | name = strings.ToLower(name) |
| 591 | |
| 592 | var err error |
| 593 | var p provider.Provider |
| 594 | var pConfig conf.OAuthProviderConfiguration |
| 595 | |
| 596 | // Check if this is a custom provider (format: custom:identifier) |
| 597 | if strings.HasPrefix(name, "custom:") { |
| 598 | if !config.CustomOAuth.Enabled { |
| 599 | return nil, conf.OAuthProviderConfiguration{}, fmt.Errorf("custom OAuth providers are disabled") |
| 600 | } |
| 601 | return a.loadCustomProvider(ctx, db, name, scopes) |
| 602 | } |
| 603 | |
| 604 | switch name { |
| 605 | case "apple": |
| 606 | pConfig = config.External.Apple |
| 607 | p, err = provider.NewAppleProvider(ctx, pConfig, a.oidcCache) |
| 608 | case "azure": |
| 609 | pConfig = config.External.Azure |
| 610 | p, err = provider.NewAzureProvider(pConfig, scopes, a.oidcCache) |
| 611 | case "bitbucket": |
| 612 | pConfig = config.External.Bitbucket |
| 613 | p, err = provider.NewBitbucketProvider(pConfig) |
| 614 | case "discord": |
| 615 | pConfig = config.External.Discord |
| 616 | p, err = provider.NewDiscordProvider(pConfig, scopes) |
| 617 | case "facebook": |
| 618 | pConfig = config.External.Facebook |
| 619 | p, err = provider.NewFacebookProvider(pConfig, scopes) |
| 620 | case "figma": |
| 621 | pConfig = config.External.Figma |
| 622 | p, err = provider.NewFigmaProvider(pConfig, scopes) |
| 623 | case "fly": |
| 624 | pConfig = config.External.Fly |
| 625 | p, err = provider.NewFlyProvider(pConfig, scopes) |
| 626 | case "github": |
| 627 | pConfig = config.External.Github |
| 628 | p, err = provider.NewGithubProvider(pConfig, scopes) |
| 629 | case "gitlab": |
| 630 | pConfig = config.External.Gitlab |
| 631 | p, err = provider.NewGitlabProvider(pConfig, scopes) |
| 632 | case "google": |
| 633 | pConfig = config.External.Google |
| 634 | p, err = provider.NewGoogleProvider(ctx, pConfig, scopes, a.oidcCache) |
| 635 | case "kakao": |
| 636 | pConfig = config.External.Kakao |
| 637 | p, err = provider.NewKakaoProvider(pConfig, scopes) |
| 638 | case "keycloak": |
| 639 | pConfig = config.External.Keycloak |
| 640 | p, err = provider.NewKeycloakProvider(pConfig, scopes) |
| 641 | case "linkedin": |
| 642 | pConfig = config.External.Linkedin |
| 643 | p, err = provider.NewLinkedinProvider(pConfig, scopes) |
| 644 | case "linkedin_oidc": |
no test coverage detected