Guest User

Untitled

a guest
Feb 13th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. const mongoose = require("mongoose");
  2. const bcrypt = require("bcryptjs");
  3. const jwt = require("jsonwebtoken");
  4.  
  5. const { sendVerifyMail } = require("./../helpers/nodemailerHelper");
  6. const { hashSalt } = require("./../helpers/bcryptHelper");
  7.  
  8. module.exports = (mongoose) => {
  9. const userSchema = new mongoose.Schema({
  10. email: {
  11. lowercase: true,
  12. required: true,
  13. type: String,
  14. uniuqe: true
  15. },
  16. password: {
  17. required: true,
  18. type: String
  19. },
  20. username: {
  21. required: true,
  22. type: String,
  23. unique: true
  24. },
  25. verified: {
  26. default: false,
  27. type: Boolean
  28. }
  29. });
  30.  
  31. userSchema.pre("save", function (next) {
  32. this.password = hashSalt(this.password);
  33. next();
  34. });
  35.  
  36.  
  37. userSchema.statics.init = (username, email, password) => {
  38. return new Promise((resolve, reject) => {
  39. User.find().or([{ username }, { email }]).then(async(users) => {
  40. if (users.length) return reject(new Error("Username or email is already in use"));
  41.  
  42. const newUser = await new User({
  43. username, email, password
  44. }).save();
  45.  
  46. resolve(newUser);
  47. });
  48. });
  49. };
  50.  
  51. userSchema.statics.authenticate = (username, password) => {
  52. return new Promise(async(resolve, reject) => {
  53. const existingUser = await User.findOne({
  54. username
  55. });
  56.  
  57. if (!existingUser) {
  58. return reject(new Error("User not found"));
  59. }
  60.  
  61. const res = bcrypt.compareSync(password, existingUser.password);
  62.  
  63. if (res) resolve(existingUser);
  64. else reject(new Error("Wrong password"));
  65. });
  66. };
  67.  
  68. userSchema.statics.verify = (token) => {
  69. return new Promise((resolve, reject) => {
  70. jwt.verify(token, process.env.SECRET, async(err, decoded) => {
  71. if (err) return reject(err);
  72.  
  73. const { uid } = decoded;
  74.  
  75. const { verified } = await User.findById(uid);
  76. if (verified) return reject(new Error("User is already verified"));
  77.  
  78. const updatedUser = await User.findByIdAndUpdate(uid, {
  79. isVerified: true
  80. });
  81.  
  82. resolve(updatedUser);
  83. });
  84. })
  85. };
  86.  
  87. const User = mongoose.model("User", userSchema);
  88. };
Add Comment
Please, Sign In to add comment