manager.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2017 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package oauth2 // import "miniflux.app/oauth2"
  5. import (
  6. "context"
  7. "errors"
  8. "miniflux.app/logger"
  9. )
  10. // Manager handles OAuth2 providers.
  11. type Manager struct {
  12. providers map[string]Provider
  13. }
  14. // FindProvider returns the given provider.
  15. func (m *Manager) FindProvider(name string) (Provider, error) {
  16. if provider, found := m.providers[name]; found {
  17. return provider, nil
  18. }
  19. return nil, errors.New("oauth2 provider not found")
  20. }
  21. // AddProvider add a new OAuth2 provider.
  22. func (m *Manager) AddProvider(name string, provider Provider) {
  23. m.providers[name] = provider
  24. }
  25. // NewManager returns a new Manager.
  26. func NewManager(ctx context.Context, clientID, clientSecret, redirectURL, oidcDiscoveryEndpoint string) *Manager {
  27. m := &Manager{providers: make(map[string]Provider)}
  28. m.AddProvider("google", newGoogleProvider(clientID, clientSecret, redirectURL))
  29. if oidcDiscoveryEndpoint != "" {
  30. if genericOidcProvider, err := newOidcProvider(ctx, clientID, clientSecret, redirectURL, oidcDiscoveryEndpoint); err != nil {
  31. logger.Error("[OAuth2] failed to initialize OIDC provider: %v", err)
  32. } else {
  33. m.AddProvider("oidc", genericOidcProvider)
  34. }
  35. }
  36. return m
  37. }