diff --git a/authmate/authmate.go b/authmate/authmate.go index 5a642790..7b19ee01 100644 --- a/authmate/authmate.go +++ b/authmate/authmate.go @@ -82,11 +82,6 @@ type FrostFS interface { TimeToEpoch(context.Context, time.Time) (uint64, uint64, error) } -// FrostFSID represents interface to interact with frostfsid contract. -type FrostFSID interface { - RegisterPublicKey(ns string, key *keys.PublicKey) error -} - // Agent contains client communicating with FrostFS and logger. type Agent struct { frostFS FrostFS diff --git a/cmd/s3-authmate/modules/issue-secret.go b/cmd/s3-authmate/modules/issue-secret.go index fe494e4f..b447585c 100644 --- a/cmd/s3-authmate/modules/issue-secret.go +++ b/cmd/s3-authmate/modules/issue-secret.go @@ -8,7 +8,7 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/authmate" - "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs/frostfsid" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs/frostfsid/contract" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/wallet" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" @@ -170,7 +170,7 @@ func runIssueSecretCmd(cmd *cobra.Command, _ []string) error { if rpcAddress == "" { return wrapPreparationError(fmt.Errorf("you can use '%s' flag only along with '%s'", frostfsIDFlag, rpcEndpointFlag)) } - cfg := frostfsid.Config{ + cfg := contract.Config{ RPCAddress: rpcAddress, Contract: frostFSID, ProxyContract: viper.GetString(frostfsIDProxyFlag), @@ -182,7 +182,7 @@ func runIssueSecretCmd(cmd *cobra.Command, _ []string) error { return wrapFrostFSIDInitError(err) } - if err = frostfsIDClient.RegisterPublicKey(viper.GetString(frostfsIDNamespaceFlag), key.PublicKey()); err != nil { + if err = registerPublicKey(frostfsIDClient, viper.GetString(frostfsIDNamespaceFlag), key.PublicKey()); err != nil { return wrapBusinessLogicError(fmt.Errorf("failed to register key in frostfsid: %w", err)) } } diff --git a/cmd/s3-authmate/modules/update-secret.go b/cmd/s3-authmate/modules/update-secret.go index 2f0bb130..62cddf59 100644 --- a/cmd/s3-authmate/modules/update-secret.go +++ b/cmd/s3-authmate/modules/update-secret.go @@ -7,7 +7,7 @@ import ( "strings" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/authmate" - "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs/frostfsid" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs/frostfsid/contract" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/wallet" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" @@ -106,7 +106,7 @@ func runUpdateSecretCmd(cmd *cobra.Command, _ []string) error { if rpcAddress == "" { return wrapPreparationError(fmt.Errorf("you can use '%s' flag only along with '%s'", frostfsIDFlag, rpcEndpointFlag)) } - cfg := frostfsid.Config{ + cfg := contract.Config{ RPCAddress: rpcAddress, Contract: frostFSID, ProxyContract: viper.GetString(frostfsIDProxyFlag), @@ -118,7 +118,7 @@ func runUpdateSecretCmd(cmd *cobra.Command, _ []string) error { return wrapFrostFSIDInitError(err) } - if err = frostfsIDClient.RegisterPublicKey(viper.GetString(frostfsIDNamespaceFlag), key.PublicKey()); err != nil { + if err = registerPublicKey(frostfsIDClient, viper.GetString(frostfsIDNamespaceFlag), key.PublicKey()); err != nil { return wrapBusinessLogicError(fmt.Errorf("failed to register key in frostfsid: %w", err)) } } diff --git a/cmd/s3-authmate/modules/utils.go b/cmd/s3-authmate/modules/utils.go index a72d2a10..4c1c28a6 100644 --- a/cmd/s3-authmate/modules/utils.go +++ b/cmd/s3-authmate/modules/utils.go @@ -11,7 +11,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/authmate" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs" - "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs/frostfsid" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs/frostfsid/contract" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool" @@ -145,10 +145,10 @@ func getLogger() *zap.Logger { return log } -func createFrostFSID(ctx context.Context, log *zap.Logger, cfg frostfsid.Config) (authmate.FrostFSID, error) { +func createFrostFSID(ctx context.Context, log *zap.Logger, cfg contract.Config) (*contract.FrostFSID, error) { log.Debug(logs.PrepareFrostfsIDClient) - cli, err := frostfsid.New(ctx, cfg) + cli, err := contract.New(ctx, cfg) if err != nil { return nil, fmt.Errorf("create frostfsid client: %w", err) } @@ -156,6 +156,15 @@ func createFrostFSID(ctx context.Context, log *zap.Logger, cfg frostfsid.Config) return cli, nil } +func registerPublicKey(cli *contract.FrostFSID, namespace string, key *keys.PublicKey) error { + err := cli.Wait(cli.CreateSubject(namespace, key)) + if err != nil && !strings.Contains(err.Error(), "subject already exists") { + return err + } + + return nil +} + func parseObjectAttrs(attributes string) ([]object.Attribute, error) { if len(attributes) == 0 { return nil, nil