import * as createError from 'http-errors'; import * as express from 'express'; import {NextFunction, Request, Response} from 'express'; import * as path from 'path'; import * as sassMiddleware from 'node-sass-middleware'; import * as compression from 'compression'; import indexRouter from './routes'; import {AuthProxy, AutoReloader, DefaultConfig, HttpLogger, Polyfill, PermManager} from 'pkg-express-utils'; export const app = express(); // Permissions PermManager .grant('user') .execute('read').on('userinfo') .grant('coe_bs') .extend('user') .execute('write').on('userinfo'); // view engine setup app.set('views', path.join(__dirname, '../views')); app.set('view engine', 'pug'); app.use((req, res, next) => { res.locals.DefaultConfig = DefaultConfig; next(); }); // http logger app.use(HttpLogger); app.use(express.json()); app.use(express.urlencoded({extended: false})); // compression app.use(compression()); const router = express.Router(); // auth proxy middleware router.use(AuthProxy.router); // auto reloader (when running in debug mode) router.use(AutoReloader.getRouter({ frontendDirs: './public', })); // session //router.use(Session.getRouter()); // static config router.use('/js/polyfill.js', Polyfill.getRouter('./public/js/bundle.js')); router.use(sassMiddleware({ src: path.join(__dirname, '../../public'), dest: path.join(__dirname, '../../public'), indentedSyntax: true, // true = .sass and false = .scss sourceMap: true, })); router.use(express.static(path.join(__dirname, '../../public'))); router.use(indexRouter); app.use(DefaultConfig.BASE_PATH, router); // catch 404 and forward to error handler app.use((req, res, next) => { next(createError(404)); }); // error handler app.use((err: Error&{status?: number}, req: Request, res: Response, next: NextFunction) => { if (res.headersSent) { return next(err); } // set locals, only providing error in development res.locals.message = err.message; res.locals.error = !DefaultConfig.isProduction ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); return undefined; });