2016-02-03 18:08:10 +00:00
/ *
Copyright 2016 The Kubernetes Authors .
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
package util
import (
2017-01-04 14:31:53 +00:00
"k8s.io/apiserver/pkg/authentication/user"
2017-01-04 15:39:05 +00:00
"k8s.io/apiserver/pkg/authorization/authorizer"
2016-02-03 18:08:10 +00:00
authorizationapi "k8s.io/kubernetes/pkg/apis/authorization"
)
// ResourceAttributesFrom combines the API object information and the user.Info from the context to build a full authorizer.AttributesRecord for resource access
func ResourceAttributesFrom ( user user . Info , in authorizationapi . ResourceAttributes ) authorizer . AttributesRecord {
return authorizer . AttributesRecord {
User : user ,
Verb : in . Verb ,
Namespace : in . Namespace ,
APIGroup : in . Group ,
2017-02-03 19:02:04 +00:00
APIVersion : in . Version ,
2016-02-03 18:08:10 +00:00
Resource : in . Resource ,
2017-02-03 19:02:04 +00:00
Subresource : in . Subresource ,
Name : in . Name ,
2016-02-03 18:08:10 +00:00
ResourceRequest : true ,
}
}
// NonResourceAttributesFrom combines the API object information and the user.Info from the context to build a full authorizer.AttributesRecord for non resource access
func NonResourceAttributesFrom ( user user . Info , in authorizationapi . NonResourceAttributes ) authorizer . AttributesRecord {
return authorizer . AttributesRecord {
User : user ,
ResourceRequest : false ,
Path : in . Path ,
2016-10-14 19:38:39 +00:00
Verb : in . Verb ,
2016-02-03 18:08:10 +00:00
}
}
2016-09-09 18:48:44 +00:00
func convertToUserInfoExtra ( extra map [ string ] authorizationapi . ExtraValue ) map [ string ] [ ] string {
if extra == nil {
return nil
}
ret := map [ string ] [ ] string { }
for k , v := range extra {
ret [ k ] = [ ] string ( v )
}
return ret
}
// AuthorizationAttributesFrom takes a spec and returns the proper authz attributes to check it.
func AuthorizationAttributesFrom ( spec authorizationapi . SubjectAccessReviewSpec ) authorizer . AttributesRecord {
userToCheck := & user . DefaultInfo {
Name : spec . User ,
Groups : spec . Groups ,
2017-07-27 01:34:11 +00:00
UID : spec . UID ,
2016-09-09 18:48:44 +00:00
Extra : convertToUserInfoExtra ( spec . Extra ) ,
}
var authorizationAttributes authorizer . AttributesRecord
if spec . ResourceAttributes != nil {
authorizationAttributes = ResourceAttributesFrom ( userToCheck , * spec . ResourceAttributes )
} else {
authorizationAttributes = NonResourceAttributesFrom ( userToCheck , * spec . NonResourceAttributes )
}
return authorizationAttributes
}