service_user.go 592 B

1234567891011121314151617181920212223242526272829
  1. package ccm
  2. import (
  3. "sync"
  4. "github.com/sagernet/sing-box/option"
  5. )
  6. type UserManager struct {
  7. accessMutex sync.RWMutex
  8. tokenMap map[string]string
  9. }
  10. func (m *UserManager) UpdateUsers(users []option.CCMUser) {
  11. m.accessMutex.Lock()
  12. defer m.accessMutex.Unlock()
  13. tokenMap := make(map[string]string, len(users))
  14. for _, user := range users {
  15. tokenMap[user.Token] = user.Name
  16. }
  17. m.tokenMap = tokenMap
  18. }
  19. func (m *UserManager) Authenticate(token string) (string, bool) {
  20. m.accessMutex.RLock()
  21. username, found := m.tokenMap[token]
  22. m.accessMutex.RUnlock()
  23. return username, found
  24. }