gitee.com/h79/goutils@v1.22.10/auth/secretmgr.go (about) 1 package auth 2 3 import ( 4 "gitee.com/h79/goutils/auth/token" 5 "gitee.com/h79/goutils/common/secret" 6 "gitee.com/h79/goutils/loader" 7 "sync" 8 ) 9 10 // 保证 SecretMgr struct implement token.Secret 11 var _ token.Secret = (*SecretMgr)(nil) 12 13 type ItemSecret interface { 14 GetSecret() secret.Secret 15 SetEnabled(enable bool) 16 // EnableFlag return 0= disable, 1=enable, 2=not exist 17 EnableFlag() int 18 } 19 20 type SecretMgr struct { 21 locker sync.Mutex 22 items map[string]ItemSecret 23 } 24 25 func NewSecretMgr() *SecretMgr { 26 return &SecretMgr{ 27 items: make(map[string]ItemSecret, 0), 28 } 29 } 30 31 func (mgr *SecretMgr) LoadFromFile(file string) error { 32 items := map[string]Item{} 33 ll := loader.NewFiler(file, "json", &items) 34 if err, _ := ll.Read(); err != nil { 35 return err 36 } 37 return mgr.Load(items) 38 } 39 40 func (mgr *SecretMgr) Load(items map[string]Item) error { 41 for k, item := range items { 42 mgr.AddItem(k, &item) 43 } 44 return nil 45 } 46 47 func (mgr *SecretMgr) AddSecret(key string, secret secret.Secret) { 48 mgr.AddItem(key, &Item{Enabled: true, Secret: secret}) 49 } 50 51 func (mgr *SecretMgr) AddItem(key string, item ItemSecret) { 52 if len(key) <= 0 { 53 return 54 } 55 { 56 mgr.locker.Lock() 57 defer mgr.locker.Unlock() 58 if _, ok := mgr.items[key]; ok { 59 return 60 } 61 mgr.items[key] = item 62 } 63 } 64 65 // GetSecret implement token.Secret interface 66 func (mgr *SecretMgr) GetSecret(key string) secret.Secret { 67 mgr.locker.Lock() 68 defer mgr.locker.Unlock() 69 if st, ok := mgr.items[key]; ok { 70 return st.GetSecret() 71 } 72 return secret.Secret{} 73 } 74 75 // SetEnabled implement token.Secret interface 76 func (mgr *SecretMgr) SetEnabled(key string, enable bool) { 77 mgr.locker.Lock() 78 defer mgr.locker.Unlock() 79 if st, ok := mgr.items[key]; ok { 80 st.SetEnabled(enable) 81 } 82 } 83 84 // EnableFlag implement token.Secret interface 85 func (mgr *SecretMgr) EnableFlag(key string) int { 86 mgr.locker.Lock() 87 defer mgr.locker.Unlock() 88 if st, ok := mgr.items[key]; ok { 89 return st.EnableFlag() 90 } 91 return 2 92 }