package morph import ( "errors" "fmt" commonCmd "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common" "git.frostfs.info/TrueCloudLab/frostfs-node/internal/ape" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/spf13/cobra" "github.com/spf13/viper" ) func getFrostfsIDAdmin(v *viper.Viper) (util.Uint160, bool, error) { admin := v.GetString(frostfsIDAdminConfigKey) if admin == "" { return util.Uint160{}, false, nil } h, err := address.StringToUint160(admin) if err == nil { return h, true, nil } h, err = util.Uint160DecodeStringLE(admin) if err == nil { return h, true, nil } pk, err := keys.NewPublicKeyFromString(admin) if err == nil { return pk.GetScriptHash(), true, nil } return util.Uint160{}, true, fmt.Errorf("frostfsid: admin is invalid: '%s'", admin) } func getFrostfsIDSubjectKey(cmd *cobra.Command) *keys.PublicKey { subjKeyHex, _ := cmd.Flags().GetString(subjectKeyFlag) subjKey, err := keys.NewPublicKeyFromString(subjKeyHex) commonCmd.ExitOnErr(cmd, "invalid subject key: %w", err) return subjKey } func getFrostfsIDSubjectAddress(cmd *cobra.Command) util.Uint160 { subjAddress, _ := cmd.Flags().GetString(subjectAddressFlag) subjAddr, err := address.StringToUint160(subjAddress) commonCmd.ExitOnErr(cmd, "invalid subject address: %w", err) return subjAddr } func getFrostfsIDSubjectName(cmd *cobra.Command) string { subjectName, _ := cmd.Flags().GetString(subjectNameFlag) if subjectName == "" { return "" } if !ape.SubjectNameRegexp.MatchString(subjectName) { commonCmd.ExitOnErr(cmd, "invalid subject name: %w", fmt.Errorf("name must match regexp: %s", ape.SubjectNameRegexp.String())) } return subjectName } func getFrostfsIDGroupName(cmd *cobra.Command) string { groupName, _ := cmd.Flags().GetString(groupNameFlag) if !ape.GroupNameRegexp.MatchString(groupName) { commonCmd.ExitOnErr(cmd, "invalid group name: %w", fmt.Errorf("name must match regexp: %s", ape.GroupNameRegexp.String())) } return groupName } func getFrostfsIDGroupID(cmd *cobra.Command) int64 { groupID, _ := cmd.Flags().GetInt64(groupIDFlag) if groupID <= 0 { commonCmd.ExitOnErr(cmd, "invalid group id: %w", errors.New("group id must be positive integer")) } return groupID } func getFrostfsIDNamespace(cmd *cobra.Command) string { ns, _ := cmd.Flags().GetString(namespaceFlag) if ns == rootNamespacePlaceholder { ns = "" } if !ape.NamespaceNameRegexp.MatchString(ns) { commonCmd.ExitOnErr(cmd, "invalid namespace: %w", fmt.Errorf("name must match regexp: %s", ape.NamespaceNameRegexp.String())) } return ns }