var log4js = require('log4js'); var app = module.exports = koa(); app.keys = ['saver sekret key', 'to sign cookies']; app.use(helmet.defaults()); app.use(stats(cfg.graphite)); app.use(logger()); app.use(statics(__dirname + '/public')); app.use(compress()); locale(app); app.use(i18n(app, { directory: './config/locales', locales: ['en', 'cs'], modes: [ 'query', 'header' ] })); app.use(views('views', { map: { html: 'swig' }, cache: false })); app.use(notFound('404.html')); app.use(errorPage('error.html')); app.use(
function Scaffold(configs) { var settings = _.extend(_.clone(defaults), configs || {}); var devMode = true; if (settings.env === 'production') devMode = false; // find `views` and `public` abs path var dirs = {}; dirs.views = finder(configs, 'views'); dirs.uploads = finder(configs, 'uploads'); var app = koa(); app.db = monk(settings.database.name); app.keys = ['feedr session']; app.use(bodyParser()); app.use(session(app)); app.use(passport.initialize()); app.use(passport.session()); app.use(views(settings.views, settings.view_options)); app.use(logger(devMode ? 'dev' : settings.logformat)); app.use(router(app)); if(Array.isArray(settings.publics)) { for(var i = 0; i < settings.publics.length; i++) { app.use(serve(settings.publics[i])); } } else { app.use(serve(settings.publics)); } locale(app); // expose locals to template engine locals(app, { sys: pkg, site: settings }); app.use(i18n(app, settings.i18n)); //app.use(errors()); app.use(function *(next) { try { yield next; } catch (err) { console.log(err); if(err.status === 401) { this.status = 401; this.set('WWW-Authenticate', 'Basic'); this.body = 'Unauthorized request'; } if(!err.status) { this.status = 500; yield this.render(settings.error['500']); } else { this.status = err.status; } } if(this.status === 200) { return; } if(!this.status) { this.status = 404; } if(this.status === 404) { yield this.render(settings.error['404']); } if(this.status === 500) { yield this.render(settings.error['500']); } }); //setting language-cookie if f.e. ?lang=de is added to the url app.use(function * (next) { this.i18n.setLocaleFromQuery(this.request); yield next; var currentLocale = this.i18n.getLocale(); this.cookies.set('lang', currentLocale, { signed: true }); }); // setup server settings var port = _.isNumber(settings.port) ? settings.port : defaults.port; this.app = app; this.port = port; return new Inner(app, port); }
Gaia.prototype.initMiddleware = function * () { debug('Initialize middlewares'); var self = this, config = this.config, //reference to config app = this._app; if (config.application.session) { debug("Init session"); var session = require('koa-sess'); app.keys = config.application.session.keys || ['default-session-keys']; app.use(session()); } app.use(bodyParser()); if (config.authentification) { debug("Init auth"); var passport = require('koa-passport'); injector.register('$passport', passport); var auth = injector.processInject(config.authentification); yield auth.init(); app.use(passport.initialize()); app.use(passport.session()); this.passport = passport; } if (config.application.i18n) { debug('Init i18n'); var locale = require('koa-locale') locale(app); } locals(app, { __gaia: 'Gaia application' }); if (config.application.i18n) { var i18n = require('koa-i18n') app.use(i18n(app, config.application.i18n)); } if (config.application.views) { debug('init views'); var views = require('koa-render-locals'), viewDir = this._configPath.viewsDir; options = config.application.views.options || {}; app.use(views(viewDir, options)); } app.use(commons.favicon()); app.use(commons.logger()); app.use(commons.responseTime()); app.use(commons.compress()); app.use(function * (next) { if (this.path.indexOf('/public') != 0) return yield next; this.path = this.path.substring(7); yield send(this, this.path, { root: self._configPath.publicDir }); }); };