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