@unclepaul/allcountjs
Version:
The open source framework for rapid business application development with Node.js
132 lines (118 loc) • 6.2 kB
JavaScript
var path = require('path');
var busboy = require('connect-busboy');
var Q = require('q');
var methods = require('methods');
var _ = require('underscore');
module.exports = function (
app,
injection,
securityService,
express,
templateVarService,
entityRoute,
fieldDescriptionsRoute,
crudRoute,
customViewsRoute,
indexRoute,
viewService,
actionsRoute,
menuRoute,
securityRoute,
passport,
messages
) {
return {
setup: function () {
function notAuthenticated(req, res) {
if (req.url.indexOf('/api/') === 0 || req.url.indexOf('/webhooks/') === 0) {
res.status(403).send("Not authenticated");
} else {
res.redirect('/login');
}
}
function checkOnlyAuthenticated(req, res, next) {
if (!req.user && securityService.onlyAuthenticated && req.url.indexOf('/oauth/') != 0) {
notAuthenticated(req, res);
} else {
next();
}
}
var crudOperationsRouter = express.Router();
var appAccessRouter = express.Router();
var setupDefaultMiddlewareAfterMatch = function (router) {
_.union(['all'], methods).forEach(function (method) {
var superMethod = router[method];
router[method] = function () {
var nextArguments = Array.prototype.concat.apply([], arguments);
nextArguments.splice(1, 0, checkOnlyAuthenticated);
return superMethod.apply(this, nextArguments);
}
});
};
setupDefaultMiddlewareAfterMatch(crudOperationsRouter);
setupDefaultMiddlewareAfterMatch(appAccessRouter);
appAccessRouter.use(securityRoute.authenticateWithTokenMiddleware)
.use(function (req, res, next) {
res.loginOrForbidden = function () {
if (!req.user) {
notAuthenticated(req, res);
} else {
templateVarService.setupLocals(req, res);
res.render('permission-denied');
}
};
next();
})
.use(crudRoute.withUserScope)
.get('/entity/:entityTypeId', entityRoute.entity)
.get('/entity/:entityTypeId/:entityId', entityRoute.entity)
.get('/entity/:entityTypeId/:entityId/:state', entityRoute.entity)
.get('/api/entity/:entityTypeId/permissions', fieldDescriptionsRoute.permissions);
customViewsRoute.setupCustomViews(appAccessRouter);
if (!viewService.views['/']) {
appAccessRouter.get('/', indexRoute.index);
}
crudOperationsRouter.use(crudRoute.checkReadPermissionMiddleware);
crudOperationsRouter.get('/api/file/download/:fileId', crudRoute.downloadFile);
crudOperationsRouter.post('/api/file/upload', busboy(), crudRoute.uploadFile);
crudOperationsRouter.post('/api/file/upload/:provider', busboy(), crudRoute.uploadFile);
crudOperationsRouter.get('/api/entity/:entityTypeId/reference-values', crudRoute.referenceValues);
crudOperationsRouter.get('/api/entity/:entityTypeId/reference-values/:entityId', crudRoute.referenceValueByEntityId);
crudOperationsRouter.get('/api/entity/:entityTypeId/layout', fieldDescriptionsRoute.layout);
crudOperationsRouter.get('/api/entity/:entityTypeId/entity-description', fieldDescriptionsRoute.entityDescription);
crudOperationsRouter.get('/api/entity/:entityTypeId/field-descriptions', fieldDescriptionsRoute.fieldDescriptions);
crudOperationsRouter.post('/api/entity/:entityTypeId/actions/:actionId', actionsRoute.performAction);
crudOperationsRouter.post('/api/entity/:entityTypeId/actions', actionsRoute.actionList);
crudOperationsRouter.get('/api/entity/:entityTypeId/count', crudRoute.findCount);
crudOperationsRouter.get('/api/entity/:entityTypeId', crudRoute.findRange);
crudOperationsRouter.post('/api/entity/:entityTypeId', crudRoute.createEntity);
crudOperationsRouter.get('/api/entity/:entityTypeId/:entityId', crudRoute.readEntity);
crudOperationsRouter.put('/api/entity/:entityTypeId', crudRoute.updateEntity);
crudOperationsRouter.delete('/api/entity/:entityTypeId/:entityId', crudRoute.deleteEntity);
appAccessRouter.use(crudOperationsRouter);
appAccessRouter.get('/api/menus', menuRoute.menus);
appAccessRouter.get('/api/app-info', menuRoute.appInfo);
app.get('/api/messages', function (req, res, next) {
securityRoute.setAccessControlHeaders(res);
next()
}, messages.messagesObj);
injection.inScope({
app: function () { return app },
appAccessRouter: function () { return appAccessRouter }
}, function () {
injection.inject('appConfigurators').forEach(function (configurator) { configurator.configure() });
});
app.post('/login', securityRoute.performLogin(Q.nfbind(function (req, res, callback) {
passport.authenticate('local', function (err, user) {
callback(err, user)
})(req, res);
})));
app.get('/login', crudRoute.withUserScope, securityRoute.login);
app.post('/api/sign-up', securityRoute.signUp);
app.post('/api/sign-in', securityRoute.apiSignIn);
app.get('/logout', securityRoute.logout);
app.get('/js/messages.js', messages.messagesNgModule);
app.use(appAccessRouter);
}
};
};