Manual Reference Source

app/initializations/routes.js

const _ = require('lodash');
const Router = require('koa-router');
const Send = require('koa-send');
const Compose = require('koa-compose');
const Config = require('../config');
const RouterUtils = require('../modules/utils/router');
const BackRoutes = require('../../front/backoffice/routes');
const CommonRoutes = require('../../front/common/routes');
const EntitiesUtils = require('../modules/utils/entities');
const UploadUtils = require('../modules/utils/uploads');
const AuthUtils = require('../modules/utils/auth');
const UserRoutes = require('../modules/entities/user/routes');
const EntityRoutes = require('../modules/entities/entity/routes');
const ImporterRoutes = require('../modules/entities/importer/routes');
const ExporterRoutes = require('../modules/entities/exporter/routes');
const PublicationRoutes = require('../modules/entities/publication/routes');
const RssRoutes = require('../modules/3rdparty/rss/routes');

async function initialize_routes() {
    const router = new Router();

    const send_opts = {
        root: Config.root,
    };

    if (Config._env === 'production') {
        send_opts.maxage = 1000 * 60 * 60 * 24 * 7; // 7 days;
    } else {
        send_opts.maxage = 0;
    }

    CommonRoutes.forEach((route) => {
        router.get(route, async (ctx) => {
            await ctx.render('front/views/front');
        });
    });

    _.each(BackRoutes, (route) => {
        router.get(route, async (ctx) => {
            await ctx.render('back/views/back');
        });
    });

    router.get('/public/*', async (ctx) => {
        await Send(ctx, ctx.path, send_opts);
    });


    const response = await EntitiesUtils.search('entity', { size: 10000 });
    const extra_entities = response.result.hits.map(e => e.db.source.type);
    const entities = ['user', 'role', 'config', 'lang', 'form', 'function',
        'pipeline', 'widget', 'page', 'template', 'menu', 'query',
        'importer', 'exporter', 'connector', 'identifier', 'chart', 'mail_template', ...extra_entities];

    entities.forEach((e) => {
        RouterUtils.generate_entity_routes(router, e, []);
    });

    EntityRoutes(router);
    UserRoutes(router);
    ImporterRoutes(router);
    ExporterRoutes(router);
    RssRoutes(router);
    PublicationRoutes(router);

    const puprefix = `${Config.api.public.prefix}/${Config.api.public.version}`;
    router.post(`${puprefix}/single_upload`, Compose([...RouterUtils.upload_middlewares('upload',
        `${Config.root}/public/uploads`), UploadUtils.add_single]));
    router.get('/download/:entity/:eid/:filename', Compose([UploadUtils.download]));
    router.get('/downloads/:entity/:eid/:names/:filenames', Compose([UploadUtils.multi_download]));
    return router;
}

module.exports = initialize_routes;