Skip to content

Commit 463f60c

Browse files
committed
bug: workflow fixes 2 (#19)
* add indicator counter reset/add/substract by title * add object validation * improve legibility and update middlewares * feat: task factory methods moved to service/task task type script can create files
1 parent 4b5f997 commit 463f60c

File tree

10 files changed

+317
-115
lines changed

10 files changed

+317
-115
lines changed

core/controllers/file.js

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,36 +22,39 @@ module.exports = (server) => {
2222
}
2323
})
2424

25-
const middlewares = [
26-
server.auth.bearerMiddleware,
27-
router.resolve.customerNameToEntity({ required: true }),
28-
router.ensureCustomer
29-
]
30-
3125
// FETCH
32-
server.get('/:customer/file', middlewares, fetchFiles)
26+
server.get('/:customer/file',
27+
server.auth.bearerMiddleware,
28+
router.resolve.customerSessionToEntity(),
29+
router.ensureCustomer,
30+
fetchFiles
31+
)
3332

3433
// GET
35-
server.get(
36-
'/:customer/file/:file',
37-
middlewares,
34+
server.get('/:customer/file/:file',
35+
server.auth.bearerMiddleware,
36+
router.resolve.customerSessionToEntity(),
37+
router.ensureCustomer,
3838
router.resolve.idToEntity({ param: 'file', required: true }),
3939
getFile
4040
)
4141

4242
// CREATE
43-
server.post(
44-
'/:customer/file',
45-
middlewares.concat(router.requireCredential('admin')),
43+
server.post('/:customer/file',
44+
server.auth.bearerMiddleware,
45+
router.resolve.customerSessionToEntity(),
46+
router.ensureCustomer,
47+
router.requireCredential('admin'),
4648
upload.single('file'),
4749
createFile,
4850
audit.afterCreate('file', { display: 'filename' })
4951
)
5052

5153
// UPDATE
52-
server.put(
53-
'/:customer/file/:file',
54-
middlewares,
54+
server.put('/:customer/file/:file',
55+
server.auth.bearerMiddleware,
56+
router.resolve.customerSessionToEntity(),
57+
router.ensureCustomer,
5558
router.requireCredential('admin'),
5659
router.resolve.idToEntity({ param:'file', required:true }),
5760
upload.single('file'),
@@ -61,30 +64,31 @@ module.exports = (server) => {
6164
)
6265

6366
// DELETE
64-
server.del(
65-
'/:customer/file/:file',
66-
middlewares,
67+
server.del('/:customer/file/:file',
68+
server.auth.bearerMiddleware,
69+
router.resolve.customerSessionToEntity(),
70+
router.ensureCustomer,
6771
router.requireCredential('admin'),
6872
router.resolve.idToEntity({ param: 'file', required: true }),
6973
removeFile,
7074
audit.afterRemove('file', { display: 'filename' })
7175
)
7276

7377
// DOWNLOAD SCRIPTS
74-
server.get(
75-
'/:customer/file/:file/download',
78+
server.get('/:customer/file/:file/download',
7679
server.auth.bearerMiddleware,
7780
router.requireCredential('user'),
78-
router.resolve.customerNameToEntity({required:true}),
81+
router.resolve.customerSessionToEntity(),
7982
router.ensureCustomer,
8083
router.resolve.idToEntity({param:'file',required:true}),
8184
downloadFile
8285
)
8386

8487
// GET LINKED MODELS
85-
server.get(
86-
'/:customer/file/:file/linkedmodels',
87-
middlewares,
88+
server.get('/:customer/file/:file/linkedmodels',
89+
server.auth.bearerMiddleware,
90+
router.resolve.customerSessionToEntity(),
91+
router.ensureCustomer,
8892
router.resolve.idToEntity({ param:'file', required:true }),
8993
getLinkedModels
9094
)

core/controllers/indicator/counter.js

Lines changed: 72 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,11 @@ const TopicsConstants = require('../../constants/topics')
66
const Constants = require('../../constants')
77

88
module.exports = function (server) {
9-
var middlewares = [
10-
server.auth.bearerMiddleware,
11-
router.resolve.customerNameToEntity({ required: true }),
12-
router.ensureCustomer
13-
]
149

15-
server.patch( '/indicator/:indicator/increase',
16-
middlewares,
10+
server.patch('/indicator/:indicator/increase',
11+
server.auth.bearerMiddleware,
12+
router.resolve.customerSessionToEntity(),
13+
router.ensureCustomer,
1714
router.requireCredential('agent'),
1815
router.resolve.idToEntity({ param:'indicator', required: true }),
1916
isNumericIndicator,
@@ -22,8 +19,22 @@ module.exports = function (server) {
2219
notifyEvent({ operation: Constants.UPDATE })
2320
)
2421

25-
server.patch( '/indicator/:indicator/decrease',
26-
middlewares,
22+
server.patch('/indicator/title/:title/increase',
23+
server.auth.bearerMiddleware,
24+
router.resolve.customerSessionToEntity(),
25+
router.ensureCustomer,
26+
router.requireCredential('agent'),
27+
findByTitleMiddleware(),
28+
isNumericIndicator,
29+
controller.increase,
30+
audit.afterUpdate('indicator', { display: 'title' }),
31+
notifyEvent({ operation: Constants.UPDATE })
32+
)
33+
34+
server.patch('/indicator/:indicator/decrease',
35+
server.auth.bearerMiddleware,
36+
router.resolve.customerSessionToEntity(),
37+
router.ensureCustomer,
2738
router.requireCredential('agent'),
2839
router.resolve.idToEntity({ param:'indicator', required: true }),
2940
isNumericIndicator,
@@ -32,15 +43,65 @@ module.exports = function (server) {
3243
notifyEvent({ operation: Constants.UPDATE })
3344
)
3445

35-
server.patch( '/indicator/:indicator/restart',
36-
middlewares,
46+
server.patch('/indicator/title/:title/decrease',
47+
server.auth.bearerMiddleware,
48+
router.resolve.customerSessionToEntity(),
49+
router.ensureCustomer,
50+
router.requireCredential('agent'),
51+
findByTitleMiddleware(),
52+
isNumericIndicator,
53+
controller.decrease,
54+
audit.afterUpdate('indicator', { display: 'title' }),
55+
notifyEvent({ operation: Constants.UPDATE })
56+
)
57+
58+
server.patch('/indicator/:indicator/restart',
59+
server.auth.bearerMiddleware,
60+
router.resolve.customerSessionToEntity(),
61+
router.ensureCustomer,
3762
router.requireCredential('agent'),
3863
router.resolve.idToEntity({ param:'indicator', required: true }),
3964
isNumericIndicator,
4065
controller.restart,
4166
audit.afterUpdate('indicator', { display: 'title' }),
4267
notifyEvent({ operation: Constants.UPDATE })
4368
)
69+
70+
server.patch('/indicator/title/:title/restart',
71+
server.auth.bearerMiddleware,
72+
router.resolve.customerSessionToEntity(),
73+
router.ensureCustomer,
74+
router.requireCredential('agent'),
75+
findByTitleMiddleware(),
76+
isNumericIndicator,
77+
controller.restart,
78+
audit.afterUpdate('indicator', { display: 'title' }),
79+
notifyEvent({ operation: Constants.UPDATE })
80+
)
81+
}
82+
83+
const findByTitleMiddleware = (options = {}) => {
84+
return (req, res, next) => {
85+
const title = req.params.title
86+
const customer = req.customer
87+
88+
App.Models.Indicator.Indicator.findOne({
89+
title,
90+
customer_id: customer._id
91+
}, (err, indicator) => {
92+
if (err) {
93+
logger.error(err)
94+
return res.send(500, err.message)
95+
}
96+
97+
if (!indicator && options.required !== false) {
98+
return res.send(404, 'indicator not found')
99+
}
100+
101+
req.indicator = indicator
102+
return next()
103+
})
104+
}
44105
}
45106

46107
const controller = {

core/controllers/scheduler/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ module.exports = (server) => {
5959
server.del('/scheduler/:schedule',
6060
server.auth.bearerMiddleware,
6161
Router.requireCredential('admin'),
62-
Router.resolve.customerSessionToEntity({ required: true }),
62+
Router.resolve.customerSessionToEntity(),
6363
Router.ensureCustomer,
6464
schedulerResolver,
6565
remove,
@@ -70,7 +70,7 @@ module.exports = (server) => {
7070
server.put('/scheduler/:schedule/stop',
7171
server.auth.bearerMiddleware,
7272
Router.requireCredential('admin'),
73-
Router.resolve.customerSessionToEntity({ required: true }),
73+
Router.resolve.customerSessionToEntity(),
7474
Router.ensureCustomer,
7575
schedulerResolver,
7676
stop,
@@ -81,7 +81,7 @@ module.exports = (server) => {
8181
server.put('/scheduler/:schedule/start',
8282
server.auth.bearerMiddleware,
8383
Router.requireCredential('admin'),
84-
Router.resolve.customerSessionToEntity({ required: true }),
84+
Router.resolve.customerSessionToEntity(),
8585
Router.ensureCustomer,
8686
schedulerResolver,
8787
start,

core/controllers/task/crud.js

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,59 +11,65 @@ const TaskConstants = require('../../constants/task')
1111
module.exports = (server) => {
1212
server.get('/:customer/task', [
1313
server.auth.bearerMiddleware,
14-
router.resolve.customerNameToEntity({ required: true }),
14+
router.resolve.customerSessionToEntity(),
1515
router.ensureCustomer,
1616
router.requireCredential('viewer'),
17-
router.resolve.idToEntity({ param: 'host', required: false })
17+
router.resolve.idToEntityByCustomer({ param: 'host', required: false })
1818
], controller.fetch)
1919

2020
server.get('/:customer/task/:task', [
2121
server.auth.bearerMiddleware,
22-
router.resolve.customerNameToEntity({ required: true }),
22+
router.resolve.customerSessionToEntity(),
2323
router.ensureCustomer,
2424
router.requireCredential('viewer'),
25-
router.resolve.idToEntity({ param: 'task', required: true }),
25+
router.resolve.idToEntityByCustomer({ param: 'task', required: true }),
2626
router.ensureAllowed({ entity: { name: 'task' } })
2727
], controller.get)
2828

29-
const middlewares = [
29+
server.post('/:customer/task',
3030
server.auth.bearerMiddleware,
31-
router.resolve.customerNameToEntity({ required: true }),
32-
router.ensureCustomer
33-
]
34-
35-
server.post(
36-
'/:customer/task',
37-
middlewares.concat([
38-
router.requireCredential('admin'),
39-
router.resolve.idToEntity({ param: 'script', entity: 'file' }),
40-
router.resolve.idToEntity({ param: 'host' })
41-
]),
31+
router.resolve.customerSessionToEntity(),
32+
router.ensureCustomer,
33+
router.requireCredential('admin'),
34+
router.resolve.idToEntityByCustomer({ param: 'script', entity: 'file' }),
35+
router.resolve.idToEntityByCustomer({ param: 'host' }),
4236
controller.create,
4337
audit.afterCreate('task', { display: 'name' })
4438
)
4539

46-
const mws = middlewares.concat(
47-
router.requireCredential('admin'),
48-
router.resolve.idToEntity({ param: 'task', required: true }),
49-
router.resolve.idToEntity({ param: 'host_id', entity: 'host', into: 'host' })
50-
)
51-
5240
server.patch('/:customer/task/:task',
53-
mws,
41+
server.auth.bearerMiddleware,
42+
router.resolve.customerSessionToEntity(),
43+
router.ensureCustomer,
44+
router.requireCredential('admin'),
45+
router.resolve.idToEntityByCustomer({ param: 'script', entity: 'file' }),
46+
router.resolve.idToEntityByCustomer({ param: 'host' }),
47+
router.resolve.idToEntityByCustomer({ param: 'task', required: true }),
48+
router.resolve.idToEntityByCustomer({ param: 'host_id', entity: 'host', into: 'host' }),
5449
controller.replace,
5550
audit.afterUpdate('task', { display: 'name' })
5651
)
5752

5853
server.put('/:customer/task/:task',
59-
mws,
60-
router.resolve.idToEntity({ param: 'script', entity: 'file' }),
54+
server.auth.bearerMiddleware,
55+
router.resolve.customerSessionToEntity(),
56+
router.ensureCustomer,
57+
router.requireCredential('admin'),
58+
router.resolve.idToEntityByCustomer({ param: 'script', entity: 'file' }),
59+
router.resolve.idToEntityByCustomer({ param: 'host' }),
60+
router.resolve.idToEntityByCustomer({ param: 'task', required: true }),
61+
router.resolve.idToEntityByCustomer({ param: 'host_id', entity: 'host', into: 'host' }),
62+
router.resolve.idToEntityByCustomer({ param: 'script', entity: 'file' }),
6163
controller.replace,
6264
audit.afterReplace('task', { display: 'name' })
6365
)
6466

6567
server.del('/:customer/task/:task',
66-
mws,
68+
server.auth.bearerMiddleware,
69+
router.resolve.customerSessionToEntity(),
70+
router.ensureCustomer,
71+
router.requireCredential('admin'),
72+
router.resolve.idToEntityByCustomer({ param: 'task', required: true }),
6773
controller.remove,
6874
audit.afterRemove('task', { display: 'name' })
6975
)

core/controllers/workflow/crudv2.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ const App = require('../../app')
66
//const logger = require('../../lib/logger')('controller:workflow:crudv2')
77
const AsyncController = require('../../lib/async-controller')
88
const { ClientError, ServerError } = require('../../lib/error-handler')
9+
//const formidable = require('formidable')
10+
//const form = formidable({ multiples: true })
911

1012
module.exports = {
1113
/**
@@ -16,6 +18,13 @@ module.exports = {
1618
create: AsyncController(async (req, res, next) => {
1719
const { customer, user, body } = req
1820

21+
//const { fields, files } = await new Promise((resolve, reject) => {
22+
// form.parse(req, (err, fields, files) => {
23+
// if (err) { reject(err) }
24+
// else { resolve({ fields, files }) }
25+
// })
26+
//})
27+
1928
if (body.graph.nodes.length === 0) {
2029
throw new ClientError('invalid graph definition')
2130
}

0 commit comments

Comments
 (0)