Added a node check, cleaned up shared and exposed module service
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
|
||||
type (
|
||||
exposedModule struct {
|
||||
node node
|
||||
module composeService.ModuleService
|
||||
namespace composeService.NamespaceService
|
||||
store store.Storer
|
||||
@@ -23,7 +24,7 @@ type (
|
||||
Update(ctx context.Context, updated *types.ExposedModule) (*types.ExposedModule, error)
|
||||
Find(ctx context.Context, filter types.ExposedModuleFilter) (types.ExposedModuleSet, types.ExposedModuleFilter, error)
|
||||
FindByID(ctx context.Context, nodeID uint64, moduleID uint64) (*types.ExposedModule, error)
|
||||
FindByAny(ctx context.Context, nodeID uint64, identifier interface{}) (*types.ExposedModule, error)
|
||||
// FindByAny(ctx context.Context, nodeID uint64, identifier interface{}) (*types.ExposedModule, error)
|
||||
DeleteByID(ctx context.Context, nodeID, moduleID uint64) (*types.ExposedModule, error)
|
||||
}
|
||||
|
||||
@@ -32,6 +33,7 @@ type (
|
||||
|
||||
func ExposedModule() ExposedModuleService {
|
||||
return &exposedModule{
|
||||
node: *DefaultNode,
|
||||
module: composeService.DefaultModule,
|
||||
namespace: composeService.DefaultNamespace,
|
||||
store: DefaultStore,
|
||||
@@ -83,7 +85,9 @@ func (svc exposedModule) Update(ctx context.Context, updated *types.ExposedModul
|
||||
// return ExposedModuleErrNotAllowedToCreate()
|
||||
// }
|
||||
|
||||
aProps.setNode(nil)
|
||||
if _, err := svc.node.FindByID(ctx, updated.NodeID); err != nil {
|
||||
return ExposedModuleErrNodeNotFound()
|
||||
}
|
||||
|
||||
if _, err := svc.namespace.With(ctx).FindByID(updated.ComposeNamespaceID); err != nil {
|
||||
return ExposedModuleErrComposeNamespaceNotFound()
|
||||
@@ -201,8 +205,9 @@ func (svc exposedModule) Create(ctx context.Context, new *types.ExposedModule) (
|
||||
// return ExposedModuleErrNotAllowedToCreate()
|
||||
// }
|
||||
|
||||
// TODO - fetch Node
|
||||
aProps.setNode(nil)
|
||||
if _, err := svc.node.FindByID(ctx, new.NodeID); err != nil {
|
||||
return ExposedModuleErrNodeNotFound()
|
||||
}
|
||||
|
||||
if _, err := svc.namespace.With(ctx).FindByID(new.ComposeNamespaceID); err != nil {
|
||||
return ExposedModuleErrComposeNamespaceNotFound()
|
||||
@@ -258,8 +263,3 @@ func (svc exposedModule) uniqueCheck(ctx context.Context, m *types.ExposedModule
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// trim1st removes 1st param and returns only error
|
||||
func trim1st(_ interface{}, err error) error {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -604,6 +604,36 @@ func ExposedModuleErrNotUnique(mm ...*exposedModuleActionProps) *errors.Error {
|
||||
return e
|
||||
}
|
||||
|
||||
// ExposedModuleErrNodeNotFound returns "federation:exposed_module.nodeNotFound" as *errors.Error
|
||||
//
|
||||
//
|
||||
// This function is auto-generated.
|
||||
//
|
||||
func ExposedModuleErrNodeNotFound(mm ...*exposedModuleActionProps) *errors.Error {
|
||||
var p = &exposedModuleActionProps{}
|
||||
if len(mm) > 0 {
|
||||
p = mm[0]
|
||||
}
|
||||
|
||||
var e = errors.New(
|
||||
errors.KindInternal,
|
||||
|
||||
p.Format("node does not exist", nil),
|
||||
|
||||
errors.Meta("type", "nodeNotFound"),
|
||||
errors.Meta("resource", "federation:exposed_module"),
|
||||
|
||||
errors.Meta(exposedModulePropsMetaKey{}, p),
|
||||
|
||||
errors.StackSkip(1),
|
||||
)
|
||||
|
||||
if len(mm) > 0 {
|
||||
}
|
||||
|
||||
return e
|
||||
}
|
||||
|
||||
// ExposedModuleErrComposeModuleNotFound returns "federation:exposed_module.composeModuleNotFound" as *errors.Error
|
||||
//
|
||||
//
|
||||
|
||||
@@ -71,6 +71,10 @@ errors:
|
||||
log: "used duplicate node TODO - {module.NodeID} for this compose module TODO - module.rel_compose_module"
|
||||
severity: warning
|
||||
|
||||
- error: nodeNotFound
|
||||
message: "node does not exist"
|
||||
severity: warning
|
||||
|
||||
- error: composeModuleNotFound
|
||||
message: "compose module not found"
|
||||
severity: "warning"
|
||||
|
||||
@@ -2,7 +2,6 @@ package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strconv"
|
||||
|
||||
composeService "github.com/cortezaproject/corteza-server/compose/service"
|
||||
"github.com/cortezaproject/corteza-server/federation/types"
|
||||
@@ -12,21 +11,18 @@ import (
|
||||
|
||||
type (
|
||||
sharedModule struct {
|
||||
node node
|
||||
compose composeService.ModuleService
|
||||
store store.Storer
|
||||
actionlog actionlog.Recorder
|
||||
}
|
||||
|
||||
SharedModuleService interface {
|
||||
Find(ctx context.Context, filter types.SharedModuleFilter) (types.SharedModuleSet, types.SharedModuleFilter, error)
|
||||
FindByID(ctx context.Context, nodeID uint64, moduleID uint64) (*types.SharedModule, error)
|
||||
FindByAny(ctx context.Context, nodeID uint64, identifier interface{}) (*types.SharedModule, error)
|
||||
Create(ctx context.Context, new *types.SharedModule) (*types.SharedModule, error)
|
||||
Update(ctx context.Context, updated *types.SharedModule) (*types.SharedModule, error)
|
||||
// DeleteByID(ctx context.Context, nodeID, moduleID uint64) error
|
||||
Find(ctx context.Context, filter types.SharedModuleFilter) (types.SharedModuleSet, types.SharedModuleFilter, error)
|
||||
FindByID(ctx context.Context, nodeID uint64, moduleID uint64) (*types.SharedModule, error)
|
||||
}
|
||||
|
||||
// moduleUpdateHandler func(ctx context.Context, ns *types.Node, c *types.SharedModule) (bool, bool, error)
|
||||
)
|
||||
|
||||
func SharedModule() SharedModuleService {
|
||||
@@ -37,27 +33,6 @@ func SharedModule() SharedModuleService {
|
||||
}
|
||||
}
|
||||
|
||||
// FindByAny tries to find module in a particular namespace by id, handle or name
|
||||
func (svc sharedModule) FindByAny(ctx context.Context, nodeID uint64, identifier interface{}) (m *types.SharedModule, err error) {
|
||||
if ID, ok := identifier.(uint64); ok {
|
||||
m, err = svc.FindByID(ctx, nodeID, ID)
|
||||
} else if strIdentifier, ok := identifier.(string); ok {
|
||||
if ID, _ := strconv.ParseUint(strIdentifier, 10, 64); ID > 0 {
|
||||
m, err = svc.FindByID(ctx, nodeID, ID)
|
||||
}
|
||||
} else {
|
||||
// force invalid ID error
|
||||
// we do that to wrap error with lookup action context
|
||||
_, err = svc.FindByID(ctx, nodeID, 0)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return m, nil
|
||||
}
|
||||
|
||||
func (svc sharedModule) FindByID(ctx context.Context, nodeID uint64, moduleID uint64) (module *types.SharedModule, err error) {
|
||||
err = func() error {
|
||||
if module, err = store.LookupFederationSharedModuleByID(ctx, svc.store, moduleID); err != nil {
|
||||
@@ -81,8 +56,9 @@ func (svc sharedModule) Create(ctx context.Context, new *types.SharedModule) (*t
|
||||
// return ExposedModuleErrNotAllowedToCreate()
|
||||
// }
|
||||
|
||||
// TODO - fetch Node
|
||||
aProps.setNode(nil)
|
||||
if _, err := svc.node.FindByID(ctx, new.NodeID); err != nil {
|
||||
return SharedModuleErrNodeNotFound()
|
||||
}
|
||||
|
||||
// Check for node - compose.Module combo
|
||||
if err = svc.uniqueCheck(ctx, new); err != nil {
|
||||
@@ -120,6 +96,10 @@ func (svc sharedModule) Update(ctx context.Context, updated *types.SharedModule)
|
||||
|
||||
aProps.setModule(updated)
|
||||
|
||||
if _, err := svc.node.FindByID(ctx, updated.NodeID); err != nil {
|
||||
return SharedModuleErrNodeNotFound()
|
||||
}
|
||||
|
||||
if err = store.UpdateFederationSharedModule(ctx, s, updated); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -191,10 +171,6 @@ func (svc sharedModule) Find(ctx context.Context, filter types.SharedModuleFilte
|
||||
)
|
||||
|
||||
err = func() error {
|
||||
// handle node for actionlog here?
|
||||
if f.NodeID > 0 {
|
||||
}
|
||||
|
||||
if set, f, err = store.SearchFederationSharedModules(ctx, svc.store, filter); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -204,8 +180,3 @@ func (svc sharedModule) Find(ctx context.Context, filter types.SharedModuleFilte
|
||||
|
||||
return set, f, svc.recordAction(ctx, aProps, SharedModuleActionSearch, err)
|
||||
}
|
||||
|
||||
// // trim1st removes 1st param and returns only error
|
||||
// func trim1st(_ interface{}, err error) error {
|
||||
// return err
|
||||
// }
|
||||
|
||||
@@ -514,6 +514,36 @@ func SharedModuleErrNotUnique(mm ...*sharedModuleActionProps) *errors.Error {
|
||||
return e
|
||||
}
|
||||
|
||||
// SharedModuleErrNodeNotFound returns "federation:shared_module.nodeNotFound" as *errors.Error
|
||||
//
|
||||
//
|
||||
// This function is auto-generated.
|
||||
//
|
||||
func SharedModuleErrNodeNotFound(mm ...*sharedModuleActionProps) *errors.Error {
|
||||
var p = &sharedModuleActionProps{}
|
||||
if len(mm) > 0 {
|
||||
p = mm[0]
|
||||
}
|
||||
|
||||
var e = errors.New(
|
||||
errors.KindInternal,
|
||||
|
||||
p.Format("node does not exist", nil),
|
||||
|
||||
errors.Meta("type", "nodeNotFound"),
|
||||
errors.Meta("resource", "federation:shared_module"),
|
||||
|
||||
errors.Meta(sharedModulePropsMetaKey{}, p),
|
||||
|
||||
errors.StackSkip(1),
|
||||
)
|
||||
|
||||
if len(mm) > 0 {
|
||||
}
|
||||
|
||||
return e
|
||||
}
|
||||
|
||||
// SharedModuleErrNotAllowedToRead returns "federation:shared_module.notAllowedToRead" as *errors.Error
|
||||
//
|
||||
//
|
||||
|
||||
@@ -65,6 +65,10 @@ errors:
|
||||
log: "used duplicate node TODO"
|
||||
severity: warning
|
||||
|
||||
- error: nodeNotFound
|
||||
message: "node does not exist"
|
||||
severity: warning
|
||||
|
||||
- error: notAllowedToRead
|
||||
message: "not allowed to read this module"
|
||||
log: "could not read {module}; insufficient permissions"
|
||||
|
||||
Reference in New Issue
Block a user