manager.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. "log/slog"
  8. )
  9. type Manager struct {
  10. providers map[string]Provider
  11. }
  12. func (m *Manager) FindProvider(name string) (Provider, error) {
  13. if provider, found := m.providers[name]; found {
  14. return provider, nil
  15. }
  16. return nil, errors.New("oauth2 provider not found")
  17. }
  18. func (m *Manager) AddProvider(name string, provider Provider) {
  19. m.providers[name] = provider
  20. }
  21. func NewManager(ctx context.Context, clientID, clientSecret, redirectURL, oidcDiscoveryEndpoint string) *Manager {
  22. m := &Manager{providers: make(map[string]Provider)}
  23. if oidcDiscoveryEndpoint != "" {
  24. if clientSecret == "" {
  25. slog.Warn("OIDC client secret is empty or missing.")
  26. }
  27. if genericOidcProvider, err := NewOidcProvider(ctx, clientID, clientSecret, redirectURL, oidcDiscoveryEndpoint); err != nil {
  28. slog.Error("Failed to initialize OIDC provider",
  29. slog.Any("error", err),
  30. )
  31. } else {
  32. m.AddProvider("oidc", genericOidcProvider)
  33. }
  34. } else {
  35. m.AddProvider("google", NewGoogleProvider(clientID, clientSecret, redirectURL))
  36. }
  37. return m
  38. }