source: Dev/trunk/src/server/app.js @ 463

Last change on this file since 463 was 463, checked in by hendrikvanantwerpen, 12 years ago

Working towards Heroku deployment, restructuring for that and to allow coffee builds.

File size: 2.1 KB
RevLine 
[451]1var express = require("express");
[463]2var passport = require("passport"),
3    passportLocal = require("passport-local");
[451]4var fs = require("fs");
5var path = require("path");
6var proxy = require("simple-http-proxy");
7var _ = require("underscore");
[443]8
[463]9function assertSetting(name, settings, validate) {
10    if ( typeof settings[name] === 'undefined' ) {
11        throw new Error("Required setting '"+name+"' undefined.");
12    }
13    if ( _.isFunction(validate) && !validate(settings[name]) ) {
14        throw new Error("Setting '"+name+"' with value '"+settings[name]+"' is invalid.");
15    }
[451]16}
[443]17
[463]18exports.App = function(settings) {
[451]19
[463]20    assertSetting("couchDbURL", settings, _.isString);
21   
22    function clientPath(relativePath) {
23        return path.resolve(__dirname+'/../client/'+relativePath);
24    }
[451]25
[463]26    passport.use(new passportLocal.Strategy(function(username, password, done){
27        if ( username === "igor" && password === "mayer" ) {
28            done(null,{ username: "igor" });
29        } else {
30            done(null,false,{ message: 'Invalid credentials.' });
31        }
32    }));
[451]33
[463]34    var app = express();
35    app.use(express.logger());
36    app.use(express.compress());
37    app.use(express.favicon());
38
39    app.use(express.cookieParser());
40    app.use(express.bodyParser());
41    app.use(express.session({ secret: "quasi experimental design" }));
42
43    // initialize passport
44    app.use(passport.initialize());
45    app.use(passport.session());
46
47    // static resources
48    app.get('/', function(request, response){
49        response.sendfile(clientPath('index.html'));
50    });
51    app.get('/*.html', function(request, response) {
52        response.sendfile(clientPath(request.path));
53    });
54    _.each(['/dojo', '/dijit', '/dojox', '/qed', '/qed-client'], function(dir){
55        app.use(dir, express.static(clientPath(dir)));
56    });
57
58    // url to login (might work on others as well?)
59    // you should then have a session to work with
60    app.post('/api/login', passport.authenticate('local'));
61
62    // forward to couch
63    app.use('/data/couch', passport.authenticate('local'), proxy(settings.couchDbURL));
64
65    return app;
66
67};
Note: See TracBrowser for help on using the repository browser.