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  }