@digicms/cms
Version:
An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite
107 lines (90 loc) • 2.58 kB
JavaScript
;
const _ = require('lodash');
const createRouteScopeGenerator = (namespace) => (route) => {
const prefix = namespace.endsWith('::') ? namespace : `${namespace}.`;
if (typeof route.handler === 'string') {
_.defaultsDeep(route, {
config: {
auth: {
scope: [`${route.handler.startsWith(prefix) ? '' : prefix}${route.handler}`],
},
},
});
}
};
/**
* Register all routes
* @param {import('../../').Strapi} strapi
*/
module.exports = (strapi) => {
registerAdminRoutes(strapi);
registerAPIRoutes(strapi);
registerPluginRoutes(strapi);
};
/**
* Register admin routes
* @param {import('../../').Strapi} strapi
*/
const registerAdminRoutes = (strapi) => {
const generateRouteScope = createRouteScopeGenerator(`admin::`);
strapi.admin.routes.forEach((route) => {
generateRouteScope(route);
route.info = { pluginName: 'admin' };
});
strapi.server.routes({
type: 'admin',
prefix: '/admin',
routes: strapi.admin.routes,
});
};
/**
* Register plugin routes
* @param {import('../../').Strapi} strapi
*/
const registerPluginRoutes = (strapi) => {
for (const pluginName of Object.keys(strapi.plugins)) {
const plugin = strapi.plugins[pluginName];
const generateRouteScope = createRouteScopeGenerator(`plugin::${pluginName}`);
if (Array.isArray(plugin.routes)) {
plugin.routes.forEach((route) => {
generateRouteScope(route);
route.info = { pluginName };
});
strapi.server.routes({
type: 'admin',
prefix: `/${pluginName}`,
routes: plugin.routes,
});
} else {
_.forEach(plugin.routes, (router) => {
router.type = router.type || 'admin';
router.prefix = `/${pluginName}`;
router.routes.forEach((route) => {
generateRouteScope(route);
route.info = { pluginName };
});
strapi.server.routes(router);
});
}
}
};
/**
* Register api routes
* @param {import('../../').Strapi} strapi
*/
const registerAPIRoutes = (strapi) => {
for (const apiName of Object.keys(strapi.api)) {
const api = strapi.api[apiName];
const generateRouteScope = createRouteScopeGenerator(`api::${apiName}`);
_.forEach(api.routes, (router) => {
// TODO: remove once auth setup
// pass meta down to compose endpoint
router.type = 'content-api';
router.routes.forEach((route) => {
generateRouteScope(route);
route.info = { apiName };
});
return strapi.server.routes(router);
});
}
};