manager.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. m.AddProvider("google", NewGoogleProvider(clientID, clientSecret, redirectURL))
  24. if oidcDiscoveryEndpoint != "" {
  25. if genericOidcProvider, err := NewOidcProvider(ctx, clientID, clientSecret, redirectURL, oidcDiscoveryEndpoint); err != nil {
  26. slog.Error("Failed to initialize OIDC provider",
  27. slog.Any("error", err),
  28. )
  29. } else {
  30. m.AddProvider("oidc", genericOidcProvider)
  31. }
  32. }
  33. if clientSecret == "" {
  34. slog.Warn("OIDC client secret is empty or missing.")
  35. }
  36. return m
  37. }