Skip to content
This repository was archived by the owner on Apr 8, 2019. It is now read-only.

Commit

Permalink
Merge pull request #182 from apoorvakorde/myAssignment4
Browse files Browse the repository at this point in the history
[Assignment 4] Basic Authentication
  • Loading branch information
zoe-1 committed Feb 11, 2016
2 parents 8499de9 + 0dc85d0 commit ea3f2b7
Show file tree
Hide file tree
Showing 13 changed files with 238 additions and 74 deletions.
8 changes: 0 additions & 8 deletions .eslintrc

This file was deleted.

1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ config.json
*/._*
*/*/._*
coverage.*
.settings
6 changes: 3 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
language: node_js

node_js:
- 0.10
- 0.12
- iojs
- 4.0
- 4
- 5
8 changes: 0 additions & 8 deletions Makefile

This file was deleted.

16 changes: 9 additions & 7 deletions lib/index.js
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,26 +1,28 @@
'use strict';

// Load modules

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


// Declare internals

var internals = {};
const internals = {};


exports.init = function (port, next) {

var server = new Hapi.Server();
const server = new Hapi.Server();
server.connection({ port: port });

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

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

server.start(function (err) {
server.start((err) => {

return next(err, server);
});
Expand Down
57 changes: 57 additions & 0 deletions lib/private.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
'use strict';

// Load modules

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


// Declare internals

const internals = {};


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

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

user.username = username;

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


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

server.register(Basic, (err) => {

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

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

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

return next();
});
};


exports.register.attributes = {
name: 'Private'
};
11 changes: 6 additions & 5 deletions lib/start.js
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
'use strict';

// Load modules

var Hoek = require('hoek');
var Server = require('./index');
const Hoek = require('hoek');
const Server = require('./index');


// Declare internals

var internals = {};
const internals = {};


Server.init(8000, function (err, server) {
Server.init(8000, (err, server) => {

Hoek.assert(!err, err);
console.log('Server started at: ' + server.info.uri);
});

8 changes: 8 additions & 0 deletions lib/users.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"foo": {
"password": "foo"
},
"bar": {
"password": "bar"
}
}
8 changes: 5 additions & 3 deletions lib/version.js
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
'use strict';

// Load modules

var Pkg = require('../package.json');
const Package = require('../package.json');


// Declare internals

var internals = {
const internals = {
response: {
version: Pkg.version
version: Package.version
}
};

Expand Down
24 changes: 13 additions & 11 deletions package.json
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,32 +1,34 @@
{
"name": "hueniversity",
"version": "0.0.3",
"name": "hapi-university",
"version": "0.0.4",
"description": "Community learning experiment",
"main": "lib/index.js",
"repository": {
"type": "git",
"url": "https://github.com/hueniverse/hueniversity.git"
"url": "https://github.com/hapijs/university.git"
},
"keywords": [
"hapi",
"learn",
"community"
],
"license": "BSD",
"license": "BSD-3-Clause",
"bugs": {
"url": "https://github.com/hueniverse/hueniversity/issues"
"url": "https://github.com/hapijs/university/issues"
},
"homepage": "https://github.com/hueniverse/hueniversity",
"homepage": "https://github.com/hapijs/university",
"dependencies": {
"hapi": "8.x.x",
"hoek": "2.x.x"
"hapi": "12.x.x",
"hapi-auth-basic": "4.x.x",
"hoek": "3.x.x"
},
"scripts": {
"test": "node node_modules/lab/bin/lab -a code -t 100 -L",
"test": "lab -a code -t 100 -L -v",
"test-cov-html": "lab -a code -L -r html -o coverage.html",
"start": "node lib/start.js"
},
"devDependencies": {
"code": "1.x.x",
"lab": "5.x.x"
"code": "2.x.x",
"lab": "8.x.x"
}
}
34 changes: 18 additions & 16 deletions test/index.js
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
'use strict';

// Load modules

var Hapi = require('hapi');
var Code = require('code');
var Lab = require('lab');
var Hueniversity = require('../lib');
var Version = require('../lib/version');
const Hapi = require('hapi');
const Code = require('code');
const Lab = require('lab');
const University = require('../lib');
const Version = require('../lib/version');


// Test shortcuts

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


it('starts server and returns hapi server object', function (done) {
it('starts server and returns hapi server object', (done) => {

Hueniversity.init(0, function (err, server) {
University.init(0, (err, server) => {

expect(err).to.not.exist();
expect(server).to.be.instanceof(Hapi.Server);
Expand All @@ -26,9 +27,9 @@ it('starts server and returns hapi server object', function (done) {
});
});

it('starts server on provided port', function (done) {
it('starts server on provided port', (done) => {

Hueniversity.init(5000, function (err, server) {
University.init(5000, (err, server) => {

expect(err).to.not.exist();
expect(server.info.port).to.equal(5000);
Expand All @@ -37,9 +38,10 @@ it('starts server on provided port', function (done) {
});
});

it('handles register plugin errors', { parallel: false }, function (done) {
it('handles register plugin errors', { parallel: false }, (done) => {

const orig = Version.register;

var orig = Version.register;
Version.register = function (server, options, next) {

Version.register = orig;
Expand All @@ -50,7 +52,7 @@ it('handles register plugin errors', { parallel: false }, function (done) {
name: 'fake version'
};

Hueniversity.init(0, function (err, server) {
University.init(0, (err, server) => {

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

// Load modules

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


// Declare internals

const internals = {};


// Test shortcuts

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


describe('/private', () => {

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

University.init(0, (err, server) => {

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

const request = { method: 'GET', url: '/private', headers: { authorization: internals.header('foo', Users.foo.password) } };
server.inject(request, (res) => {

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

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

it('errors on wrong password', (done) => {

University.init(0, (err, server) => {

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

const request = { method: 'GET', url: '/private', headers: { authorization: internals.header('foo', '') } };
server.inject(request, (res) => {

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

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

it('errors on failed auth', (done) => {

University.init(0, (err, server) => {

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

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

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

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

it('errors on failed registering of auth', { parallel: false }, (done) => {

const orig = Basic.register;

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

Basic.register = orig;
return next(new Error('fail'));
};

Basic.register.attributes = {
name: 'fake hapi-auth-basic'
};

University.init(0, (err) => {

expect(err).to.exist();

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


internals.header = function (username, password) {

return 'Basic ' + (new Buffer(username + ':' + password, 'utf8')).toString('base64');
};
Loading

0 comments on commit ea3f2b7

Please sign in to comment.