gitea源码

source_register.go 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package oauth2
  4. import (
  5. "fmt"
  6. )
  7. // RegisterSource causes an OAuth2 configuration to be registered
  8. func (source *Source) RegisterSource() error {
  9. err := RegisterProviderWithGothic(source.AuthSource.Name, source)
  10. return wrapOpenIDConnectInitializeError(err, source.AuthSource.Name, source)
  11. }
  12. // UnregisterSource causes an OAuth2 configuration to be unregistered
  13. func (source *Source) UnregisterSource() error {
  14. RemoveProviderFromGothic(source.AuthSource.Name)
  15. return nil
  16. }
  17. // ErrOpenIDConnectInitialize represents a "OpenIDConnectInitialize" kind of error.
  18. type ErrOpenIDConnectInitialize struct {
  19. OpenIDConnectAutoDiscoveryURL string
  20. ProviderName string
  21. Cause error
  22. }
  23. // IsErrOpenIDConnectInitialize checks if an error is a ExternalLoginUserAlreadyExist.
  24. func IsErrOpenIDConnectInitialize(err error) bool {
  25. _, ok := err.(ErrOpenIDConnectInitialize)
  26. return ok
  27. }
  28. func (err ErrOpenIDConnectInitialize) Error() string {
  29. return fmt.Sprintf("Failed to initialize OpenID Connect Provider with name '%s' with url '%s': %v", err.ProviderName, err.OpenIDConnectAutoDiscoveryURL, err.Cause)
  30. }
  31. func (err ErrOpenIDConnectInitialize) Unwrap() error {
  32. return err.Cause
  33. }
  34. // wrapOpenIDConnectInitializeError is used to wrap the error but this cannot be done in modules/auth/oauth2
  35. // inside oauth2: import cycle not allowed models -> modules/auth/oauth2 -> models
  36. func wrapOpenIDConnectInitializeError(err error, providerName string, source *Source) error {
  37. if err != nil && source.Provider == "openidConnect" {
  38. err = ErrOpenIDConnectInitialize{ProviderName: providerName, OpenIDConnectAutoDiscoveryURL: source.OpenIDConnectAutoDiscoveryURL, Cause: err}
  39. }
  40. return err
  41. }