/
session.go
71 lines (60 loc) · 2.08 KB
/
session.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
60
61
62
63
64
65
66
67
68
69
70
71
package libsf
import (
"encoding/json"
"time"
)
// A Session contains details about a session.
type Session struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
AccessExpiration time.Time `json:"access_expiration"`
RefreshExpiration time.Time `json:"refresh_expiration"`
}
// Defined returns true if session's fields are defined.
func (s Session) Defined() bool {
return s.AccessToken != "" && s.RefreshToken != "" &&
!s.AccessExpiration.IsZero() && !s.RefreshExpiration.IsZero()
}
// AccessExpiredAt returns true if the access token is expired at the given time.
func (s Session) AccessExpiredAt(t time.Time) bool {
return !s.Defined() || t.After(s.AccessExpiration)
}
// AccessExpired returns true if the access token is expired.
func (s Session) AccessExpired() bool {
return s.AccessExpiredAt(time.Now())
}
// RefreshExpired returns true if the refresh token is expired.
func (s Session) RefreshExpired() bool {
return !s.Defined() || time.Now().After(s.RefreshExpiration)
}
func (s *Session) UnmarshalJSON(data []byte) error {
session := struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
AccessExpiration int64 `json:"access_expiration"`
RefreshExpiration int64 `json:"refresh_expiration"`
}{}
err := json.Unmarshal(data, &session)
if err != nil {
return err
}
s.AccessToken = session.AccessToken
s.RefreshToken = session.RefreshToken
s.AccessExpiration = time.UnixMilli(session.AccessExpiration)
s.RefreshExpiration = time.UnixMilli(session.RefreshExpiration)
return nil
}
func (s Session) MarshalJSON() ([]byte, error) {
session := struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
AccessExpiration int64 `json:"access_expiration"`
RefreshExpiration int64 `json:"refresh_expiration"`
}{
AccessToken: s.AccessToken,
RefreshToken: s.RefreshToken,
AccessExpiration: s.AccessExpiration.UnixMilli(),
RefreshExpiration: s.RefreshExpiration.UnixMilli(),
}
return json.Marshal(session)
}