consensus
Version:
vote for topics for your next meeting
62 lines (56 loc) • 1.28 kB
JavaScript
var
requester = require('request'),
Person = require('../lib/Person')
;
var PERSONA = 'https://verifier.login.persona.org:443/verify';
exports.signin = function(request, response)
{
var opts =
{
uri: PERSONA,
json:
{
assertion: request.body.assertion,
audience: request.headers.host
}
};
requester.post(opts, function(err, res, verified)
{
if (err)
{
request.app.logger.error(err, 'error calling persona verifier:', err.message);
return;
}
// verified should have fields: status, email, audience, expires, issuer
if (verified.status === 'okay')
{
response.app.controller.findOrCreatePerson(verified.email)
.then(function(person)
{
if (!person)
{
response.redirect('/');
return;
}
request.app.logger.info('login for ' + person.email + ' recorded');
request.session.set('user_id', person.email);
response.json({ page: '/' });
})
.fail(function(err)
{
response.app.logger.warn(err);
// set flash message
// redirect to index
}).done();
}
else
{
request.app.logger.error('persona verifier failed:', (verified.reason || verified.error));
}
});
};
exports.signout = function signout(request, response)
{
request.session.delAll();
response.redirect('/');
};