...
1 package database
2
3 import (
4 "context"
5 "fmt"
6
7 "edge-infra.dev/pkg/edge/iam/config"
8 "edge-infra.dev/pkg/edge/iam/storage"
9
10 "github.com/go-redis/redis"
11 "github.com/ory/fosite"
12 "github.com/pkg/errors"
13 )
14
15 func (s *Store) CreatePKCERequestSession(_ context.Context, signature string, req fosite.Requester) error {
16 key := keyFrom(KeyPrefixPKCE, signature)
17 r := storage.ToStorage(signature, req)
18 return s.set(key, r, config.GetAuthCodeTTL())
19 }
20
21 func (s *Store) GetPKCERequestSession(ctx context.Context, signature string, session fosite.Session) (fosite.Requester, error) {
22 key := keyFrom(KeyPrefixPKCE, signature)
23 req, err := s.get(key)
24 if err == redis.Nil {
25 return nil, errors.Wrap(fosite.ErrNotFound, "")
26 } else if err != nil {
27 return nil, errors.WithStack(err)
28 }
29
30
31 iamClient, err := s.GetIAMClient(ctx, req.ClientID)
32 if err != nil {
33 s.Log.Info("failed to get client in db", "error", err, "id", req.ClientID)
34 return nil, err
35 }
36 request, err := req.ToFositeRequest(ctx, session, iamClient)
37 if err != nil {
38 if err == fosite.ErrNotFound {
39 s.Log.Info("Failed to transform a fosite session to a fosite request.", "error", err)
40 return nil, err
41 }
42
43 return nil, err
44 }
45
46 return request, err
47 }
48
49 func (s *Store) DeletePKCERequestSession(_ context.Context, signature string) error {
50 key := keyFrom(KeyPrefixPKCE, signature)
51 err := s.RedisDB.Del(key).Err()
52 if err != nil {
53 return errors.Wrap(err, fmt.Sprintf("Failed to delete key '%v'", key))
54 }
55
56 return nil
57 }
58
View as plain text