AuthenticationManager.coffee 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. User = require("../../models/User").User
  2. {db, ObjectId} = require("../../infrastructure/mongojs")
  3. crypto = require 'crypto'
  4. bcrypt = require 'bcrypt'
  5. module.exports = AuthenticationManager =
  6. authenticate: (query, password, callback = (error, user) ->) ->
  7. # Using Mongoose for legacy reasons here. The returned User instance
  8. # gets serialized into the session and there may be subtle differences
  9. # between the user returned by Mongoose vs mongojs (such as default values)
  10. User.findOne query, (error, user) =>
  11. return callback(error) if error?
  12. if user?
  13. if user.hashedPassword?
  14. bcrypt.compare password, user.hashedPassword, (error, match) ->
  15. return callback(error) if error?
  16. if match
  17. callback null, user
  18. else
  19. callback null, null
  20. else
  21. callback null, null
  22. else
  23. callback null, null
  24. setUserPassword: (user_id, password, callback = (error) ->) ->
  25. bcrypt.genSalt 7, (error, salt) ->
  26. return callback(error) if error?
  27. bcrypt.hash password, salt, (error, hash) ->
  28. return callback(error) if error?
  29. db.users.update({
  30. _id: ObjectId(user_id.toString())
  31. }, {
  32. $set: hashedPassword: hash
  33. $unset: password: true
  34. }, callback)