| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 |
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
| 'use strict'
const helper = module.exports = { }
const Joi = require('joi')
const responseHelper = require('../responseHelper.js')
const router = require('../router.js')
const debug = require('../debugging.js')
const _ = {
assign: require('lodash.assign')
}
helper.validate = (someObject, someDefinition, callback) => {
debug.validationInput(JSON.stringify(someObject))
Joi.validate(someObject, someDefinition, { abortEarly: false }, (err, sanitisedObject) => {
if (err) {
return callback({ // eslint-disable-line standard/no-callback-literal
status: '403',
code: 'EFORBIDDEN',
title: 'Param validation failed',
detail: err.details
})
}
_.assign(someObject, sanitisedObject)
callback()
})
}
helper.checkForBody = (request, callback) => {
if (!request.params.data) {
return callback({ // eslint-disable-line standard/no-callback-literal
status: '403',
code: 'EFORBIDDEN',
title: 'Request validation failed',
detail: 'Missing "data" - have you sent the right http headers?'
})
}
// data can be {} or [] both of which are typeof === 'object'
if (typeof request.params.data !== 'object') {
return callback({ // eslint-disable-line standard/no-callback-literal
status: '403',
code: 'EFORBIDDEN',
title: 'Request validation failed',
detail: '"data" must be an object - have you sent the right http headers?'
})
}
callback()
}
helper.handleError = (request, res, err) => {
const errorResponse = responseHelper.generateError(request, err)
const httpCode = errorResponse.errors[0].status || 500
return router.sendResponse(res, errorResponse, httpCode)
}
helper.verifyRequest = (request, resourceConfig, res, handlerRequest, callback) => {
if (!resourceConfig) {
return helper.handleError(request, res, {
status: '404',
code: 'ENOTFOUND',
title: 'Resource not found',
detail: `The requested resource '${request.params.type}' does not exist`
})
}
if (!resourceConfig.handlers.ready) {
return helper.handleError(request, res, {
status: '503',
code: 'EUNAVAILABLE',
title: 'Resource temporarily unavailable',
detail: `The requested resource '${request.params.type}' is temporarily unavailable`
})
}
if (!resourceConfig.handlers[handlerRequest]) {
return helper.handleError(request, res, {
status: '403',
code: 'EFORBIDDEN',
title: 'Resource not supported',
detail: `The requested resource '${request.params.type}' does not support '${handlerRequest}'`
})
}
return callback()
}
|