github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/domain/onetimetoken/resolver.go (about) 1 package onetimetoken 2 3 import ( 4 "context" 5 6 pkgmodel "github.com/kyma-incubator/compass/components/director/pkg/model" 7 8 "github.com/kyma-incubator/compass/components/director/internal/model" 9 "github.com/kyma-incubator/compass/components/director/pkg/apperrors" 10 "github.com/kyma-incubator/compass/components/director/pkg/graphql" 11 "github.com/kyma-incubator/compass/components/director/pkg/persistence" 12 "github.com/pkg/errors" 13 ) 14 15 // TokenService missing godoc 16 // 17 //go:generate mockery --name=TokenService --output=automock --outpkg=automock --case=underscore --disable-version-string 18 type TokenService interface { 19 GenerateOneTimeToken(ctx context.Context, runtimeID string, tokenType pkgmodel.SystemAuthReferenceObjectType) (*model.OneTimeToken, error) 20 RegenerateOneTimeToken(ctx context.Context, sysAuthID string) (*model.OneTimeToken, error) 21 } 22 23 // TokenConverter missing godoc 24 // 25 //go:generate mockery --name=TokenConverter --output=automock --outpkg=automock --case=underscore --disable-version-string 26 type TokenConverter interface { 27 ToGraphQLForRuntime(model model.OneTimeToken) graphql.OneTimeTokenForRuntime 28 ToGraphQLForApplication(model model.OneTimeToken) (graphql.OneTimeTokenForApplication, error) 29 } 30 31 // Resolver missing godoc 32 type Resolver struct { 33 transact persistence.Transactioner 34 svc TokenService 35 conv TokenConverter 36 suggestTokenHeaderKey string 37 } 38 39 // NewTokenResolver missing godoc 40 func NewTokenResolver(transact persistence.Transactioner, svc TokenService, conv TokenConverter, suggestTokenHeaderKey string) *Resolver { 41 return &Resolver{transact: transact, svc: svc, conv: conv, suggestTokenHeaderKey: suggestTokenHeaderKey} 42 } 43 44 // RequestOneTimeTokenForRuntime missing godoc 45 func (r *Resolver) RequestOneTimeTokenForRuntime(ctx context.Context, id string, systemAuthID *string) (*graphql.OneTimeTokenForRuntime, error) { 46 tx, err := r.transact.Begin() 47 if err != nil { 48 return nil, err 49 } 50 defer r.transact.RollbackUnlessCommitted(ctx, tx) 51 ctx = persistence.SaveToContext(ctx, tx) 52 53 var token *model.OneTimeToken 54 if systemAuthID != nil { 55 token, err = r.svc.RegenerateOneTimeToken(ctx, *systemAuthID) 56 } else { 57 token, err = r.svc.GenerateOneTimeToken(ctx, id, pkgmodel.RuntimeReference) 58 } 59 if err != nil { 60 return nil, err 61 } 62 if err = tx.Commit(); err != nil { 63 return nil, errors.Wrap(err, "while committing transaction") 64 } 65 66 gqlToken := r.conv.ToGraphQLForRuntime(*token) 67 return &gqlToken, nil 68 } 69 70 // RequestOneTimeTokenForApplication missing godoc 71 func (r *Resolver) RequestOneTimeTokenForApplication(ctx context.Context, id string, systemAuthID *string) (*graphql.OneTimeTokenForApplication, error) { 72 tx, err := r.transact.Begin() 73 if err != nil { 74 return nil, err 75 } 76 defer r.transact.RollbackUnlessCommitted(ctx, tx) 77 ctx = persistence.SaveToContext(ctx, tx) 78 79 var token *model.OneTimeToken 80 if systemAuthID != nil { 81 token, err = r.svc.RegenerateOneTimeToken(ctx, *systemAuthID) 82 } else { 83 token, err = r.svc.GenerateOneTimeToken(ctx, id, pkgmodel.ApplicationReference) 84 } 85 if err != nil { 86 return nil, err 87 } 88 89 if err = tx.Commit(); err != nil { 90 return nil, errors.Wrap(err, "while committing transaction") 91 } 92 gqlToken, err := r.conv.ToGraphQLForApplication(*token) 93 if err != nil { 94 return nil, errors.Wrap(err, "while converting one-time token to graphql") 95 } 96 return &gqlToken, nil 97 } 98 99 // RawEncoded missing godoc 100 func (r *Resolver) RawEncoded(ctx context.Context, obj *graphql.TokenWithURL) (*string, error) { 101 if obj == nil { 102 return nil, apperrors.NewInternalError("Token was nil") 103 } 104 105 if !tokenSuggestionEnabled(ctx, r.suggestTokenHeaderKey) { 106 return rawEncoded(obj) 107 } 108 109 return rawEncoded(&graphql.TokenWithURL{ 110 Token: extractToken(obj.Token), 111 ConnectorURL: obj.ConnectorURL, 112 Used: obj.Used, 113 ExpiresAt: obj.ExpiresAt, 114 CreatedAt: obj.CreatedAt, 115 UsedAt: obj.UsedAt, 116 Type: obj.Type, 117 ScenarioGroups: obj.ScenarioGroups, 118 }) 119 } 120 121 // Raw missing godoc 122 func (r *Resolver) Raw(ctx context.Context, obj *graphql.TokenWithURL) (*string, error) { 123 if obj == nil { 124 return nil, apperrors.NewInternalError("Token was nil") 125 } 126 127 if !tokenSuggestionEnabled(ctx, r.suggestTokenHeaderKey) { 128 return raw(obj) 129 } 130 131 return raw(&graphql.TokenWithURL{ 132 Token: extractToken(obj.Token), 133 ConnectorURL: obj.ConnectorURL, 134 Used: obj.Used, 135 ExpiresAt: obj.ExpiresAt, 136 CreatedAt: obj.CreatedAt, 137 UsedAt: obj.UsedAt, 138 Type: obj.Type, 139 ScenarioGroups: obj.ScenarioGroups, 140 }) 141 }