forked from TrueCloudLab/frostfs-node
103 lines
3.3 KiB
Go
103 lines
3.3 KiB
Go
package morph
|
|
|
|
import (
|
|
eacl "github.com/nspcc-dev/neofs-node/pkg/core/container/acl/extended/storage"
|
|
"github.com/nspcc-dev/neofs-node/pkg/core/container/storage"
|
|
contract "github.com/nspcc-dev/neofs-node/pkg/morph/client/container"
|
|
clientWrapper "github.com/nspcc-dev/neofs-node/pkg/morph/client/container/wrapper"
|
|
"github.com/pkg/errors"
|
|
"go.uber.org/dig"
|
|
)
|
|
|
|
type containerContractResult struct {
|
|
dig.Out
|
|
|
|
ExtendedACLStore eacl.Storage
|
|
|
|
ContainerStorage storage.Storage
|
|
}
|
|
|
|
const (
|
|
containerContractName = "container"
|
|
|
|
containerContractSetEACLOpt = "set_eacl_method"
|
|
|
|
containerContractEACLOpt = "get_eacl_method"
|
|
|
|
containerContractPutOpt = "put_method"
|
|
|
|
containerContractGetOpt = "get_method"
|
|
|
|
containerContractDelOpt = "delete_method"
|
|
|
|
containerContractListOpt = "list_method"
|
|
)
|
|
|
|
// ContainerContractSetEACLOptPath returns the config path to set eACL method name of Container contract.
|
|
func ContainerContractSetEACLOptPath() string {
|
|
return optPath(prefix, containerContractName, containerContractSetEACLOpt)
|
|
}
|
|
|
|
// ContainerContractEACLOptPath returns the config path to get eACL method name of Container contract.
|
|
func ContainerContractEACLOptPath() string {
|
|
return optPath(prefix, containerContractName, containerContractEACLOpt)
|
|
}
|
|
|
|
// ContainerContractPutOptPath returns the config path to put container method name of Container contract.
|
|
func ContainerContractPutOptPath() string {
|
|
return optPath(prefix, containerContractName, containerContractPutOpt)
|
|
}
|
|
|
|
// ContainerContractGetOptPath returns the config path to get container method name of Container contract.
|
|
func ContainerContractGetOptPath() string {
|
|
return optPath(prefix, containerContractName, containerContractGetOpt)
|
|
}
|
|
|
|
// ContainerContractDelOptPath returns the config path to delete container method name of Container contract.
|
|
func ContainerContractDelOptPath() string {
|
|
return optPath(prefix, containerContractName, containerContractDelOpt)
|
|
}
|
|
|
|
// ContainerContractListOptPath returns the config path to list containers method name of Container contract.
|
|
func ContainerContractListOptPath() string {
|
|
return optPath(prefix, containerContractName, containerContractListOpt)
|
|
}
|
|
|
|
func newContainerContract(p contractParams) (res containerContractResult, err error) {
|
|
client, ok := p.MorphContracts[containerContractName]
|
|
if !ok {
|
|
err = errors.Errorf("missing %s contract client", containerContractName)
|
|
return
|
|
}
|
|
|
|
var (
|
|
setEACLMethod = p.Viper.GetString(ContainerContractSetEACLOptPath())
|
|
eaclMethod = p.Viper.GetString(ContainerContractEACLOptPath())
|
|
getMethod = p.Viper.GetString(ContainerContractGetOptPath())
|
|
putMethod = p.Viper.GetString(ContainerContractPutOptPath())
|
|
deleteMethod = p.Viper.GetString(ContainerContractDelOptPath())
|
|
listMethod = p.Viper.GetString(ContainerContractListOptPath())
|
|
)
|
|
|
|
var containerClient *contract.Client
|
|
if containerClient, err = contract.New(client,
|
|
contract.WithSetEACLMethod(setEACLMethod),
|
|
contract.WithEACLMethod(eaclMethod),
|
|
contract.WithGetMethod(getMethod),
|
|
contract.WithPutMethod(putMethod),
|
|
contract.WithDeleteMethod(deleteMethod),
|
|
contract.WithListMethod(listMethod),
|
|
); err != nil {
|
|
return
|
|
}
|
|
|
|
var wrapClient *clientWrapper.Wrapper
|
|
if wrapClient, err = clientWrapper.New(containerClient); err != nil {
|
|
return
|
|
}
|
|
|
|
res.ContainerStorage = wrapClient
|
|
res.ExtendedACLStore = wrapClient
|
|
|
|
return res, nil
|
|
}
|