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