[#1607] adm/ape: Adopt policy reader

Embed https://git.frostfs.info/dkirillov/policy-reader
tool to 'frostfs-adm morph ape' command

Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
This commit is contained in:
Denis Kirillov 2025-01-19 21:25:19 +03:00
parent e88646e99b
commit 39faefb175
10 changed files with 689 additions and 1 deletions

View file

@ -10,6 +10,7 @@ import (
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/config"
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/constants"
commonCmd "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
"github.com/nspcc-dev/neo-go/pkg/core/native/nativenames"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/nspcc-dev/neo-go/pkg/encoding/address"
@ -158,6 +159,40 @@ func NNSResolveHash(inv *invoker.Invoker, nnsHash util.Uint160, domain string) (
return ParseNNSResolveResult(item)
}
// NNSResolveContainerDomain returns errMissingNNSRecord if invocation fault exception contains "token not found".
func NNSResolveContainerDomain(inv *invoker.Invoker, nnsHash util.Uint160, domain string) (cid.ID, error) {
item, err := NNSResolve(inv, nnsHash, domain)
if err != nil {
return cid.ID{}, err
}
return parseNNSResolveResultCID(item)
}
func parseNNSResolveResultCID(res stackitem.Item) (cid.ID, error) {
arr, ok := res.Value().([]stackitem.Item)
if !ok {
arr = []stackitem.Item{res}
}
if _, ok := res.Value().(stackitem.Null); ok || len(arr) == 0 {
return cid.ID{}, errors.New("NNS record is missing")
}
var cnrID cid.ID
for i := range arr {
bs, err := arr[i].TryBytes()
if err != nil {
continue
}
if err = cnrID.DecodeString(string(bs)); err == nil {
return cnrID, nil
}
}
return cid.ID{}, errors.New("no valid CIDs are found")
}
func DomainOf(contract string) string {
return contract + ".frostfs"
}