57 lines
2.4 KiB
Go
57 lines
2.4 KiB
Go
package entity
|
||
|
||
import "time"
|
||
|
||
// 時間都以 UnixNano 來做
|
||
|
||
// Token 定義
|
||
type Token struct {
|
||
ID string `json:"id"` // Token 的唯一標識符
|
||
UID string `json:"uid"` // UID
|
||
DeviceID string `json:"device_id"` // Device
|
||
AccessToken string `json:"access_token"` // Access Token
|
||
ExpiresIn int64 `json:"expires_in"` // 存取 Token 的有效時間 UnixNano e.g 過期時間的Expire unix nano
|
||
AccessCreateAt int64 `json:"access_create_at"` // 存取 Token 的創建時間 timestamp
|
||
RefreshToken string `json:"refresh_token"` // 刷新 Token one time token
|
||
RefreshExpiresIn int64 `json:"refresh_expires_in"` // 刷新 Token one time token 的有效時間 UnixNano e.g 過期時間的Expire unix nano
|
||
RefreshCreateAt int64 `json:"refresh_create_at"` // 刷新 Token one time token 的創建時間
|
||
}
|
||
|
||
// AccessTokenExpires 返回存取 Token 的有效期(以秒為單位)。
|
||
func (t *Token) AccessTokenExpires() time.Duration {
|
||
return time.Duration(t.ExpiresIn) * time.Second
|
||
}
|
||
|
||
// RefreshTokenExpires 返回刷新 Token 的有效期(以秒為單位)。
|
||
func (t *Token) RefreshTokenExpires() time.Duration {
|
||
return time.Duration(t.RefreshExpiresIn) * time.Second
|
||
}
|
||
|
||
// RefreshTokenExpiresUnix 返回刷新 Token 的到期時間(UnixNano 時間戳)。
|
||
func (t *Token) RefreshTokenExpiresUnix() int64 {
|
||
return time.Now().Add(t.RefreshTokenExpires()).UnixNano()
|
||
}
|
||
|
||
// IsExpires 檢查存取 Token 是否已過期。如果存取 Token 的創建時間加上其有效期早於當前時間,則返回 true。
|
||
func (t *Token) IsExpires() bool {
|
||
accessCreateAt := time.Unix(0, t.AccessCreateAt)
|
||
|
||
return accessCreateAt.Add(t.AccessTokenExpires()).Before(time.Now())
|
||
}
|
||
|
||
// RedisExpiredSec 返回存取 Token 在 Redis 中的剩餘有效時間(秒)。
|
||
// 計算方法為:從到期時間的 Unix 時間戳減去當前時間。
|
||
func (t *Token) RedisExpiredSec() int64 {
|
||
sec := time.Unix(0, t.ExpiresIn).Sub(time.Now().UTC())
|
||
|
||
return int64(sec.Seconds())
|
||
}
|
||
|
||
// RedisRefreshExpiredSec 返回刷新 Token 在 Redis 中的剩餘有效時間(秒)。
|
||
// 計算方法為:從刷新到期時間的 Unix 時間戳減去當前時間。
|
||
func (t *Token) RedisRefreshExpiredSec() int64 {
|
||
sec := time.Unix(0, t.RefreshExpiresIn).Sub(time.Now().UTC())
|
||
|
||
return int64(sec.Seconds())
|
||
}
|