Skip to content

Commit

Permalink
Protect auth calls. Closes #1513
Browse files Browse the repository at this point in the history
  • Loading branch information
Eran Hammer committed Mar 24, 2014
1 parent e6950eb commit f694a36
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 14 deletions.
48 changes: 34 additions & 14 deletions lib/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -171,22 +171,27 @@ internals.Auth.prototype._authenticate = function (request, next) {
var strategy = config.strategies[strategyPos];
++strategyPos;

// Generate reply interface
request._protect.run(validate, function (enter, exit) {

var savedResults = undefined;
var transfer = function (err) {
var savedResults = undefined;
var transfer = function (err) {

validate(strategy, err, savedResults);
};
exit(strategy, err, savedResults);
};

var root = function (err, result) {
var root = function (err, result) {

savedResults = result;
return (err ? reply._root(err) : validate(strategy, err, result));
};
savedResults = result;
return (err ? reply._root(err) : exit(strategy, err, result));
};

var reply = Handler.replyInterface(request, transfer, root);

enter(function () {

var reply = Handler.replyInterface(request, transfer, root);
return self._strategies[strategy].authenticate(request, reply);
self._strategies[strategy].authenticate.call(null, request, reply);
});
});
};

var validate = function (strategy, err, result) {
Expand Down Expand Up @@ -315,14 +320,23 @@ internals.Auth.payload = function (request, next) {
return next();
}

var strategy = auth._strategies[request.auth.strategy];
strategy.payload(request, function (err) {
var finalize = function (err) {

if (err === false) {
return next(config.payload === 'optional' ? null : Boom.unauthorized('Missing payload authentication'));
}

return next(err);
};

var strategy = auth._strategies[request.auth.strategy];

request._protect.run(finalize, function (enter, exit) {

enter(function () {

strategy.payload.call(null, request, exit);
});
});
};

Expand All @@ -345,5 +359,11 @@ internals.Auth.response = function (request, next) {
return next();
}

strategy.response(request, next);
request._protect.run(next, function (enter, exit) {

enter(function () {

strategy.response.call(null, request, exit);
});
});
};
14 changes: 14 additions & 0 deletions test/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,20 @@ describe('Auth', function () {
done();
});
});

it('fails when options default to null', function (done) {

var server = new Hapi.Server({ debug: false });
server.auth.scheme('custom', internals.implementation);
server.auth.strategy('default', 'custom', true);
server.route({ method: 'GET', path: '/', handler: function (request, reply) { reply(request.auth.credentials.user); } });

server.inject({ url: '/', headers: { authorization: 'Custom steve' } }, function (res) {

expect(res.statusCode).to.equal(500);
done();
});
});
});


Expand Down

0 comments on commit f694a36

Please sign in to comment.