Skip to content

Commit

Permalink
Added 'urlPefix' config option
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisn committed Dec 19, 2014
1 parent 82838d7 commit 940998e
Show file tree
Hide file tree
Showing 25 changed files with 122 additions and 135 deletions.
3 changes: 3 additions & 0 deletions config.dist.js
Expand Up @@ -51,6 +51,9 @@ module.exports = {
]
},

// URL path prefix, e.g., '/myapp'
urlPrefix: '',

// The end-user verification URI on the authorization server. The URI should
// be short and easy to remember as end-users will be asked to manually type
// it into their user-agent.
Expand Down
3 changes: 3 additions & 0 deletions config.test.js
Expand Up @@ -32,6 +32,9 @@ module.exports = {

enableCORS: true,

// URL path prefix, e.g., '/myapp'
urlPrefix: '/ap',

// The end-user verification URI on the authorization server. The URI should
// be short and easy to remember as end-users will be asked to manually type
// it into their user-agent.
Expand Down
34 changes: 22 additions & 12 deletions lib/app.js
Expand Up @@ -2,6 +2,8 @@

// Module dependencies
var express = require('express');
require('express-namespace');

var passport = require('passport');
var path = require('path');

Expand Down Expand Up @@ -61,19 +63,27 @@ app.use(appHelper.templateVariables);
app.use(require('./response-helper')(logger));

// Routes

var urlPrefix = config.urlPrefix || '';

app.use(urlPrefix, express.static(path.join(__dirname, '..', 'public')));

app.use(require('./url-prefix')(urlPrefix));

app.use(app.router);
app.use(express.static(path.join(__dirname, '..', 'public')));

require('../routes/access-token')(app);
require('../routes/association')(app);
require('../routes/authorization')(app);
require('../routes/authorize')(app);
require('../routes/index')(app);
require('../routes/registration')(app);
require('../routes/status')(app);
require('../routes/verification')(app);
require('../routes/auth/index')(app);
require('../routes/user/index')(app);

app.namespace(urlPrefix, function() {
require('../routes/access-token')(app);
require('../routes/association')(app);
require('../routes/authorization')(app);
require('../routes/authorize')(app);
require('../routes/index')(app);
require('../routes/registration')(app);
require('../routes/status')(app);
require('../routes/verification')(app);
require('../routes/auth/index')(app);
require('../routes/user/index')(app);
});

if (app.get('env') !== 'test') {
app.use(express.errorHandler());
Expand Down
4 changes: 3 additions & 1 deletion lib/auth-helper.js
@@ -1,5 +1,6 @@
"use strict";

var requestHelper = require('./request-helper');
var authHelper = {};

authHelper.ensureAuthenticated = function(req, res, next) {
Expand All @@ -14,7 +15,8 @@ authHelper.authenticateFirst = function(req, res, next) {
return next();
}
req.session.auth_origin = req.originalUrl;
res.redirect('/auth');

requestHelper.redirect(res, '/auth');
};

authHelper.getAuthenticatedUser = function(req) {
Expand Down
8 changes: 8 additions & 0 deletions lib/request-helper.js
@@ -1,5 +1,7 @@
"use strict";

var config = require('../config');

module.exports = {

/**
Expand All @@ -11,5 +13,11 @@ module.exports = {
var actualContentType = req.get('Content-Type');

return actualContentType && actualContentType.indexOf(contentType) !== -1;
},

redirect: function(res, path) {
var urlPrefix = config.urlPrefix || '';
path = urlPrefix + path;
return res.redirect(path);
}
};
5 changes: 3 additions & 2 deletions package.json
Expand Up @@ -8,7 +8,7 @@
"test": "NODE_ENV=test mocha --bail --timeout 10000 --reporter dot --require test/test-helper test/lib"
},
"dependencies": {
"express": "3.4.6",
"express": "~3.4.8",
"jade": "~0.35.0",
"passport": "~0.1.17",
"passport-facebook": "~1.0.2",
Expand All @@ -24,7 +24,8 @@
"node-uuid": "~1.4.1",
"connect-sqlite3": "~0.9.2",
"yargs": "~1.3.1",
"cors": "~2.4.1"
"cors": "~2.4.1",
"express-namespace": "~0.1.1"
},
"devDependencies": {
"supertest": "~0.8.2",
Expand Down
12 changes: 5 additions & 7 deletions routes/auth/facebook.js
@@ -1,12 +1,12 @@
"use strict";

var db = require('../../models');
var config = require('../../config');
var db = require('../../models');
var config = require('../../config');
var requestHelper = require('../../lib/request-helper');

var passport = require('passport');
var passport = require('passport');
var FacebookStrategy = require('passport-facebook').Strategy;


passport.use(new FacebookStrategy({
clientID: config.identity_providers.facebook.client_id,
clientSecret: config.identity_providers.facebook.client_secret,
Expand All @@ -23,8 +23,6 @@ passport.use(new FacebookStrategy({
}
));



module.exports = function(app, options) {
app.get('/auth/facebook', passport.authenticate('facebook'));

Expand All @@ -39,6 +37,6 @@ module.exports = function(app, options) {
return res.redirect(redirectUri);
}

res.redirect('/');
requestHelper.redirect(res, '/');
});
};
12 changes: 5 additions & 7 deletions routes/auth/github.js
@@ -1,12 +1,12 @@
"use strict";

var db = require('../../models');
var config = require('../../config');
var db = require('../../models');
var config = require('../../config');
var requestHelper = require('../../lib/request-helper');

var passport = require('passport');
var passport = require('passport');
var GithubStrategy = require('passport-github').Strategy;


passport.use(new GithubStrategy({
clientID: config.identity_providers.github.client_id,
clientSecret: config.identity_providers.github.client_secret,
Expand All @@ -21,9 +21,7 @@ passport.use(new GithubStrategy({
}
));


module.exports = function(app, options) {

app.get('/auth/github',
passport.authenticate('github'));

Expand All @@ -38,6 +36,6 @@ module.exports = function(app, options) {
return res.redirect(redirectUri);
}

res.redirect('/');
requestHelper.redirect(res, '/');
});
};
11 changes: 6 additions & 5 deletions routes/auth/index.js
@@ -1,15 +1,16 @@
"use strict";

var db = require('../../models');
var config = require('../../config');
var authHelper = require('../../lib/auth-helper');
var db = require('../../models');
var config = require('../../config');
var authHelper = require('../../lib/auth-helper');
var requestHelper = require('../../lib/request-helper');

module.exports = function(app) {
var logger = app.get('logger');

app.get('/logout', function(req, res) {
req.logout();
res.redirect('/');
requestHelper.redirect(res, '/');
});

app.get('/protected', authHelper.ensureAuthenticated, function(req, res) {
Expand All @@ -23,7 +24,7 @@ module.exports = function(app) {
for (var idp in config.identity_providers) {
if (config.identity_providers[idp].enabled) {
logger.info(idp + ' authentication enabled');
require('./'+idp)(app);
require('./' + idp)(app);
}
}
};
7 changes: 4 additions & 3 deletions routes/auth/local.js
@@ -1,7 +1,8 @@
"use strict";

var db = require('../../models');
var config = require('../../config');
var db = require('../../models');
var config = require('../../config');
var requestHelper = require('../../lib/request-helper');

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
Expand Down Expand Up @@ -31,6 +32,6 @@ module.exports = function(app, options) {
return res.redirect(redirectUri);
}

res.redirect('/');
requestHelper.redirect(res, '/');
});
};
7 changes: 4 additions & 3 deletions routes/index.js
@@ -1,6 +1,7 @@
"use strict";

var db = require('../models');
var db = require('../models');
var requestHelper = require('../lib/request-helper');

/*
* GET home page.
Expand All @@ -9,10 +10,10 @@ var db = require('../models');
module.exports = function(app) {
app.get('/', function(req, res) {
if (req.isAuthenticated()) {
res.redirect('/verify');
requestHelper.redirect(res, '/verify');
}
else {
res.redirect('/auth');
requestHelper.redirect(res, '/auth');
}
});
};
13 changes: 2 additions & 11 deletions test/lib/auth.js
Expand Up @@ -28,7 +28,7 @@ describe('GET /auth', function() {
requestHelper.sendRequest(this, '/auth', { parseDOM: true }, done);
});

context('When requesting the list of identity provider', function() {
context('When requesting the list of identity providers', function() {
it('should return a status 200', function() {
expect(this.res.statusCode).to.equal(200);
});
Expand Down Expand Up @@ -73,16 +73,7 @@ describe('GET /protected', function() {

context('When the user is authenticated', function() {
before(function(done) {
var self = this;

request
.post('/login')
.type('form')
.send({ username: 'testuser', password: 'testpassword' })
.end(function(err, res) {
self.cookie = res.headers['set-cookie'];
done(err);
});
requestHelper.login(this, done);
});

before(function(done) {
Expand Down
17 changes: 5 additions & 12 deletions test/lib/home.js
Expand Up @@ -24,26 +24,18 @@ describe('GET /', function() {

context('with a signed in user', function() {
before(function(done) {
var self = this;

request
.post('/login')
.type('form')
.send({ username: 'testuser', password: 'testpassword' })
.end(function(err, res) {
self.cookie = res.headers['set-cookie'];
done(err);
});
requestHelper.login(this, done);
});

before(function(done) {
requestHelper.sendRequest(this, '/', { cookie: this.cookie }, done);
});

it('should redirect to /verify', function() {
var urlPrefix = requestHelper.urlPrefix;
expect(this.res.statusCode).to.equal(302);
expect(this.res.headers).to.have.property('location');
expect(this.res.headers.location).to.equal('/verify');
expect(this.res.headers.location).to.equal(urlPrefix + '/verify');
});
});

Expand All @@ -53,9 +45,10 @@ describe('GET /', function() {
});

it('should redirect to /auth', function() {
var urlPrefix = requestHelper.urlPrefix;
expect(this.res.statusCode).to.equal(302);
expect(this.res.headers).to.have.property('location');
expect(this.res.headers.location).to.equal('/auth');
expect(this.res.headers.location).to.equal(urlPrefix + '/auth');
});
});
});
9 changes: 7 additions & 2 deletions test/lib/setup.js
Expand Up @@ -2,12 +2,17 @@

var db = require('../../models');

var requestHelper = require('../request-helper');
var config = require('../../config');

/**
* Global test setup, run before any individual tests are run. This
* creates the schema in the in-memory SQLite database.
* Global test setup, run before any individual tests are run. This creates the
* schema in the in-memory SQLite database and sets the URL path prefix.
*/

before(function(done) {
requestHelper.urlPrefix = config.urlPrefix;

db.sequelize.sync({ force: true }).complete(function(err) {
done(err);
});
Expand Down
22 changes: 2 additions & 20 deletions test/lib/user-mode-confirmation.js
Expand Up @@ -121,16 +121,7 @@ describe('GET /verify', function() {
context('When requesting the form to validate a domain', function() {
context('and the user is authenticated', function() {
before(function(done) {
var self = this;

request
.post('/login')
.type('form')
.send({ username: 'testuser', password: 'testpassword' })
.end(function(err, res) {
self.cookie = res.headers['set-cookie'];
done(err);
});
requestHelper.login(this, done);
});

before(function(done) {
Expand Down Expand Up @@ -172,16 +163,7 @@ describe('POST /verify', function() {
context('When validating a domain', function() {
context('and the user is authenticated', function() {
before(function(done) {
var self = this;

request
.post('/login')
.type('form')
.send({ username: 'testuser', password: 'testpassword' })
.end(function(err, res) {
self.cookie = res.headers['set-cookie'];
done(err);
});
requestHelper.login(this, done);
});

context('and the user allows the domain', function() {
Expand Down

0 comments on commit 940998e

Please sign in to comment.