Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/neofs-cli/modules/acl/extended/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Rule consist of these blocks: <action> <operation> [<filter1> ...] [<target1> ..

Action is 'allow' or 'deny'.

Operation is an object service verb: 'get', 'head', 'put', 'search', 'delete', or 'getrange'.
Operation is an object service verb: 'get', 'head', 'put', 'search' or 'delete'.

Filter consists of <typ>:<key><match><value>
Typ is 'obj' for object applied filter or 'req' for request applied filter.
Expand Down
94 changes: 94 additions & 0 deletions cmd/neofs-cli/modules/object/get.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package object

import (
"bytes"
"errors"
"fmt"
"io"
"os"
Expand All @@ -21,6 +23,10 @@ import (
)

const (
rangeFlag = "range"
rangeFlagUsage = "Range to take data from in the form offset:length"
rangeSep = ":"

payloadOnlyFlag = "payload-only"
extendedRangeFlag = "extended-range"
)
Expand Down Expand Up @@ -269,3 +275,91 @@ func payloadReadSize(payloadSize uint64, ranges []*object.Range, first, last *ui
return int64(payloadSize)
}
}

func printSplitInfoErr(cmd *cobra.Command, err error) (bool, error) {
errSplitInfo, ok := errors.AsType[*object.SplitInfoError](err)

if ok {
cmd.PrintErrln("Object is complex, split information received.")
if err := printSplitInfo(cmd, errSplitInfo.SplitInfo()); err != nil {
return false, err
}
}

return ok, nil
}

func printSplitInfo(cmd *cobra.Command, info *object.SplitInfo) error {
bs, err := marshalSplitInfo(cmd, info)
if err != nil {
return fmt.Errorf("can't marshal split info: %w", err)
}

cmd.Println(string(bs))
return nil
}

func marshalSplitInfo(cmd *cobra.Command, info *object.SplitInfo) ([]byte, error) {
toJSON, _ := cmd.Flags().GetBool(commonflags.JSON)
toProto, _ := cmd.Flags().GetBool("proto")
switch {
case toJSON && toProto:
return nil, errors.New("'--json' and '--proto' flags are mutually exclusive")
case toJSON:
return info.MarshalJSON()
case toProto:
return info.Marshal(), nil
default:
b := bytes.NewBuffer(nil)
if splitID := info.SplitID(); splitID != nil {
b.WriteString("Split ID: " + splitID.String() + "\n")
}
if link := info.GetLink(); !link.IsZero() {
b.WriteString("Linking object: " + link.String() + "\n")
}
if first := info.GetFirstPart(); !first.IsZero() {
b.WriteString("First object: " + first.String() + "\n")
}
if last := info.GetLastPart(); !last.IsZero() {
b.WriteString("Last object: " + last.String() + "\n")
}
return b.Bytes(), nil
}
}

func getRangeList(cmd *cobra.Command) ([]*object.Range, error) {
v := cmd.Flag("range").Value.String()
if len(v) == 0 {
return nil, nil
}
vs := strings.Split(v, ",")
rs := make([]*object.Range, len(vs))
for i := range vs {
offString, lenString, found := strings.Cut(vs[i], rangeSep)
if !found {
return nil, fmt.Errorf("invalid range specifier: %s", vs[i])
}

offset, err := strconv.ParseUint(offString, 10, 64)
if err != nil {
return nil, fmt.Errorf("invalid '%s' range offset specifier: %w", vs[i], err)
}
length, err := strconv.ParseUint(lenString, 10, 64)
if err != nil {
return nil, fmt.Errorf("invalid '%s' range length specifier: %w", vs[i], err)
}

if length == 0 {
if offset != 0 {
return nil, fmt.Errorf("invalid '%s' range: zero length with non-zero offset", vs[i])
}
} else if offset+length <= offset {
return nil, fmt.Errorf("invalid '%s' range: uint64 overflow", vs[i])
}

rs[i] = object.NewRange()
rs[i].SetOffset(offset)
rs[i].SetLength(length)
}
return rs, nil
}
229 changes: 0 additions & 229 deletions cmd/neofs-cli/modules/object/range.go

This file was deleted.

2 changes: 0 additions & 2 deletions cmd/neofs-cli/modules/object/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ func init() {
objectSearchCmd,
searchV2Cmd,
objectHeadCmd,
objectRangeCmd,
objectLockCmd}

Cmd.AddCommand(objectNodesCmd)
Expand All @@ -42,7 +41,6 @@ func init() {
initObjectGetCmd()
initObjectSearchCmd()
initObjectHeadCmd()
initObjectRangeCmd()
initCommandObjectLock()
initObjectNodesCmd()
}
4 changes: 0 additions & 4 deletions cmd/neofs-cli/modules/object/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,8 +197,6 @@ func getSession(cmd *cobra.Command) (*session.Object, error) {
// *internal.GetObjectPrm
// *internal.HeadObjectPrm
// *internal.SearchObjectsPrm
// *internal.PayloadRangePrm
// *internal.HashPayloadRangesPrm
func _readVerifiedSession(cmd *cobra.Command, dst SessionPrm, key *ecdsa.PrivateKey, cnr cid.ID, obj *oid.ID) error {
if tokV2 := tryReadSessionV2(cmd); tokV2 != nil {
err := attachVerifiedSessionV2(cmd, tokV2, dst, key, cnr)
Expand All @@ -222,8 +220,6 @@ func _readVerifiedSession(cmd *cobra.Command, dst SessionPrm, key *ecdsa.Private
cmdVerb = session.VerbObjectHead
case *client.PrmObjectSearch:
cmdVerb = session.VerbObjectSearch
case *client.PrmObjectRange:
cmdVerb = session.VerbObjectRange
}

tok, err := getVerifiedSession(cmd, cmdVerb, key, cnr)
Expand Down
2 changes: 0 additions & 2 deletions cmd/neofs-cli/modules/object/util_session_v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,6 @@ func attachVerifiedSessionV2(cmd *cobra.Command, tok *session.Token, dst Session
cmdVerb = session.VerbObjectHead
case *client.PrmObjectSearch:
cmdVerb = session.VerbObjectSearch
case *client.PrmObjectRange:
cmdVerb = session.VerbObjectRange
}

err := verifySessionV2(cmd, tok, cmdVerb, key, cnr)
Expand Down
Loading
Loading