mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Andrew Thornton <art27@cantab.net>
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
package jwt
 | 
						|
 | 
						|
import (
 | 
						|
	"sync"
 | 
						|
)
 | 
						|
 | 
						|
var signingMethods = map[string]func() SigningMethod{}
 | 
						|
var signingMethodLock = new(sync.RWMutex)
 | 
						|
 | 
						|
// Implement SigningMethod to add new methods for signing or verifying tokens.
 | 
						|
type SigningMethod interface {
 | 
						|
	Verify(signingString, signature string, key interface{}) error // Returns nil if signature is valid
 | 
						|
	Sign(signingString string, key interface{}) (string, error)    // Returns encoded signature or error
 | 
						|
	Alg() string                                                   // returns the alg identifier for this method (example: 'HS256')
 | 
						|
}
 | 
						|
 | 
						|
// Register the "alg" name and a factory function for signing method.
 | 
						|
// This is typically done during init() in the method's implementation
 | 
						|
func RegisterSigningMethod(alg string, f func() SigningMethod) {
 | 
						|
	signingMethodLock.Lock()
 | 
						|
	defer signingMethodLock.Unlock()
 | 
						|
 | 
						|
	signingMethods[alg] = f
 | 
						|
}
 | 
						|
 | 
						|
// Get a signing method from an "alg" string
 | 
						|
func GetSigningMethod(alg string) (method SigningMethod) {
 | 
						|
	signingMethodLock.RLock()
 | 
						|
	defer signingMethodLock.RUnlock()
 | 
						|
 | 
						|
	if methodF, ok := signingMethods[alg]; ok {
 | 
						|
		method = methodF()
 | 
						|
	}
 | 
						|
	return
 | 
						|
}
 |