UNPKG

userauthjs

Version:

Node module for management of user/group privileges and sessions

165 lines (157 loc) 5.26 kB
var bcrypt = require('bcrypt') var User = require('./models/user') var Usergroup = require('./models/usergroup') var Privilege = require('./models/privilege') exports.add = function(username, password, email, next) { User.findOne({ username: username }, function (err, existingUser) { if (err) { return next(err) } if (existingUser) { return next(null, false) } var user = new User({ username: username, email: email }) Usergroup.findOne({ groupname: 'user' }, function (err, usergroup) { if (err) { return next(err) } if (!usergroup) { return next(null, false) } user.usergroups = [ usergroup._id ] bcrypt.hash(password, 10, function (err, hash) { if (err) { return next(err) } if (!hash) { return next(null, false) } user.password = hash user.save(function (err, user) { if (err) { return next(err) } if (!user) { return next(null, false) } if (process.env.USERAUTH_LOG) { console.log('User added: ' + user.username) } next(null, user) }) }) }) }) } exports.remove = function(username, password, next) { User.findOne({ username: username }) .select('password') .exec(function(err, user) { if (err) { return next(err) } if (!user) { return next(null, false) } if (!user.password || !password) { return next(null,false) } bcrypt.compare(password, user.password, function(err, valid) { if (err) { return next(err) } if (!valid) { return next(null, false) } user.remove(function(err, user) { if (err) { return next(err) } if (!user) { return next(null, false) } if (process.env.USERAUTH_LOG) { console.log('User removed: ' + user.username) } next(null, user) }) }) }) } exports.rename = function(username, newusername, next) { User.findOne({ username: username }, function(err, user) { if (err) { return next(err) } if (!user) { return next(null, false) } User.findOne({username:newusername}, function(err, anotheruser) { if (err) { return next(err) } if (anotheruser) { return next(null, false) } else { user.username = newusername user.save(function(err, user) { if (err) { return next(err) } if (!user) { return next(null, false) } if (process.env.USERAUTH_LOG) { console.log('User renamed: from \'' + username + '\' to \'' + newusername + '\'') } next(null, user) }) } }) }) } /** * Change user password */ exports.changePassword = function(username, password, newpassword, next) { User.findOne({ username: username }) .select('password') .exec(function(err, user) { if (err) { return next(err) } if (!user || user === undefined) { return next(null, false) } bcrypt.compare(password, user.password, function(err, valid) { if (err) { return next(err) } if (!valid) { return next(null, false) } bcrypt.hash(newpassword, 10, function (err, hash) { if (err) { return next(err) } user.password = hash user.save(function (err, user) { if (err) { return next(err) } if (!user) { return next(null, false) } if (process.env.USERAUTH_LOG) { console.log('User added: ' + user.username) } next(null, user) }) }) }) }) } /** * Change user email address. * This function should only get called from within an active session. */ exports.changeEmail = function(username, password, newemail, next) { User.findOne({ username: username }) .select('password') .exec(function(err, user) { if (err) { return next(err) } if (!user || user === undefined) { return next(null, false) } bcrypt.compare(password, user.password, function(err, valid) { if (err) { return next(err) } if (!valid) { return next(null, false) } if (!newemail) {return next(null, false) } user.email = newemail user.save(function (err, user) { if (err) { return next(err) } if (!user) { return next(null, false) } User.findById(user._id) .select('email') .exec(function(err, user) { if (err) { return next(err) } if (!user) { return next(null, false) } if (process.env.USERAUTH_LOG) { console.log('User added: ' + user.username) } next(null, user) }) }) }) }) } /** * Reset user password by entering username or email */ exports.resetPassword = function(usernameOrEmail, next) { User.findOne( { $or:[{ username: usernameOrEmail }, { email: usernameOrEmail }] }, function(err, user) { if (err) { return next(err) } if (!user) { return next(null, false) } var userinfo = {} userinfo.username = user.username userinfo.email = user.email var password = generatePassword(10) bcrypt.hash(password, 10, function (err, hash) { if (err) { return next(err) } if (!hash) { return next(null, false) } user.password = hash user.save(function(err, user) { if (err) { return next(err) } if (!user) { return next(null, false) } userinfo.password = password if (process.env.USERAUTH_LOG) { console.log('Password reset for user: ' + user.username) } return next(null, userinfo) }) }) }) } var generatePassword = function(passwordLength) { var _sym = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVQXYZ1234567890' var password = '' for (var i=0; i < passwordLength; i++) { password += _sym[parseInt(Math.random() * (_sym.length))] } return password }