/
access_token.go
67 lines (54 loc) · 1.86 KB
/
access_token.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
package models
import (
"database/sql"
"encoding/json"
"time"
"github.com/google/uuid"
"gorm.io/gorm"
"github.com/duc-cnzj/mars/api/v4/types"
"github.com/duc-cnzj/mars/v4/internal/contracts"
"github.com/duc-cnzj/mars/v4/internal/utils/date"
)
type AccessToken struct {
ID int `json:"id" gorm:"primaryKey;"`
Token string `json:"token" gorm:"unique;size:255;not null;"`
Usage string `json:"usage" gorm:"size:50;"`
Email string `json:"email" gorm:"index;not null;default:'';"`
ExpiredAt time.Time `json:"expired_at"`
LastUsedAt sql.NullTime `json:"last_used_at"`
UserInfo string `json:"-"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"deleted_at"`
}
func NewAccessToken(usage string, expiredAt time.Time, user *contracts.UserInfo) *AccessToken {
return &AccessToken{Usage: usage, Email: user.Email, ExpiredAt: expiredAt, Token: uuid.New().String(), UserInfo: user.Json()}
}
// Expired token is expired.
func (at *AccessToken) Expired() bool {
return time.Now().After(at.ExpiredAt)
}
// GetUserInfo return token userinfo.
func (at *AccessToken) GetUserInfo() contracts.UserInfo {
var info contracts.UserInfo
json.Unmarshal([]byte(at.UserInfo), &info)
return info
}
func (at *AccessToken) ProtoTransform() *types.AccessTokenModel {
var lastUsedAt = ""
if at.LastUsedAt.Valid {
lastUsedAt = date.ToHumanizeDatetimeString(&at.LastUsedAt.Time)
}
return &types.AccessTokenModel{
Token: at.Token,
Email: at.Email,
ExpiredAt: date.ToRFC3339DatetimeString(&at.ExpiredAt),
Usage: at.Usage,
LastUsedAt: lastUsedAt,
IsDeleted: at.DeletedAt.Valid,
IsExpired: at.Expired(),
CreatedAt: date.ToRFC3339DatetimeString(&at.CreatedAt),
UpdatedAt: date.ToRFC3339DatetimeString(&at.UpdatedAt),
DeletedAt: date.ToRFC3339DatetimeString(&at.DeletedAt.Time),
}
}