userset.go 836 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package core
  2. import (
  3. "encoding/base64"
  4. )
  5. type UserSet struct {
  6. validUserIds []ID
  7. userIdsAskHash map[string]int
  8. }
  9. func NewUserSet() *UserSet {
  10. vuSet := new(UserSet)
  11. vuSet.validUserIds = make([]ID, 0, 16)
  12. vuSet.userIdsAskHash = make(map[string]int)
  13. return vuSet
  14. }
  15. func hashBytesToString(hash []byte) string {
  16. return base64.StdEncoding.EncodeToString(hash)
  17. }
  18. func (us *UserSet) AddUser(user User) error {
  19. id := user.Id
  20. us.validUserIds = append(us.validUserIds, id)
  21. idBase64 := hashBytesToString(id.Hash([]byte("ASK")))
  22. us.userIdsAskHash[idBase64] = len(us.validUserIds) - 1
  23. return nil
  24. }
  25. func (us UserSet) IsValidUserId(askHash []byte) (*ID, bool) {
  26. askBase64 := hashBytesToString(askHash)
  27. idIndex, found := us.userIdsAskHash[askBase64]
  28. if found {
  29. return &us.validUserIds[idIndex], true
  30. }
  31. return nil, false
  32. }