UNPKG

kpiplus

Version:

KPI+

1 lines 3.15 kB
"use strict";var crypto=require("crypto"),async=require("async"),Endpoint=require("./endpoint"),Payload=require("./payload"),webPush=require("web-push"),Tokens=require("./tokens");webPush.setGCMAPIKey(GCM_API_KEY);var userSchema=new Schema({local:{email:{type:String,lowercase:!0},password:String,rspassword:String,name:String,picture:String,address:String,phone:String,company:String,token:String,exfields:Schema.Types.Mixed,active:{type:Boolean,default:!1},key:String},google:{id:String,token:String,email:{type:String,lowercase:!0},name:String,refreshToken:String,picture:String},facebook:{id:String,token:String,email:{type:String,lowercase:!0},name:String,refreshToken:String,picture:String},current_id_app:String,current_user:String,email:{type:String,lowercase:!0},email2:{type:String,lowercase:!0},name:String,picture:String,token:String,tokens:[String],refreshToken:String,server:String,partner:String,join_date:{type:Date,default:Date.now},exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});userSchema.index({name:-1}),userSchema.index({email:-1}),userSchema.index({date_created:-1}),userSchema.methods.generateHash=function(e){return crypto.createHash("sha256").update(e+":STP").digest("hex")},userSchema.methods.validPassword=function(e){if(crypto.createHash("md5").update(e).digest("hex")==this.local.password){let e="Chúng tôi đã nâng cấp thuật toán mã hóa mật khẩu để bảo vệ mật khẩu của bạn tốt hơn. Bạn hãy thay đổi mật khẩu để sử dụng thuật toán mới này";return createNotification("SYSTEM",this.email,"Yêu cầu thay đổi mật khẩu",e,(e,t)=>{e&&console.log(e)},null,!0),!0}return this.generateHash(e)==this.local.password},userSchema.methods.validRspassword=function(e){return this.generateHash(e)==this.local.rspassword};var User=mongoose.model("user",userSchema);User.emitEvent=function(e,t,n,i,r){if((e=e.toLowerCase()).indexOf("guest@")>=0){let i=e;if((clientIO[i]&&socketIO||wsClients[i])&&(clientIO[i]&&socketIO&&clientIO[i].forEach(function(e){socketIO.to(e).emit(t,n)}),wsClients[i]&&(!r||r!==i))){let e={event:t,data:n};wsClients[i].send(JSON.stringify(e))}}else Tokens.find({email:e},{token:1}).lean().exec(function(e,i){i&&async.map(i,function(e,i){let s=e.token;if(clientIO[s]&&socketIO||wsClients[s]){if(clientIO[s]&&socketIO&&clientIO[s].forEach(function(e){socketIO.to(e).emit(t,n)}),wsClients[s]&&(!r||r!==s)){let e={event:t,data:n};try{wsClients[s].send(JSON.stringify(e))}catch(e){console.log(e)}}}else i()},function(e,t){e&&console.log("error send message:"+e)})});!n.title&&!n.body||!i&&void 0!==i||Endpoint.find({user:e}).lean().exec(function(t,i){i&&i.forEach(function(t){let i={},r=new Buffer(t.endpoint).toString("base64");new Payload({ep_id:r,endpoint:t.endpoint,user:e,payload:JSON.stringify(n)}).save(function(e,n){if(e)return console.log(e);webPush.sendNotification(t.endpoint,i).then(function(){},function(e){console.log("error push message")})})})})},module.exports=User;