-
Notifications
You must be signed in to change notification settings - Fork 32
/
defaultmanager.go
45 lines (40 loc) · 1.3 KB
/
defaultmanager.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package auth
import (
"errors"
"sync"
)
// DefaultTokenParserConfiguration represents a partition of the configuration
// that is used for configuring the default TokenParser.
type DefaultTokenParserConfiguration interface {
GetAuthClientPublicKeysURL() string
GetEnvironment() string
}
var (
initDefaultTokenParserOnce = &sync.Once{}
defaultTokenParser *TokenParser
)
// InitializeDefaultTokenParser creates the default token parser if it has not created yet.
// This function must be called in main to make sure the default parser is created during service startup.
// It will try to create the default parser only once even if called multiple times.
func InitializeDefaultTokenParser() (*TokenParser, error) {
var returnErr error
initDefaultTokenParserOnce.Do(func() {
keyManager, err := NewKeyManager()
if err != nil {
returnErr = err
return
}
defaultTokenParser, returnErr = NewTokenParser(keyManager)
})
if returnErr != nil {
return nil, returnErr
}
return defaultTokenParser, nil
}
// DefaultTokenParser returns the existing TokenManager instance.
func DefaultTokenParser() (*TokenParser, error) { //nolint:unparam
if defaultTokenParser == nil {
return nil, errors.New("no default TokenParser created, call `InitializeDefaultTokenParser()` first")
}
return defaultTokenParser, nil
}