54 lines
1.2 KiB
JavaScript
Raw Normal View History

const _ = require('lodash');
const parseMultipartBody = require('../../utils/parse-multipart');
const uploadFiles = require('../../utils/upload-files');
module.exports = async (ctx, next) => {
2019-08-21 11:05:33 +02:00
const { model } = ctx.params;
2019-11-15 11:49:32 +01:00
const ct = strapi.contentTypes[model];
if (!ct) {
return ctx.send({ error: 'contentType.notFound' }, 404);
}
2019-11-15 11:49:32 +01:00
const target =
ct.plugin === 'admin' ? strapi.admin : strapi.plugins[ct.plugin];
const actionPath = [
'config',
'layout',
ct.modelName,
'actions',
ctx.request.route.action,
];
if (_.has(target, actionPath)) {
const [controller, action] = _.get(target, actionPath, []).split('.');
if (controller && action) {
if (ctx.is('multipart')) {
const { data, files } = parseMultipartBody(ctx);
ctx.request.body = data;
ctx.request.files = {};
await target.controllers[controller.toLowerCase()][action](ctx);
const resBody = ctx.body;
if (ctx.status >= 300) return;
2019-11-15 11:49:32 +01:00
await uploadFiles(resBody, files, {
model: ct.modelName,
source: ct.plugin,
});
return ctx.send(resBody);
}
return await target.controllers[controller.toLowerCase()][action](ctx);
}
}
await next();
};