aboutsummaryrefslogtreecommitdiffstats
path: root/kube2msb/src/vendor/github.com/coreos/go-oidc/key/repo.go
blob: 1acdeb3614c54f004ad2d9b23c22a2156a32e364 (plain)
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
46
47
48
49
50
51
52
53
54
55
package key

import (
	"errors"
	"sync"
)

var ErrorNoKeys = errors.New("no keys found")

type WritableKeySetRepo interface {
	Set(KeySet) error
}

type ReadableKeySetRepo interface {
	Get() (KeySet, error)
}

type PrivateKeySetRepo interface {
	WritableKeySetRepo
	ReadableKeySetRepo
}

func NewPrivateKeySetRepo() PrivateKeySetRepo {
	return &memPrivateKeySetRepo{}
}

type memPrivateKeySetRepo struct {
	mu  sync.RWMutex
	pks PrivateKeySet
}

func (r *memPrivateKeySetRepo) Set(ks KeySet) error {
	pks, ok := ks.(*PrivateKeySet)
	if !ok {
		return errors.New("unable to cast to PrivateKeySet")
	} else if pks == nil {
		return errors.New("nil KeySet")
	}

	r.mu.Lock()
	defer r.mu.Unlock()

	r.pks = *pks
	return nil
}

func (r *memPrivateKeySetRepo) Get() (KeySet, error) {
	r.mu.RLock()
	defer r.mu.RUnlock()

	if r.pks.keys == nil {
		return nil, ErrorNoKeys
	}
	return KeySet(&r.pks), nil
}