diff --git a/lib/configuration/hooks/jsonapi/helpers/request.js b/lib/configuration/hooks/jsonapi/helpers/request.js new file mode 100644 index 0000000000..f73420f101 --- /dev/null +++ b/lib/configuration/hooks/jsonapi/helpers/request.js @@ -0,0 +1,23 @@ +'use strict'; + +/** + * Module dependencies + */ + +// Public node modules. +const _ = require('lodash'); + +/** + * JSON API helper + */ + +module.exports = { + + default: {}, + + /** + * Parse request + */ + + parse: function (ctx) {} +}; diff --git a/lib/configuration/hooks/jsonapi/index.js b/lib/configuration/hooks/jsonapi/index.js index 73b47c7689..f81821e2d7 100644 --- a/lib/configuration/hooks/jsonapi/index.js +++ b/lib/configuration/hooks/jsonapi/index.js @@ -6,6 +6,7 @@ // Public node modules. const _ = require('lodash'); +const request = require('./helpers/request'); const response = require('./helpers/response'); /** @@ -64,6 +65,18 @@ module.exports = function (strapi) { strapi.app.use(interceptor); cb(); + }, + + parse: function * (next) { + // Verify Content-Type header + if (this.request.type !== 'application/vnd.api+json') { + this.status = 406; + this.body = ''; + } + + request.parse(this); + + yield next; } }; diff --git a/lib/configuration/hooks/router/index.js b/lib/configuration/hooks/router/index.js index ad2a5bdd91..5bda18178e 100644 --- a/lib/configuration/hooks/router/index.js +++ b/lib/configuration/hooks/router/index.js @@ -12,6 +12,7 @@ const _ = require('lodash'); // Local utilities. const regex = require('../../../../util/regex'); +const JSONAPI = require('../jsonapi')(); /** * Router hook @@ -86,6 +87,7 @@ module.exports = function (strapi) { // Add the `globalPolicy`. policies.push(globalPolicy(endpoint, value, route)); + policies.push(JSONAPI.parse); if (_.isArray(value.policies) && !_.isEmpty(value.policies)) { _.forEach(value.policies, function (policy) {