app-cloudep-permission-server/pkg/domain/entity/token.go

57 lines
2.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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())
}