[#9999] ape: Perform strict APE checks for EC parts
All checks were successful
Tests and linters / Run gofumpt (pull_request) Successful in 1m17s
DCO action / DCO (pull_request) Successful in 1m30s
Pre-commit hooks / Pre-commit (pull_request) Successful in 2m13s
Vulncheck / Vulncheck (pull_request) Successful in 2m11s
Build / Build Components (pull_request) Successful in 2m35s
Tests and linters / Staticcheck (pull_request) Successful in 2m51s
Tests and linters / gopls check (pull_request) Successful in 2m54s
Tests and linters / Lint (pull_request) Successful in 3m41s
Tests and linters / Tests (pull_request) Successful in 4m19s
Tests and linters / Tests with -race (pull_request) Successful in 5m53s
All checks were successful
Tests and linters / Run gofumpt (pull_request) Successful in 1m17s
DCO action / DCO (pull_request) Successful in 1m30s
Pre-commit hooks / Pre-commit (pull_request) Successful in 2m13s
Vulncheck / Vulncheck (pull_request) Successful in 2m11s
Build / Build Components (pull_request) Successful in 2m35s
Tests and linters / Staticcheck (pull_request) Successful in 2m51s
Tests and linters / gopls check (pull_request) Successful in 2m54s
Tests and linters / Lint (pull_request) Successful in 3m41s
Tests and linters / Tests (pull_request) Successful in 4m19s
Tests and linters / Tests with -race (pull_request) Successful in 5m53s
Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
28a0f66c4a
commit
2a3bc3a2c8
2 changed files with 21 additions and 12 deletions
|
@ -695,6 +695,7 @@ func TestPutECChunk(t *testing.T) {
|
|||
nm := &netmapStub{
|
||||
currentEpoch: 100,
|
||||
netmaps: map[uint64]*netmapSDK.NetMap{
|
||||
99: netmap,
|
||||
100: netmap,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package ape
|
|||
import (
|
||||
"context"
|
||||
"crypto/sha256"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
"strconv"
|
||||
|
@ -24,6 +25,8 @@ import (
|
|||
|
||||
var defaultRequest = aperequest.Request{}
|
||||
|
||||
var errECMissingParentObjectID = errors.New("missing EC parent object ID")
|
||||
|
||||
func nativeSchemaRole(role acl.Role) string {
|
||||
switch role {
|
||||
case acl.RoleOwner:
|
||||
|
@ -122,7 +125,10 @@ func (c *checkerImpl) newAPERequest(ctx context.Context, prm Prm) (aperequest.Re
|
|||
header = headerObjSDK.ToV2().GetHeader()
|
||||
}
|
||||
}
|
||||
header = c.fillHeaderWithECParent(ctx, prm, header)
|
||||
header, err := c.fillHeaderWithECParent(ctx, prm, header)
|
||||
if err != nil {
|
||||
return defaultRequest, fmt.Errorf("get EC parent header: %w", err)
|
||||
}
|
||||
reqProps := map[string]string{
|
||||
nativeschema.PropertyKeyActorPublicKey: prm.SenderKey,
|
||||
nativeschema.PropertyKeyActorRole: prm.Role,
|
||||
|
@ -133,7 +139,6 @@ func (c *checkerImpl) newAPERequest(ctx context.Context, prm Prm) (aperequest.Re
|
|||
reqProps[xheadKey] = xhead.GetValue()
|
||||
}
|
||||
|
||||
var err error
|
||||
reqProps, err = c.fillWithUserClaimTags(reqProps, prm)
|
||||
if err != nil {
|
||||
return defaultRequest, err
|
||||
|
@ -155,35 +160,38 @@ func (c *checkerImpl) newAPERequest(ctx context.Context, prm Prm) (aperequest.Re
|
|||
), nil
|
||||
}
|
||||
|
||||
func (c *checkerImpl) fillHeaderWithECParent(ctx context.Context, prm Prm, header *objectV2.Header) *objectV2.Header {
|
||||
func (c *checkerImpl) fillHeaderWithECParent(ctx context.Context, prm Prm, header *objectV2.Header) (*objectV2.Header, error) {
|
||||
if header == nil {
|
||||
return header
|
||||
return header, nil
|
||||
}
|
||||
if header.GetEC() == nil {
|
||||
return header
|
||||
return header, nil
|
||||
}
|
||||
if prm.Role == nativeschema.PropertyValueContainerRoleContainer ||
|
||||
prm.Role == nativeschema.PropertyValueContainerRoleIR {
|
||||
return header
|
||||
return header, nil
|
||||
}
|
||||
parentObjRefID := header.GetEC().Parent
|
||||
if parentObjRefID == nil {
|
||||
return header
|
||||
return nil, errECMissingParentObjectID
|
||||
}
|
||||
var parentObjID oid.ID
|
||||
if err := parentObjID.ReadFromV2(*parentObjRefID); err != nil {
|
||||
return header
|
||||
return nil, fmt.Errorf("EC parent object ID format error: %w", err)
|
||||
}
|
||||
// only container node have access to collect parent object
|
||||
contNode, err := c.currentNodeIsContainerNode(prm.Container)
|
||||
if err != nil || !contNode {
|
||||
return header
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("check container node status: %w", err)
|
||||
}
|
||||
if !contNode {
|
||||
return header, nil
|
||||
}
|
||||
parentObj, err := c.headerProvider.GetHeader(ctx, prm.Container, parentObjID, false)
|
||||
if err != nil {
|
||||
return header
|
||||
return nil, fmt.Errorf("EC parent header request: %w", err)
|
||||
}
|
||||
return parentObj.ToV2().GetHeader()
|
||||
return parentObj.ToV2().GetHeader(), nil
|
||||
}
|
||||
|
||||
func (c *checkerImpl) currentNodeIsContainerNode(cnrID cid.ID) (bool, error) {
|
||||
|
|
Loading…
Reference in a new issue