'use strict'; angular.module('ffffng').factory('app', function (fs, config, _) { var express = require('express'); var auth = require('http-auth'); var bodyParser = require('body-parser'); var compress = require('compression'); var app = express(); // urls beneath /internal are protected var internalAuth = auth.basic( { realm: "Knotenformular - Intern" }, function (username, password, callback) { callback( config.server.internal.active && username === config.server.internal.user && password === config.server.internal.password ); } ); app.use('/internal', auth.connect(internalAuth)); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); var adminDir = __dirname + '/../admin'; var clientDir = __dirname + '/../client'; var templateDir = __dirname + '/templates'; var jsTemplateFiles = [ '/config.js' ]; app.use(compress()); function serveTemplate(mimeType, req, res, next) { return fs.readFile(templateDir + '/' + req.path, 'utf8', function (err, body) { if (err) { return next(err); } res.writeHead(200, {'Content-Type': mimeType}); res.end(_.template(body)( { config: config.client })); return null; // to suppress warning }); } app.use(function (req, res, next) { if (jsTemplateFiles.indexOf(req.path) >= 0) { return serveTemplate('application/javascript', req, res, next); } return next(); }); app.use('/internal/admin', express.static(adminDir + '/')); app.use('/', express.static(clientDir + '/')); return app; });