From 29a2dae40cb7236a856e976a0522aa932239016f Mon Sep 17 00:00:00 2001 From: Denis Kirillov Date: Tue, 12 Mar 2024 11:30:31 +0300 Subject: [PATCH] [#269] Move frostfsid client to separate package Signed-off-by: Denis Kirillov --- .../frostfsid/{ => contract}/frostfsid.go | 74 ++++--------------- 1 file changed, 15 insertions(+), 59 deletions(-) rename internal/frostfs/frostfsid/{ => contract}/frostfsid.go (55%) diff --git a/internal/frostfs/frostfsid/frostfsid.go b/internal/frostfs/frostfsid/contract/frostfsid.go similarity index 55% rename from internal/frostfs/frostfsid/frostfsid.go rename to internal/frostfs/frostfsid/contract/frostfsid.go index 0d3a1e7f..3ffdc2ec 100644 --- a/internal/frostfs/frostfsid/frostfsid.go +++ b/internal/frostfs/frostfsid/contract/frostfsid.go @@ -1,16 +1,10 @@ -package frostfsid +package contract import ( "context" - "encoding/hex" "fmt" - "strconv" - "strings" "git.frostfs.info/TrueCloudLab/frostfs-contract/frostfsid/client" - "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" - "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/handler" - "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/authmate" frostfsutil "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs/util" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/rpcclient" @@ -37,12 +31,6 @@ type Config struct { Key *keys.PrivateKey } -var ( - _ api.FrostFSID = (*FrostFSID)(nil) - _ authmate.FrostFSID = (*FrostFSID)(nil) - _ handler.FrostFSID = (*FrostFSID)(nil) -) - // New creates new FrostfsID contract wrapper that implements auth.FrostFSID interface. func New(ctx context.Context, cfg Config) (*FrostFSID, error) { contractHash, err := frostfsutil.ResolveContractHash(cfg.Contract, cfg.RPCAddress) @@ -78,51 +66,19 @@ func New(ctx context.Context, cfg Config) (*FrostFSID, error) { }, nil } -func (f *FrostFSID) ValidatePublicKey(key *keys.PublicKey) error { - _, err := f.cli.GetSubjectByKey(key) +func (f *FrostFSID) GetSubjectExtended(userHash util.Uint160) (*client.SubjectExtended, error) { + return f.cli.GetSubjectExtended(userHash) +} + +func (f *FrostFSID) GetSubjectKeyByName(namespace, name string) (*keys.PublicKey, error) { + return f.cli.GetSubjectKeyByName(namespace, name) +} + +func (f *FrostFSID) CreateSubject(namespace string, key *keys.PublicKey) (util.Uint256, uint32, error) { + return f.cli.CreateSubject(namespace, key) +} + +func (f *FrostFSID) Wait(tx util.Uint256, vub uint32, err error) error { + _, err = f.cli.Wait(tx, vub, err) return err } - -func (f *FrostFSID) RegisterPublicKey(ns string, key *keys.PublicKey) error { - _, err := f.cli.Wait(f.cli.CreateSubject(ns, key)) - if err != nil && !strings.Contains(err.Error(), "subject already exists") { - return err - } - - return nil -} - -func (f *FrostFSID) GetUserAddress(namespace, name string) (string, error) { - key, err := f.cli.GetSubjectKeyByName(namespace, name) - if err != nil { - return "", err - } - - return key.Address(), nil -} - -func (f *FrostFSID) GetUserKey(account, name string) (string, error) { - key, err := f.cli.GetSubjectKeyByName(account, name) - if err != nil { - return "", err - } - - return hex.EncodeToString(key.Bytes()), nil -} - -func (f *FrostFSID) GetUserGroupIDs(userHash util.Uint160) ([]string, error) { - subjExt, err := f.cli.GetSubjectExtended(userHash) - if err != nil { - if strings.Contains(err.Error(), "not found") { - return nil, nil - } - return nil, err - } - - res := make([]string, len(subjExt.Groups)) - for i, group := range subjExt.Groups { - res[i] = strconv.FormatInt(group.ID, 10) - } - - return res, nil -}