3
0

Added a node check, cleaned up shared and exposed module service

This commit is contained in:
Peter Grlica
2020-11-12 21:00:34 +01:00
parent 4f69ad8cdb
commit 726a9f16e8
6 changed files with 87 additions and 48 deletions
+9 -9
View File
@@ -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"
+10 -39
View File
@@ -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"