...
1
2 package database
3
4 import (
5 "context"
6 "time"
7
8 "edge-infra.dev/pkg/edge/iam/config"
9 "edge-infra.dev/pkg/edge/iam/storage"
10
11 "github.com/go-redis/redis"
12 "github.com/ory/fosite"
13 "github.com/pkg/errors"
14 )
15
16 func (s *Store) CreateAuthorizeCodeSession(_ context.Context, code string, req fosite.Requester) (err error) {
17 key := keyFrom(KeyPrefixAuthorizationCode, code)
18 r := storage.ToStorage(code, req)
19 return s.set(key, r, config.GetAuthCodeTTL())
20 }
21
22 func (s *Store) GetAuthorizeCodeSession(ctx context.Context, code string, session fosite.Session) (request fosite.Requester, err error) {
23 key := keyFrom(KeyPrefixAuthorizationCode, code)
24 req, err := s.get(key)
25 if err == redis.Nil {
26 return nil, errors.Wrap(fosite.ErrNotFound, "")
27 } else if err != nil {
28 return nil, errors.WithStack(err)
29 }
30
31
32 iamClient, err := s.GetIAMClient(ctx, req.ClientID)
33 if err != nil {
34 s.Log.Info("failed to get client in db", "error", err, "id", req.ClientID)
35 return nil, err
36 }
37 request, err = req.ToFositeRequest(ctx, session, iamClient)
38 if err != nil {
39 if err == fosite.ErrNotFound {
40 s.Log.Info("Failed to transform a fosite session to a fosite request.", "error", err)
41 return nil, err
42 }
43
44 return nil, err
45 }
46
47 if !req.Active {
48
49
50
51
52
53 return request, fosite.ErrInvalidatedAuthorizeCode
54 }
55
56 return request, err
57 }
58
59 func (s *Store) InvalidateAuthorizeCodeSession(_ context.Context, code string) (err error) {
60 key := keyFrom(KeyPrefixAuthorizationCode, code)
61 req, err := s.get(key)
62 if err == redis.Nil {
63 return errors.Wrap(fosite.ErrNotFound, "")
64 } else if err != nil {
65 return errors.WithStack(err)
66 }
67
68 req.UpdateTime = time.Now().Unix()
69 req.Active = false
70
71
72 err = s.set(key, *req, config.GetAuthCodeTTL())
73 if err != nil {
74 return errors.Wrap(err, "Failed to set session as invalidated")
75 }
76
77 return nil
78 }
79
View as plain text