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  }