package database import ( "context" "fmt" "edge-infra.dev/pkg/edge/iam/config" "edge-infra.dev/pkg/edge/iam/storage" "github.com/go-redis/redis" "github.com/ory/fosite" "github.com/pkg/errors" ) func (s *Store) CreatePKCERequestSession(_ context.Context, signature string, req fosite.Requester) error { key := keyFrom(KeyPrefixPKCE, signature) r := storage.ToStorage(signature, req) return s.set(key, r, config.GetAuthCodeTTL()) } func (s *Store) GetPKCERequestSession(ctx context.Context, signature string, session fosite.Session) (fosite.Requester, error) { key := keyFrom(KeyPrefixPKCE, signature) req, err := s.get(key) if err == redis.Nil { return nil, errors.Wrap(fosite.ErrNotFound, "") } else if err != nil { return nil, errors.WithStack(err) } // Transform to a fosite.Request iamClient, err := s.GetIAMClient(ctx, req.ClientID) if err != nil { s.Log.Info("failed to get client in db", "error", err, "id", req.ClientID) return nil, err } request, err := req.ToFositeRequest(ctx, session, iamClient) if err != nil { if err == fosite.ErrNotFound { s.Log.Info("Failed to transform a fosite session to a fosite request.", "error", err) return nil, err } return nil, err } return request, err } func (s *Store) DeletePKCERequestSession(_ context.Context, signature string) error { key := keyFrom(KeyPrefixPKCE, signature) err := s.RedisDB.Del(key).Err() if err != nil { return errors.Wrap(err, fmt.Sprintf("Failed to delete key '%v'", key)) } return nil }