Advertisement
Guest User

Untitled

a guest
May 24th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.04 KB | None | 0 0
  1. var mongoose = require('mongoose');
  2. var bcrypt = require('bcryptjs');
  3.  
  4. var UserSchema = new mongoose.Schema({
  5. username: {
  6. type: String,
  7. unique: true,
  8. required: true,
  9. trim: true
  10. },
  11. password: {
  12. type: String,
  13. required: true,
  14. },
  15. email: {
  16. type: String,
  17. unique: true,
  18. required: true,
  19. trim: true
  20. },
  21. isOnline: {
  22. type: Boolean,
  23. default: false
  24. },
  25. emailVerified: {
  26. type: Boolean,
  27. default: false
  28. },
  29. emailToken: String,
  30. missedCalls: [String],
  31. friendList: [String],
  32. friendSend: [String],
  33. friendWait: [String]
  34. });
  35.  
  36.  
  37. UserSchema.pre('save', function (next) {
  38. var user = this;
  39. bcrypt.hash(user.password, 10, function (err, hash) {
  40. if (err) {
  41. return next(err);
  42. }
  43. user.password = hash;
  44. next();
  45. })
  46. });
  47.  
  48. UserSchema.statics.authenticate = function (username, password, callback) {
  49. User.findOne({ username: username })
  50. .exec(function (err, user) {
  51. if (err) {
  52. return callback(err)
  53. } else if (!user) {
  54. var err = new Error('Użytkownik nie znaleziony.');
  55. err.status = 401;
  56. return callback(err);
  57. }
  58. bcrypt.compare(password, user.password, function (err, result) {
  59. if (result === true) {
  60. if(!user.emailVerified)
  61. {
  62. return callback(err);
  63. }
  64. else {
  65. var query = {username: user.username};
  66. var newValue = {$set: {isOnline: true}};
  67. User.updateOne(query, newValue, function (err, res) {
  68. if (err) callback(err);
  69. });
  70. return callback(null, user);
  71. }
  72. } else {
  73. return callback();
  74. }
  75. })
  76. });
  77. };
  78. UserSchema.statics.setOffline = function (userid, callback) {
  79. User.findOne({ _id: userid })
  80. .exec(function (err, user){
  81. if(err)
  82. return callback(err);
  83. var query = {username: user.username};
  84. var newValue = {$set: {isOnline: false}};
  85. User.updateOne(query, newValue, function (err, res) {
  86. if (err) return callback(err);
  87. });
  88. return callback();
  89. });
  90. };
  91. UserSchema.statics.verifyEmail = function (emailToken, callback) {
  92. User.findOne({emailToken: emailToken})
  93. .exec(function (err, user) {
  94. if(err)
  95. return callback(err);
  96. else if (!user) {
  97. var err = new Error('Uzytkownik nie jest zarejestrowany');
  98. err.status = 401;
  99. return callback(err);
  100. }
  101. var query = {username: user.username};
  102. var newValue = {$set: {emailVerified: true}};
  103. User.updateOne(query, newValue, function (err, res) {
  104. if (err) return callback(err);
  105. });
  106. return callback();
  107. });
  108. };
  109.  
  110. UserSchema.statics.returnUserName = function(userid, callback){
  111. User.findOne({_id : userid})
  112. .exec(function(err,user) {
  113. if(err)
  114. return callback(err);
  115. else if (!user)
  116. return callback(err);
  117. else
  118. return callback(null, user.username);
  119. });
  120. };
  121. UserSchema.statics.returnUser = function(username, callback){
  122. User.findOne({username : username})
  123. .exec(function(err,user){
  124. if(err)
  125. return callback(err);
  126. else if (!user)
  127. return callback(err);
  128. else
  129. return callback(null,user);
  130. });
  131. };
  132. UserSchema.statics.inviteNewFriend = function(userid, friendname, callback){
  133. User.findOne({_id: userid})
  134. .exec(function(err,user){
  135. if(err)
  136. return callback(err);
  137. else if (!user)
  138. {
  139. var err = new Error('Użytkownik nie znaleziony.');
  140. err.status = 401;
  141. return callback(err);
  142. }
  143. else
  144. {
  145. //add to waiting list <logged user> <friendSend>, wait for reponse from friend
  146. var list = user.friendSend;
  147. var listFriend = [];
  148. User.returnUser(friendname,function(err,user1){
  149. if(err || !user1)
  150. return callback(err);
  151. else
  152. {
  153. if(user._id.toString() != user1._id.toString()) {
  154. if (list.indexOf(user1._id.toString()) < 0 & user.friendList.indexOf(user1._id.toString()) < 0 & user.friendWait.indexOf(user1._id.toString()) < 0) {
  155. list.push(user1._id);
  156. listFriend = user1.friendWait;
  157. var queryfriend = {username: user.username};
  158. var newValuefriend = {$set: {friendSend: list}};
  159. User.updateOne(queryfriend, newValuefriend, function (err, res) {
  160. if (err) return callback(err);
  161. });
  162. listFriend.push(user._id)
  163. var query = {username: friendname};
  164. var newValue = {$set: {friendWait: listFriend}};
  165. User.updateOne(query, newValue, function (err, res) {
  166. if (err) return callback(err);
  167. });
  168. }
  169. }
  170. }
  171. });
  172. return callback(null,user);
  173. }
  174. });
  175. };
  176.  
  177. UserSchema.statics.getFriendsList = function (userid, callback) {
  178. var friends = [];
  179. User.findOne({_id: userid}).exec(function (err, user) {
  180. if(err) return callback(err);
  181. else {
  182. var friendsIds = user.friendList;
  183. for(var i = 0; i < friendsIds.length; i++){
  184. if(friendsIds[i] != null) {
  185. User.returnUserName(friendsIds[i], function (error, name) {
  186. if (error) {
  187. var err = new Error('Użytkownik nie jest zalogowany.');
  188. err.status = 401;
  189. return next(err);
  190. }
  191. else {
  192. friends.push(name);
  193. console.log(friends)
  194. }
  195. })
  196. }
  197. }
  198. console.log(friends + "outside loop");
  199. return callback(friends);
  200. }
  201.  
  202. })
  203.  
  204. }
  205.  
  206. var User = mongoose.model('User', UserSchema);
  207. module.exports = User;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement