manager.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package oauth2 // import "miniflux.app/v2/internal/oauth2"
  4. import (
  5. "context"
  6. "errors"
  7. "miniflux.app/v2/internal/logger"
  8. )
  9. // Manager handles OAuth2 providers.
  10. type Manager struct {
  11. providers map[string]Provider
  12. }
  13. // FindProvider returns the given provider.
  14. func (m *Manager) FindProvider(name string) (Provider, error) {
  15. if provider, found := m.providers[name]; found {
  16. return provider, nil
  17. }
  18. return nil, errors.New("oauth2 provider not found")
  19. }
  20. // AddProvider add a new OAuth2 provider.
  21. func (m *Manager) AddProvider(name string, provider Provider) {
  22. m.providers[name] = provider
  23. }
  24. // NewManager returns a new Manager.
  25. func NewManager(ctx context.Context, clientID, clientSecret, redirectURL, oidcDiscoveryEndpoint string) *Manager {
  26. m := &Manager{providers: make(map[string]Provider)}
  27. m.AddProvider("google", newGoogleProvider(clientID, clientSecret, redirectURL))
  28. if oidcDiscoveryEndpoint != "" {
  29. if genericOidcProvider, err := newOidcProvider(ctx, clientID, clientSecret, redirectURL, oidcDiscoveryEndpoint); err != nil {
  30. logger.Error("[OAuth2] failed to initialize OIDC provider: %v", err)
  31. } else {
  32. m.AddProvider("oidc", genericOidcProvider)
  33. }
  34. }
  35. return m
  36. }