forked from keybase/client
/
usermemo.go
59 lines (44 loc) · 1.12 KB
/
usermemo.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package libkb
import (
"sync"
"time"
keybase1 "github.com/keybase/client/go/protocol/keybase1"
)
type UserPlusKeysMemo struct {
upk keybase1.UserPlusKeys
validUntil time.Time
sync.RWMutex
Contextified
}
func NewUserPlusKeysMemo(g *GlobalContext) *UserPlusKeysMemo {
return &UserPlusKeysMemo{
Contextified: NewContextified(g),
}
}
func (u *UserPlusKeysMemo) Get(uid keybase1.UID) (keybase1.UserPlusKeys, bool) {
u.RLock()
defer u.RUnlock()
if !u.upk.Uid.Equal(uid) {
return keybase1.UserPlusKeys{}, false
}
if time.Now().Before(u.validUntil) {
u.G().Log.Debug("UserPlusKeysMemo: cache expired")
return keybase1.UserPlusKeys{}, false
}
u.G().Log.Debug("UserPlusKeysMemo: cache hit")
return u.upk, true
}
func (u *UserPlusKeysMemo) Set(upk keybase1.UserPlusKeys) {
u.Lock()
defer u.Unlock()
u.G().Log.Debug("UserPlusKeysMemo: set %s, %s", upk.Username, upk.Uid)
u.upk = upk
u.validUntil = time.Now().Add(1 * time.Minute)
}
func (u *UserPlusKeysMemo) Clear() {
u.Lock()
defer u.Unlock()
u.G().Log.Debug("UserPlusKeysMemo: clear")
u.upk = keybase1.UserPlusKeys{}
u.validUntil = time.Time{}
}