mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 01:53:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package bearer
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
// Token provides a type wrapping a bearer token and expiration metadata.
 | 
						|
type Token struct {
 | 
						|
	Value string
 | 
						|
 | 
						|
	CanExpire bool
 | 
						|
	Expires   time.Time
 | 
						|
}
 | 
						|
 | 
						|
// Expired returns if the token's Expires time is before or equal to the time
 | 
						|
// provided. If CanExpires is false, Expired will always return false.
 | 
						|
func (t Token) Expired(now time.Time) bool {
 | 
						|
	if !t.CanExpire {
 | 
						|
		return false
 | 
						|
	}
 | 
						|
	now = now.Round(0)
 | 
						|
	return now.Equal(t.Expires) || now.After(t.Expires)
 | 
						|
}
 | 
						|
 | 
						|
// TokenProvider provides interface for retrieving bearer tokens.
 | 
						|
type TokenProvider interface {
 | 
						|
	RetrieveBearerToken(context.Context) (Token, error)
 | 
						|
}
 | 
						|
 | 
						|
// TokenProviderFunc provides a helper utility to wrap a function as a type
 | 
						|
// that implements the TokenProvider interface.
 | 
						|
type TokenProviderFunc func(context.Context) (Token, error)
 | 
						|
 | 
						|
// RetrieveBearerToken calls the wrapped function, returning the Token or
 | 
						|
// error.
 | 
						|
func (fn TokenProviderFunc) RetrieveBearerToken(ctx context.Context) (Token, error) {
 | 
						|
	return fn(ctx)
 | 
						|
}
 | 
						|
 | 
						|
// StaticTokenProvider provides a utility for wrapping a static bearer token
 | 
						|
// value within an implementation of a token provider.
 | 
						|
type StaticTokenProvider struct {
 | 
						|
	Token Token
 | 
						|
}
 | 
						|
 | 
						|
// RetrieveBearerToken returns the static token specified.
 | 
						|
func (s StaticTokenProvider) RetrieveBearerToken(context.Context) (Token, error) {
 | 
						|
	return s.Token, nil
 | 
						|
}
 |