forked from TrueCloudLab/frostfs-node
123 lines
3.3 KiB
Go
123 lines
3.3 KiB
Go
|
package morph
|
||
|
|
||
|
import (
|
||
|
"github.com/nspcc-dev/neofs-node/lib/acl"
|
||
|
"github.com/nspcc-dev/neofs-node/lib/container"
|
||
|
"github.com/nspcc-dev/neofs-node/lib/implementations"
|
||
|
"github.com/pkg/errors"
|
||
|
"go.uber.org/dig"
|
||
|
)
|
||
|
|
||
|
type containerContractResult struct {
|
||
|
dig.Out
|
||
|
|
||
|
ContainerContract *implementations.MorphContainerContract
|
||
|
|
||
|
BinaryExtendedACLStore acl.BinaryExtendedACLStore
|
||
|
|
||
|
ExtendedACLSource acl.ExtendedACLSource
|
||
|
|
||
|
ContainerStorage container.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
|
||
|
}
|
||
|
|
||
|
morphClient := new(implementations.MorphContainerContract)
|
||
|
morphClient.SetContainerContractClient(client)
|
||
|
|
||
|
morphClient.SetEACLSetMethodName(
|
||
|
p.Viper.GetString(
|
||
|
ContainerContractSetEACLOptPath(),
|
||
|
),
|
||
|
)
|
||
|
morphClient.SetEACLGetMethodName(
|
||
|
p.Viper.GetString(
|
||
|
ContainerContractEACLOptPath(),
|
||
|
),
|
||
|
)
|
||
|
morphClient.SetContainerGetMethodName(
|
||
|
p.Viper.GetString(
|
||
|
ContainerContractGetOptPath(),
|
||
|
),
|
||
|
)
|
||
|
morphClient.SetContainerPutMethodName(
|
||
|
p.Viper.GetString(
|
||
|
ContainerContractPutOptPath(),
|
||
|
),
|
||
|
)
|
||
|
morphClient.SetContainerDeleteMethodName(
|
||
|
p.Viper.GetString(
|
||
|
ContainerContractDelOptPath(),
|
||
|
),
|
||
|
)
|
||
|
morphClient.SetContainerListMethodName(
|
||
|
p.Viper.GetString(
|
||
|
ContainerContractListOptPath(),
|
||
|
),
|
||
|
)
|
||
|
|
||
|
res.ContainerContract = morphClient
|
||
|
|
||
|
res.BinaryExtendedACLStore = morphClient
|
||
|
|
||
|
res.ExtendedACLSource, err = implementations.ExtendedACLSourceFromBinary(res.BinaryExtendedACLStore)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
res.ContainerStorage = morphClient
|
||
|
|
||
|
return res, nil
|
||
|
}
|