...
1
16
17 package selfsubjectreview
18
19 import (
20 "context"
21 "fmt"
22 "time"
23
24 apierrors "k8s.io/apimachinery/pkg/api/errors"
25 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26 "k8s.io/apimachinery/pkg/runtime"
27 genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
28 "k8s.io/apiserver/pkg/registry/rest"
29 authenticationapi "k8s.io/kubernetes/pkg/apis/authentication"
30 )
31
32 var _ interface {
33 rest.Creater
34 rest.NamespaceScopedStrategy
35 rest.Scoper
36 rest.Storage
37 } = &REST{}
38
39
40 type REST struct {
41 }
42
43
44 func NewREST() *REST {
45 return &REST{}
46 }
47
48
49 func (r *REST) NamespaceScoped() bool {
50 return false
51 }
52
53
54 func (r *REST) New() runtime.Object {
55 return &authenticationapi.SelfSubjectReview{}
56 }
57
58
59 func (r *REST) Destroy() {
60
61
62 }
63
64
65 func (r *REST) Create(ctx context.Context, obj runtime.Object, createValidation rest.ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error) {
66 if createValidation != nil {
67 if err := createValidation(ctx, obj.DeepCopyObject()); err != nil {
68 return nil, err
69 }
70 }
71
72 _, ok := obj.(*authenticationapi.SelfSubjectReview)
73 if !ok {
74 return nil, apierrors.NewBadRequest(fmt.Sprintf("not a SelfSubjectReview: %#v", obj))
75 }
76
77 user, ok := genericapirequest.UserFrom(ctx)
78 if !ok {
79 return nil, apierrors.NewBadRequest("no user present on request")
80 }
81
82 extra := user.GetExtra()
83
84 selfSR := &authenticationapi.SelfSubjectReview{
85 ObjectMeta: metav1.ObjectMeta{
86 CreationTimestamp: metav1.NewTime(time.Now()),
87 },
88 Status: authenticationapi.SelfSubjectReviewStatus{
89 UserInfo: authenticationapi.UserInfo{
90 Username: user.GetName(),
91 UID: user.GetUID(),
92 Groups: user.GetGroups(),
93 Extra: make(map[string]authenticationapi.ExtraValue, len(extra)),
94 },
95 },
96 }
97 for key, attr := range extra {
98 selfSR.Status.UserInfo.Extra[key] = attr
99 }
100
101 return selfSR, nil
102 }
103
104 var _ rest.SingularNameProvider = &REST{}
105
106 func (r *REST) GetSingularName() string {
107 return "selfsubjectreview"
108 }
109
View as plain text