mirror of
https://github.com/Foltik/Shimapan
synced 2025-02-26 08:56:19 -05:00
Clean up and parallelize auth code
This commit is contained in:
parent
53bf056bc5
commit
fac4dfe5f6
@ -10,74 +10,75 @@ var Invite = require('../models/Invite.js');
|
|||||||
|
|
||||||
var passport = require('passport');
|
var passport = require('passport');
|
||||||
|
|
||||||
function validUsername(username, callback) {
|
function checkUsername(username, callback) {
|
||||||
User.find({username: username}).limit(1).count(function(err, count) {
|
User.find({username: username}).limit(1).count(function(err, count) {
|
||||||
if (err) return callback(err);
|
if (err) return callback(err);
|
||||||
count === 0 ? callback(null, true) : callback(null, false);
|
count === 0 ? callback(null, true) : callback(null, false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function useInvite(code, user, callback) {
|
function checkInvite(code, callback) {
|
||||||
Invite.findOne({code: code}, function(err, invite) {
|
Invite.findOne({code: code}, function(err, invite) {
|
||||||
if (err) return callback(err);
|
if (err) return callback(err);
|
||||||
if (!invite || invite.used) {
|
if (!invite || invite.used || invite.exp < new Date())
|
||||||
return callback(null, false, null);
|
callback(null, false);
|
||||||
} else {
|
else
|
||||||
Invite.updateOne({code: code}, {recipient: user, used: Date.now()}, function(err, res) {
|
|
||||||
if (err) throw err;
|
|
||||||
});
|
|
||||||
callback(null, true, invite);
|
callback(null, true, invite);
|
||||||
}
|
});
|
||||||
})
|
}
|
||||||
|
|
||||||
|
function useInvite(code, username) {
|
||||||
|
Invite.updateOne({code: code}, {recipient: username, used: new Date()}, function(err, res) {
|
||||||
|
if (err) throw err;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
router.post('/register', function(req, res) {
|
router.post('/register', function(req, res) {
|
||||||
// Check the username
|
// Validate the parameters
|
||||||
validUsername(req.body.username, function(err, valid) {
|
async.parallel({
|
||||||
if (!valid) {
|
username: function(callback) {
|
||||||
res.status(401).json({'message': 'Username in use.'});
|
checkUsername(function(err, valid) {
|
||||||
return;
|
callback(err, valid);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
invite: function(callback) {
|
||||||
|
checkInvite(function(err, valid, invite) {
|
||||||
|
callback(err, {valid: valid, invite: invite});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
}, function(err, res) {
|
||||||
// Check and use the invite
|
if (!res.username) {
|
||||||
useInvite(req.body.invite, req.body.username, function(err, valid, invite) {
|
res.status(401).json({'message': 'Username in use.'});
|
||||||
if (!valid) {
|
} else if (!res.invite.valid) {
|
||||||
res.status(401).json({'message': 'Invalid invite code.'});
|
res.status(401).json({'message': 'Invalid invite code.'});
|
||||||
return;
|
} else {
|
||||||
}
|
useInvite(req.body.invite);
|
||||||
|
|
||||||
var user = new User();
|
var user = new User();
|
||||||
user.username = req.body.username;
|
user.username = req.body.username;
|
||||||
user.scope = invite.scope;
|
user.scope = res.invite.scope;
|
||||||
user.date = Date.now();
|
user.date = new Date();
|
||||||
user.setPassword(req.body.password);
|
user.setPassword(req.body.password);
|
||||||
|
|
||||||
user.save(function(err) {
|
user.save(function(err) {
|
||||||
if (err) {
|
if (err)
|
||||||
res.status(500).json({'message': 'Internal server error'});
|
res.status(500).json({'message': 'Internal server error.'});
|
||||||
} else {
|
else
|
||||||
var token = user.genJwt();
|
res.status(200).json({'token': user.genJwt()});
|
||||||
res.status(200).json({'token': token});
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
})
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
router.post('/login', function(req, res) {
|
router.post('/login', function(req, res) {
|
||||||
passport.authenticate('local', function(err, user, info) {
|
passport.authenticate('local', function(err, user, info) {
|
||||||
if (err) {
|
if (err)
|
||||||
res.status(404).json(err);
|
res.status(500).json(err);
|
||||||
return;
|
else if (user)
|
||||||
}
|
res.status(200).json({'token': user.genJwt() });
|
||||||
|
else
|
||||||
var token;
|
|
||||||
if (user) {
|
|
||||||
token = user.genJwt();
|
|
||||||
res.status(200).json({'token': token });
|
|
||||||
} else {
|
|
||||||
res.status(401).json(info);
|
res.status(401).json(info);
|
||||||
}
|
|
||||||
})(req, res);
|
})(req, res);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"angular-messages": "^1.6.6",
|
"angular-messages": "^1.6.6",
|
||||||
"angular-ui-router": "^0.4.3",
|
"angular-ui-router": "^0.4.3",
|
||||||
|
"async": "^2.5.0",
|
||||||
"body-parser": "^1.18.2",
|
"body-parser": "^1.18.2",
|
||||||
"express": "latest",
|
"express": "latest",
|
||||||
"express-jwt": "^5.3.0",
|
"express-jwt": "^5.3.0",
|
||||||
|
Loading…
Reference in New Issue
Block a user