All files / lib/routes helper.js

32.26% Statements 10/31
0% Branches 0/14
0% Functions 0/5
32.26% Lines 10/31
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()
}