var express = require("express"); var passport = require("passport"), passportLocal = require("passport-local"); var fs = require("fs"); var path = require("path"); var proxy = require("./simple-http-proxy"); var _ = require("underscore"); function assertSetting(name, settings, validate) { if ( typeof settings[name] === 'undefined' ) { throw new Error("Required setting '"+name+"' undefined."); } if ( _.isFunction(validate) && !validate(settings[name]) ) { throw new Error("Setting '"+name+"' with value '"+settings[name]+"' is invalid."); } } exports.App = function(settings) { assertSetting("couchDbURL", settings, _.isString); function clientPath(relativePath) { return path.resolve(__dirname+'/../client/'+relativePath); } passport.use(new passportLocal.Strategy(function(username, password, done){ if ( username === "igor" && password === "mayer" ) { done(null,{ username: "igor" }); } else { done(null,false,{ message: 'Invalid credentials.' }); } })); var app = express(); app.use(express.logger()); app.use(express.compress()); app.use(express.favicon()); app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.session({ secret: "quasi experimental design" })); // initialize passport app.use(passport.initialize()); app.use(passport.session()); // static resources app.get('/', function(request, response){ response.sendfile(clientPath('index.html')); }); app.get('/*.html', function(request, response) { response.sendfile(clientPath(request.path)); }); _.each(['/dojo', '/dijit', '/dojox', '/qed', '/qed-client'], function(dir){ app.use(dir, express.static(clientPath(dir))); }); // url to login (might work on others as well?) // you should then have a session to work with app.post('/api/login'); // forward to couch app.use('/data/couch', proxy(settings.couchDbURL)); return app; };