Skip to content

Commit

Permalink
Assingment 4 closes outmoded#118
Browse files Browse the repository at this point in the history
  • Loading branch information
AdriVanHoudt committed Apr 20, 2015
1 parent 6f87743 commit bf2a2c2
Show file tree
Hide file tree
Showing 7 changed files with 164 additions and 6 deletions.
3 changes: 2 additions & 1 deletion lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

var Hapi = require('hapi');
var Version = require('./version');
var Private = require('./private');


// Declare internals
Expand All @@ -14,7 +15,7 @@ exports.init = function (port, next) {
var server = new Hapi.Server();
server.connection({ port: port });

server.register(Version, function (err) {
server.register([Version, Private], function (err) {

if (err) {
return next(err);
Expand Down
49 changes: 49 additions & 0 deletions lib/private.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Load modules

var Basic = require('hapi-auth-basic');
var Users = require('./users.json');

// Declare internals

var internals = {};

internals.validateFunc = function (username, password, callback) {

var user = Users[username];
if (!user || user.password !== password) {
return callback(null, false);
}

return callback(null, true, user);
};

exports.register = function (server, options, next) {

server.register(Basic, function (err) {

if (err) {
return next(err);
}

server.auth.strategy('simple', 'basic', { validateFunc: internals.validateFunc });
server.route({
method: 'GET',
path: '/private',
config: {
auth: 'simple',
description: 'Returns a greeting message to the authenticated user',
handler: function (request, reply) {

var html = '<div>Hello ' + request.auth.credentials.username + '</div>';
return reply(html);
}
}
});

return next();
});
};

exports.register.attributes = {
name: 'Private'
};
10 changes: 10 additions & 0 deletions lib/users.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"Foo": {
"username": "Foo",
"password": "mysupersecuredpassword"
},
"Bar": {
"username": "Bar",
"password": "mysupersecuredpassword2"
}
}
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@
"homepage": "https://github.com/hueniverse/hueniversity",
"dependencies": {
"hapi": "8.x.x",
"hapi-auth-basic": "2.x.x",
"hoek": "2.x.x"
},
"scripts": {
"test": "node node_modules/lab/bin/lab -a code -t 100 -L",
"test": "node node_modules/lab/bin/lab -a code -t 100 -Lv",
"start": "node lib/start.js"
},
"devDependencies": {
Expand Down
3 changes: 1 addition & 2 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ var Version = require('../lib/version');
// Test shortcuts

var lab = exports.lab = Lab.script();
var describe = lab.experiment;
var expect = Code.expect;
var it = lab.test;

Expand Down Expand Up @@ -50,7 +49,7 @@ it('handles register plugin errors', { parallel: false }, function (done) {
name: 'fake version'
};

Hueniversity.init(0, function (err, server) {
Hueniversity.init(0, function (err) {

expect(err).to.exist();
expect(err.message).to.equal('register version failed');
Expand Down
98 changes: 98 additions & 0 deletions test/private.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
// Load modules

var Code = require('code');
var Lab = require('lab');
var Hueniversity = require('../lib');
var Users = require('../lib/users.json');
var Basic = require('hapi-auth-basic');

// Declare internals

var internals = {};


// Test shortcuts

var lab = exports.lab = Lab.script();
var describe = lab.experiment;
var expect = Code.expect;
var it = lab.test;


describe('/private', function () {

it('returns a greeting for the authenticated user', function (done) {

Hueniversity.init(0, function (err, server) {

expect(err).to.not.exist();

var request = { method: 'GET', url: '/private', headers: { authorization: internals.header(Users.Foo.username, Users.Foo.password) } };
server.inject(request, function (res) {

expect(res.statusCode, 'Status code').to.equal(200);
expect(res.result, 'result').to.equal('<div>Hello Foo</div>');

server.stop(done);
});
});
});

it('returns error on wrong password', function (done) {

Hueniversity.init(0, function (err, server) {

expect(err).to.not.exist();

var request = { method: 'GET', url: '/private', headers: { authorization: internals.header(Users.Foo.username, '') } };
server.inject(request, function (res) {

expect(res.statusCode, 'Status code').to.equal(401);

server.stop(done);
});
});
});

it('returns error on failed auth', function (done) {

Hueniversity.init(0, function (err, server) {

expect(err).to.not.exist();

var request = { method: 'GET', url: '/private', headers: { authorization: internals.header('I do not exist', '') } };
server.inject(request, function (res) {

expect(res.statusCode, 'Status code').to.equal(401);

server.stop(done);
});
});
});

it('returns error on failed registering of auth', { parallel: false }, function (done) {

var orig = Basic.register;
Basic.register = function (plugin, options, next) {

return next(new Error('fail'));
};
Basic.register.attributes = {
name: 'fake hapi-auth-basic'
};

Hueniversity.init(0, function (err) {

Basic.register = orig;

expect(err).to.exist();

done();
});
});
});

internals.header = function (username, password) {

return 'Basic ' + (new Buffer(username + ':' + password, 'utf8')).toString('base64');
};
4 changes: 2 additions & 2 deletions test/version.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
var Code = require('code');
var Lab = require('lab');
var Pkg = require('../package.json');
var Server = require('../lib');
var Hueniversity = require('../lib');


// Test shortcuts
Expand All @@ -18,7 +18,7 @@ describe('/version', function () {

it('returns the version from package.json', function (done) {

Server.init(0, function (err, server) {
Hueniversity.init(0, function (err, server) {

expect(err).to.not.exist();

Expand Down

0 comments on commit bf2a2c2

Please sign in to comment.