From b6304c16b15879e7d3a26678a2510c591808414d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Mon, 16 Dec 2024 21:44:06 +0900 Subject: [PATCH] feat: add expireAt to Validate --- token.go | 21 +++++++++++---------- token_test.go | 6 +++--- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/token.go b/token.go index 13d9bf1..45fadee 100644 --- a/token.go +++ b/token.go @@ -97,39 +97,40 @@ func (t *Tokenizer) Generate(id uint64, expireAt time.Time, addt, mask uint16) ( // - uint16 附加数据 func (t *Tokenizer) Validate( token string, mask uint16, checks ...func(uint16) error, -) (uint64, uint16, error) { +) (uint64, uint16, time.Time, error) { if len(token) != TokenLength { - return 0, 0, ErrInvalidTokenLength + return 0, 0, time.Time{}, ErrInvalidTokenLength } data, err := base64.URLEncoding.DecodeString(token) if err != nil { - return 0, 0, err + return 0, 0, time.Time{}, err } addt := binary.LittleEndian.Uint16(data[:2]) addtmsk := addt & mask for _, fn := range checks { err = fn(addtmsk) if err != nil { - return 0, 0, err + return 0, 0, time.Time{}, err } } data, err = decode(t.aead, addt, data[2:]) if err != nil { - return 0, 0, err + return 0, 0, time.Time{}, err } h := crc64.New(t.tabl) _, err = h.Write(data[:16]) if err != nil { - return 0, 0, err + return 0, 0, time.Time{}, err } crc := binary.BigEndian.Uint64(data[16:]) if crc != h.Sum64() { - return 0, 0, ErrInvalidToken + return 0, 0, time.Time{}, ErrInvalidToken } - if time.Now().After(time.UnixMilli(int64(binary.LittleEndian.Uint64(data[:8])))) { - return 0, 0, ErrExpiredToken + expireAt := time.UnixMilli(int64(binary.LittleEndian.Uint64(data[:8]))) + if time.Now().After(expireAt) { + return 0, 0, time.Time{}, ErrExpiredToken } - return binary.LittleEndian.Uint64(data[8:16]), addtmsk, nil + return binary.LittleEndian.Uint64(data[8:16]), addtmsk, expireAt, nil } // Refresh 过期时刷新 token diff --git a/token_test.go b/token_test.go index f428de1..9d823c8 100644 --- a/token_test.go +++ b/token_test.go @@ -24,7 +24,7 @@ func TestTokenizer(t *testing.T) { t.Fatal(err) } t.Log(token) - vid, addt, err := tk.Validate(token, 0x00ff) + vid, addt, _, err := tk.Validate(token, 0x00ff) if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestTokenizer(t *testing.T) { t.Fatal(err) } t.Log(token2) - _, _, err = tk.Validate(token2, 0) + _, _, _, err = tk.Validate(token2, 0) if err != ErrExpiredToken { t.Fatal("unexpected err", err) } @@ -44,7 +44,7 @@ func TestTokenizer(t *testing.T) { if err != nil { t.Fatal(err) } - vid, addt, err = tk.Validate(token, 0x00ff) + vid, addt, _, err = tk.Validate(token, 0x00ff) if err != nil { t.Fatal(err) }