package acl import ( "fmt" v2 "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object/acl/v2" aclSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/acl" aperesource "git.frostfs.info/TrueCloudLab/policy-engine/pkg/resource" nativeschema "git.frostfs.info/TrueCloudLab/policy-engine/schema/native" ) type Request struct { operation string resource *resource properties map[string]string } var _ aperesource.Request = (*Request)(nil) type resource struct { name string properties map[string]string } var _ aperesource.Resource = (*resource)(nil) func (r *resource) Name() string { return r.name } func (r *resource) Property(key string) string { return r.properties[key] } func getResource(reqInfo v2.RequestInfo) *resource { var name string cid := reqInfo.ContainerID() if oid := reqInfo.ObjectID(); oid != nil { name = fmt.Sprintf(nativeschema.ResourceFormatRootContainerObject, cid.EncodeToString(), oid.EncodeToString()) } else { name = fmt.Sprintf(nativeschema.ResourceFormatRootContainerObjects, cid.EncodeToString()) } return &resource{ name: name, properties: make(map[string]string), } } func getProperties(_ v2.RequestInfo) map[string]string { return map[string]string{ nativeschema.PropertyKeyActorPublicKey: "", nativeschema.PropertyKeyActorRole: "", } } func getOperation(reqInfo v2.RequestInfo) string { switch op := reqInfo.Operation(); op { case aclSDK.OpObjectGet: return nativeschema.MethodGetObject case aclSDK.OpObjectHead: return nativeschema.MethodHeadObject case aclSDK.OpObjectPut: return nativeschema.MethodPutObject case aclSDK.OpObjectDelete: return nativeschema.MethodDeleteObject case aclSDK.OpObjectSearch: return nativeschema.MethodSearchObject case aclSDK.OpObjectRange: return nativeschema.MethodRangeObject case aclSDK.OpObjectHash: return nativeschema.MethodHashObject default: return "" } } func NewRequest() *Request { return &Request{ resource: new(resource), properties: map[string]string{}, } } func (r *Request) FromRequestInfo(ri v2.RequestInfo) { r.operation = getOperation(ri) r.resource = getResource(ri) r.properties = getProperties(ri) } func (r *Request) Operation() string { return r.operation } func (r *Request) Property(key string) string { return r.properties[key] } func (r *Request) Resource() aperesource.Resource { return r.resource }