backend/pkg/permission/domain/payload_repositroy.go

65 lines
2.7 KiB
Go
Executable File
Raw 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 domain
import "time"
// DeviceToken 表示裝置與 Token 之間的關聯
type DeviceToken struct {
DeviceID string // 裝置的唯一標識符
TokenID string // Token 的唯一標識符
}
type UIDToken map[string]int64
// Ticket 表示一次性使用的 Token 結構,包含數據和 Token 資訊
type Ticket struct {
Data any `json:"data"` // 任意附加數據
Token Token `json:"token"` // 一次性使用的 Token 資訊
}
// Token 表示使用者的存取和刷新 Token 資訊
type Token struct {
ID string `json:"id"` // Token 的唯一標識符
UID string `json:"uid"` // 用戶的唯一標識符
DeviceID string `json:"device_id"` // 裝置的唯一標識符
AccessToken string `json:"access_token"` // 存取 Token
ExpiresIn int `json:"expires_in"` // 存取 Token 的有效時長(秒)
AccessCreateAt time.Time `json:"access_create_at"` // 存取 Token 的創建時間
RefreshToken string `json:"refresh_token"` // 刷新 Token
RefreshExpiresIn int `json:"refresh_expires_in"` // 刷新 Token 的有效時長(秒)
RefreshCreateAt time.Time `json:"refresh_create_at"` // 刷新 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 {
return t.AccessCreateAt.Add(t.AccessTokenExpires()).Before(time.Now())
}
// RedisExpiredSec 返回存取 Token 在 Redis 中的剩餘有效時間(秒)。計算方法為:從到期時間的 Unix 時間戳減去當前時間。
func (t *Token) RedisExpiredSec() int64 {
sec := time.Unix(int64(t.ExpiresIn), 0).Sub(time.Now().UTC())
return int64(sec.Seconds())
}
// RedisRefreshExpiredSec 返回刷新 Token 在 Redis 中的剩餘有效時間(秒)。計算方法為:從刷新到期時間的 Unix 時間戳減去當前時間。
func (t *Token) RedisRefreshExpiredSec() int64 {
sec := time.Unix(int64(t.RefreshExpiresIn), 0).Sub(time.Now().UTC())
return int64(sec.Seconds())
}