forked from kyma-project/kyma
/
selfsubjectrules_resolver.go
59 lines (52 loc) · 2.04 KB
/
selfsubjectrules_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
package k8s
import (
"context"
"github.com/golang/glog"
"github.com/kyma-project/kyma/components/console-backend-service/internal/domain/k8s/pretty"
"github.com/kyma-project/kyma/components/console-backend-service/internal/gqlerror"
"github.com/kyma-project/kyma/components/console-backend-service/internal/gqlschema"
"github.com/pkg/errors"
v1 "k8s.io/api/authorization/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
type selfSubjectRulesResolver struct {
gqlSelfSubjectRulesConverter
selfSubjectRulesSvc
}
//go:generate mockery -name=selfSubjectRulesSvc -output=automock -outpkg=automock -case=underscore
type selfSubjectRulesSvc interface {
Create(ctx context.Context, ssrr []byte) (*v1.SelfSubjectRulesReview, error)
}
//go:generate mockery -name=gqlSelfSubjectRulesConverter -output=automock -outpkg=automock -case=underscore
type gqlSelfSubjectRulesConverter interface {
ToGQL(in *v1.SelfSubjectRulesReview) ([]gqlschema.ResourceRule, error)
ToBytes(in *v1.SelfSubjectRulesReview) ([]byte, error)
}
func newSelfSubjectRulesResolver(selfSubjectRulesSvc selfSubjectRulesSvc) *selfSubjectRulesResolver {
return &selfSubjectRulesResolver{
selfSubjectRulesSvc: selfSubjectRulesSvc,
gqlSelfSubjectRulesConverter: &selfSubjectRulesConverter{},
}
}
func (r *selfSubjectRulesResolver) SelfSubjectRulesQuery(ctx context.Context, namespace *string) ([]gqlschema.ResourceRule, error) {
if namespace == nil {
defaultNamespace := "*"
namespace = &defaultNamespace
}
ssrrIn := &v1.SelfSubjectRulesReview{
TypeMeta: metav1.TypeMeta{
Kind: "SelfSubjectRulesReview",
APIVersion: "authorization.k8s.io/v1",
},
Spec: v1.SelfSubjectRulesReviewSpec{
Namespace: *namespace,
},
}
ssrrBytes, err := r.gqlSelfSubjectRulesConverter.ToBytes(ssrrIn)
ssrrOut, err := r.selfSubjectRulesSvc.Create(ctx, ssrrBytes)
if err != nil {
glog.Error(errors.Wrapf(err, "while reviewing self subject rules"))
return []gqlschema.ResourceRule{}, gqlerror.New(err, pretty.SelfSubjectRules)
}
return r.gqlSelfSubjectRulesConverter.ToGQL(ssrrOut)
}