Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var mongoose = require('mongoose');
- var bcrypt = require('bcryptjs');
- var UserSchema = new mongoose.Schema({
- username: {
- type: String,
- unique: true,
- required: true,
- trim: true
- },
- password: {
- type: String,
- required: true,
- },
- email: {
- type: String,
- unique: true,
- required: true,
- trim: true
- },
- isOnline: {
- type: Boolean,
- default: false
- },
- emailVerified: {
- type: Boolean,
- default: false
- },
- emailToken: String,
- missedCalls: [String],
- friendList: [String],
- friendSend: [String],
- friendWait: [String]
- });
- UserSchema.pre('save', function (next) {
- var user = this;
- bcrypt.hash(user.password, 10, function (err, hash) {
- if (err) {
- return next(err);
- }
- user.password = hash;
- next();
- })
- });
- UserSchema.statics.authenticate = function (username, password, callback) {
- User.findOne({ username: username })
- .exec(function (err, user) {
- if (err) {
- return callback(err)
- } else if (!user) {
- var err = new Error('Użytkownik nie znaleziony.');
- err.status = 401;
- return callback(err);
- }
- bcrypt.compare(password, user.password, function (err, result) {
- if (result === true) {
- if(!user.emailVerified)
- {
- return callback(err);
- }
- else {
- var query = {username: user.username};
- var newValue = {$set: {isOnline: true}};
- User.updateOne(query, newValue, function (err, res) {
- if (err) callback(err);
- });
- return callback(null, user);
- }
- } else {
- return callback();
- }
- })
- });
- };
- UserSchema.statics.setOffline = function (userid, callback) {
- User.findOne({ _id: userid })
- .exec(function (err, user){
- if(err)
- return callback(err);
- var query = {username: user.username};
- var newValue = {$set: {isOnline: false}};
- User.updateOne(query, newValue, function (err, res) {
- if (err) return callback(err);
- });
- return callback();
- });
- };
- UserSchema.statics.verifyEmail = function (emailToken, callback) {
- User.findOne({emailToken: emailToken})
- .exec(function (err, user) {
- if(err)
- return callback(err);
- else if (!user) {
- var err = new Error('Uzytkownik nie jest zarejestrowany');
- err.status = 401;
- return callback(err);
- }
- var query = {username: user.username};
- var newValue = {$set: {emailVerified: true}};
- User.updateOne(query, newValue, function (err, res) {
- if (err) return callback(err);
- });
- return callback();
- });
- };
- UserSchema.statics.returnUserName = function(userid, callback){
- User.findOne({_id : userid})
- .exec(function(err,user) {
- if(err)
- return callback(err);
- else if (!user)
- return callback(err);
- else
- return callback(null, user.username);
- });
- };
- UserSchema.statics.returnUser = function(username, callback){
- User.findOne({username : username})
- .exec(function(err,user){
- if(err)
- return callback(err);
- else if (!user)
- return callback(err);
- else
- return callback(null,user);
- });
- };
- UserSchema.statics.inviteNewFriend = function(userid, friendname, callback){
- User.findOne({_id: userid})
- .exec(function(err,user){
- if(err)
- return callback(err);
- else if (!user)
- {
- var err = new Error('Użytkownik nie znaleziony.');
- err.status = 401;
- return callback(err);
- }
- else
- {
- //add to waiting list <logged user> <friendSend>, wait for reponse from friend
- var list = user.friendSend;
- var listFriend = [];
- User.returnUser(friendname,function(err,user1){
- if(err || !user1)
- return callback(err);
- else
- {
- if(user._id.toString() != user1._id.toString()) {
- if (list.indexOf(user1._id.toString()) < 0 & user.friendList.indexOf(user1._id.toString()) < 0 & user.friendWait.indexOf(user1._id.toString()) < 0) {
- list.push(user1._id);
- listFriend = user1.friendWait;
- var queryfriend = {username: user.username};
- var newValuefriend = {$set: {friendSend: list}};
- User.updateOne(queryfriend, newValuefriend, function (err, res) {
- if (err) return callback(err);
- });
- listFriend.push(user._id)
- var query = {username: friendname};
- var newValue = {$set: {friendWait: listFriend}};
- User.updateOne(query, newValue, function (err, res) {
- if (err) return callback(err);
- });
- }
- }
- }
- });
- return callback(null,user);
- }
- });
- };
- UserSchema.statics.getFriendsList = function (userid, callback) {
- var friends = [];
- User.findOne({_id: userid}).exec(function (err, user) {
- if(err) return callback(err);
- else {
- var friendsIds = user.friendList;
- for(var i = 0; i < friendsIds.length; i++){
- if(friendsIds[i] != null) {
- User.returnUserName(friendsIds[i], function (error, name) {
- if (error) {
- var err = new Error('Użytkownik nie jest zalogowany.');
- err.status = 401;
- return next(err);
- }
- else {
- friends.push(name);
- console.log(friends)
- }
- })
- }
- }
- console.log(friends + "outside loop");
- return callback(friends);
- }
- })
- }
- var User = mongoose.model('User', UserSchema);
- module.exports = User;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement