...
1 package database
2
3 import (
4 "context"
5 "time"
6
7 "github.com/go-redis/redis"
8 "github.com/ory/fosite"
9 "github.com/pkg/errors"
10
11 "edge-infra.dev/pkg/edge/iam/config"
12 )
13
14
15
16
17
18
19
20
21 func (s *Store) RevokeRefreshToken(_ context.Context, requestID string) error {
22 refreshReqKey := keyFrom(KeyPrefixRefreshTokenReq, requestID)
23 signature, err := s.RedisDB.Get(refreshReqKey).Result()
24 if err != nil {
25 return fosite.ErrNotFound
26 }
27
28 refreshKey := keyFrom(KeyPrefixRefreshToken, signature)
29 req, err := s.get(refreshKey)
30 if err == redis.Nil {
31 return errors.Wrap(fosite.ErrNotFound, "")
32 } else if err != nil {
33 return errors.WithStack(err)
34 }
35
36 req.UpdateTime = time.Now().Unix()
37 req.Active = false
38 err = s.set(refreshKey, *req, config.GetRefreshTokenTTL())
39 if err != nil {
40 return errors.WithStack(err)
41 }
42
43 return nil
44 }
45
46
47
48
49
50
51
52
53
54
55
56 func (s *Store) RevokeRefreshTokenMaybeGracePeriod(ctx context.Context, requestID string, _ string) error {
57 return s.RevokeRefreshToken(ctx, requestID)
58 }
59
60
61
62
63
64
65 func (s *Store) RevokeAccessToken(ctx context.Context, requestID string) error {
66 tokenReqKey := keyFrom(KeyPrefixAccessTokenReq, requestID)
67 signature, err := s.RedisDB.Get(tokenReqKey).Result()
68 if err == redis.Nil {
69 return nil
70 } else if err != nil {
71 return errors.WithStack(err)
72 }
73
74 err = s.DeleteAccessTokenSession(ctx, signature)
75 if err != nil {
76 return errors.WithStack(err)
77 }
78
79 return nil
80 }
81
View as plain text