Skip to content

Commit f08e27b

Browse files
committed
Merge pull request #501 from Kuadrant/fix/rawextension-to-str
fix: RawExtension to string conversion Signed-off-by: Guilherme Cassolato <[email protected]>
1 parent 7d07f22 commit f08e27b

File tree

4 files changed

+78
-17
lines changed

4 files changed

+78
-17
lines changed

pkg/evaluators/authorization/authzed.go

+30-7
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,23 @@ func (a *Authzed) Call(pipeline auth.AuthPipeline, ctx gocontext.Context) (inter
4848

4949
authJSON := pipeline.GetAuthorizationJSON()
5050

51+
resource, err := authzedObjectFor(a.Resource, a.ResourceKind, authJSON)
52+
if err != nil {
53+
return nil, err
54+
}
55+
object, err := authzedObjectFor(a.Subject, a.SubjectKind, authJSON)
56+
if err != nil {
57+
return nil, err
58+
}
59+
permission := a.Permission.ResolveFor(authJSON)
60+
permissionStr, err := json.StringifyJSON(permission)
61+
if err != nil {
62+
return nil, err
63+
}
5164
resp, err := client.CheckPermission(ctx, &authzedpb.CheckPermissionRequest{
52-
Resource: authzedObjectFor(a.Resource, a.ResourceKind, authJSON),
53-
Subject: &authzedpb.SubjectReference{Object: authzedObjectFor(a.Subject, a.SubjectKind, authJSON)},
54-
Permission: fmt.Sprintf("%s", a.Permission.ResolveFor(authJSON)),
65+
Resource: resource,
66+
Subject: &authzedpb.SubjectReference{Object: object},
67+
Permission: permissionStr,
5568
})
5669
if err != nil {
5770
return nil, err
@@ -74,9 +87,19 @@ func (a *Authzed) Call(pipeline auth.AuthPipeline, ctx gocontext.Context) (inter
7487
return obj, nil
7588
}
7689

77-
func authzedObjectFor(name, kind json.JSONValue, authJSON string) *authzedpb.ObjectReference {
78-
return &authzedpb.ObjectReference{
79-
ObjectId: fmt.Sprintf("%s", name.ResolveFor(authJSON)),
80-
ObjectType: fmt.Sprintf("%s", kind.ResolveFor(authJSON)),
90+
func authzedObjectFor(name, kind json.JSONValue, authJSON string) (*authzedpb.ObjectReference, error) {
91+
objectId := name.ResolveFor(authJSON)
92+
objectIdStr, err := json.StringifyJSON(objectId)
93+
if err != nil {
94+
return nil, err
8195
}
96+
objectType := kind.ResolveFor(authJSON)
97+
objectTypeStr, err := json.StringifyJSON(objectType)
98+
if err != nil {
99+
return nil, err
100+
}
101+
return &authzedpb.ObjectReference{
102+
ObjectId: objectIdStr,
103+
ObjectType: objectTypeStr,
104+
}, nil
82105
}

pkg/evaluators/authorization/kubernetes_authz.go

+38-9
Original file line numberDiff line numberDiff line change
@@ -63,26 +63,55 @@ func (k *KubernetesAuthz) Call(pipeline auth.AuthPipeline, ctx gocontext.Context
6363
}
6464

6565
authJSON := pipeline.GetAuthorizationJSON()
66-
jsonValueToStr := func(value json.JSONValue) string {
67-
return fmt.Sprintf("%s", value.ResolveFor(authJSON))
66+
jsonValueToStr := func(value json.JSONValue) (string, error) {
67+
resolved := value.ResolveFor(authJSON)
68+
return json.StringifyJSON(resolved)
6869
}
6970

71+
user, err := jsonValueToStr(k.User)
72+
if err != nil {
73+
return nil, err
74+
}
7075
subjectAccessReview := kubeAuthz.SubjectAccessReview{
7176
Spec: kubeAuthz.SubjectAccessReviewSpec{
72-
User: jsonValueToStr(k.User),
77+
User: user,
7378
},
7479
}
7580

7681
if k.ResourceAttributes != nil {
7782
resourceAttributes := k.ResourceAttributes
7883

84+
namespace, err := jsonValueToStr(resourceAttributes.Namespace)
85+
if err != nil {
86+
return nil, err
87+
}
88+
group, err := jsonValueToStr(resourceAttributes.Group)
89+
if err != nil {
90+
return nil, err
91+
}
92+
resource, err := jsonValueToStr(resourceAttributes.Resource)
93+
if err != nil {
94+
return nil, err
95+
}
96+
name, err := jsonValueToStr(resourceAttributes.Name)
97+
if err != nil {
98+
return nil, err
99+
}
100+
subresource, err := jsonValueToStr(resourceAttributes.SubResource)
101+
if err != nil {
102+
return nil, err
103+
}
104+
verb, err := jsonValueToStr(resourceAttributes.Verb)
105+
if err != nil {
106+
return nil, err
107+
}
79108
subjectAccessReview.Spec.ResourceAttributes = &kubeAuthz.ResourceAttributes{
80-
Namespace: jsonValueToStr(resourceAttributes.Namespace),
81-
Group: jsonValueToStr(resourceAttributes.Group),
82-
Resource: jsonValueToStr(resourceAttributes.Resource),
83-
Name: jsonValueToStr(resourceAttributes.Name),
84-
Subresource: jsonValueToStr(resourceAttributes.SubResource),
85-
Verb: jsonValueToStr(resourceAttributes.Verb),
109+
Namespace: namespace,
110+
Group: group,
111+
Resource: resource,
112+
Name: name,
113+
Subresource: subresource,
114+
Verb: verb,
86115
}
87116
} else {
88117
request := pipeline.GetHttp()

pkg/evaluators/metadata/generic_http.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,12 @@ func (h *GenericHttp) buildRequest(ctx gocontext.Context, endpoint, authJSON str
127127
}
128128

129129
for _, header := range h.Headers {
130-
req.Header.Set(header.Name, fmt.Sprintf("%s", header.Value.ResolveFor(authJSON)))
130+
headerValue := header.Value.ResolveFor(authJSON)
131+
headerValueStr, err := json.StringifyJSON(headerValue)
132+
if err != nil {
133+
return nil, err
134+
}
135+
req.Header.Set(header.Name, headerValueStr)
131136
}
132137

133138
req.Header.Set("Content-Type", contentType)

pkg/json/json.go

+4
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,10 @@ func ReplaceJSONPlaceholders(source string, jsonData string) string {
151151
}
152152

153153
func StringifyJSON(data interface{}) (string, error) {
154+
_, ok := data.(string)
155+
if ok {
156+
return data.(string), nil
157+
}
154158
if dataAsJSON, err := json.Marshal(data); err != nil {
155159
return "", err
156160
} else {

0 commit comments

Comments
 (0)