forked from v2ray/v2ray-core
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathvuserset.go
39 lines (31 loc) · 801 Bytes
/
vuserset.go
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
package core
import (
"encoding/base64"
)
type VUserSet struct {
validUserIds []VID
userIdsAskHash map[string]int
}
func NewVUserSet() *VUserSet {
vuSet := new(VUserSet)
vuSet.validUserIds = make([]VID, 0, 16)
return vuSet
}
func hashBytesToString(hash []byte) string {
return base64.StdEncoding.EncodeToString(hash)
}
func (us *VUserSet) AddUser(user VUser) error {
id := user.Id
us.validUserIds = append(us.validUserIds, id)
idBase64 := hashBytesToString(id.Hash([]byte("ASK")))
us.userIdsAskHash[idBase64] = len(us.validUserIds) - 1
return nil
}
func (us VUserSet) IsValidUserId(askHash []byte) (*VID, bool) {
askBase64 := hashBytesToString(askHash)
idIndex, found := us.userIdsAskHash[askBase64]
if found {
return &us.validUserIds[idIndex], true
}
return nil, false
}