kpiplus
Version:
KPI+
1 lines • 6.31 kB
JavaScript
var User=require("../models/user"),log=require("../models/log"),App=require("../models/app"),Token=require("../models/tokens"),BasicStrategy=require("passport-http").BasicStrategy,underscore=require("underscore"),crypto=require("crypto"),validator=require("validator"),email=require("../libs/email"),loadTemplate=require("../libs/load-template"),stp=require("stp-utils");module.exports=function(e,n){n.use(new BasicStrategy(function(e,n,a){if(!e)return a("Bạn chưa nhập tài khoản");e=(e=e.trim()).toLowerCase(),process.nextTick(function(){!function(e,n){if(!e)return n(null,null);User.findOne({email:e},function(e,a){return e||!a?n(null,null):a.local?n(null,a):n(null,null)})}(e,function(t,i){if(t)return a(t);if(!i)return a("Email "+e+" chưa được đăng ký.");if(i.local.rspassword){if(i.validRspassword(n))i.local.password=i.local.rspassword,i.local.rspassword=void 0;else if(!i.validPassword(n))return a("Mật khẩu không chính xác.")}else{if(!i.local.password)return a("Mật khẩu cho người dùng này không tồn tại. Hãy sử dụng tính năng khôi phục mật khẩu để đặt lại mật khẩu cho người dùng này");if(!i.validPassword(n))return a("Mật khẩu không chính xác.")}var r=new Date,s=crypto.createHash("md5").update(i.local.password+i.email+r.toISOString()).digest("hex");i.local.token=s,i.picture=i.local.picture,i.name=i.local.name,i.server="local",i.save(function(n){if(n)return a(n);new Token({email:e,token:s}).save(function(e,n){return e?a(e):a(null,i)})})})})})),e.get("/auth/local",function(e,n,a){var t=e.connection.remoteAddress.split(".").join("").split(":").join(""),i=e.headers.authorization;if(i){if((i=(i=new Buffer(i.replace("Basic ",""),"base64").toString()).split(":")).length>1){var r="times_login_"+t+"_"+i[0].toLowerCase(),s="datetime_login_"+t+"_"+i[0].toLowerCase(),l=new Date,o=l,u=1;if(e.headers.cookie){var c=e.session;c[r]?(u=c[r]+1,c[r]=u):(c[r]=u,c[s]=l),c[s]?o=new Date(c[s]):c[s]=l;var d=l.getTime()-o.getTime();if(d<18e6&&u>10)return n.status(400).send("Bạn đăng nhập sai 10 lần liên tiếp. Hãy thử lại sau "+Math.round((18e6-d)/6e4,0)+" phút");a()}else clientRedis.get(r,function(e,t){t?(u=Number(t)+1,clientRedis.set(r,u)):(clientRedis.set(r,u),clientRedis.set(s,l)),clientRedis.get(s,function(e,t){t?o=new Date(t):clientRedis.set(s,l);var i=l.getTime()-o.getTime();if(i<18e6&&u>10)return n.status(400).send("Bạn đăng nhập sai 10 lần liên tiếp. Hãy thử lại sau "+Math.round((18e6-i)/6e4,0)+" phút");a()})})}}else a()},n.authenticate("basic",{session:!1}),function(e,n){var a="times_login_"+e.connection.remoteAddress.split(".").join("").split(":").join("")+"_"+e.user.email.toLowerCase();e.headers.cookie?e.session[a]=0:clientRedis.set(a,0);log.create({id_app:"LOGIN",id_func:"LOGIN",action:"LOCALLOGIN"},e.user.email,e.header("user-agent"),e);var t=e.user;n.send(t.local.token)}),e.get("/check-user/:email",function(e,n,a){var t=e.params.email;User.findOne({email:t},{email:1,name:1,picture:1}).lean().exec(function(e,a){if(e)return n.status(400).send(e);n.send(a)})}),e.post("/signup",function(e,n,a){var t=e.body;return t.json&&(t=stp.parse(t.json)),t?t.email?(t.email=t.email.toLowerCase(),t.name?void User.findOne({email:t.email},function(i,r){if(i)return n.status(400).send(i);if(r){if(r.local&&r.local.email==t.email)return n.status(400).send("Lỗi: Email "+t.email+" đã được đăng ký");r.local||(r.local={})}else(r=new User).email=t.email,r.local={};var s;r.local.email=t.email,r.local.name=t.name,r.partner=t.partner,t.picture?r.local.picture=t.picture:r.local.picture||(r.local.picture="/images/avatar.jpg"),s=t.password&&t.password.length>=6&&t.rePassword==t.password?t.password:crypto.createHash("md5").update(r.email+(new Date).toISOString()).digest("hex"),r.local.password=r.generateHash(s),r.save(function(i,l){if(i)return a("Lỗi: Không thể đăng ký");if(log.create({id_app:"SIGNUP",id_func:"SIGNUP",action:"SIGNUP"},r.email,e.header("user-agent"),e),console.log("new user",l),t.cty_name){var o=new App;o.user_created=r.email,o.user_updated=r.email,o.name=t.cty_name;var u=new Date;o.ngay_dn=new Date(u.getFullYear(),0,1),o.ngay_ks=new Date(u.getFullYear()-1,12,0),o.nam_bd=u.getFullYear(),o.ngay_ky1=new Date(u.getFullYear(),0,1);var c=new Date;c.setMonth(c.getMonth()+3),o.expire_date=new Date(c),o.participants&&o.participants.forEach(function(e){e.user_created=r.email}),o.save(function(e,n){if(e)return console.log("Khong tao duoc new app: "+e);require("../libs/initDatabase").init(n._id,function(e){e&&console.log("Can't init database \n"+e)})})}validator.isEmail(t.email)?(loadTemplate("thong tin dang nhap.html",{email:r.email,password:s,receiver_name:t.name},function(e,n){if(e)return console.log(e);email.sendHtml({to:{name:r.name,address:r.email},subject:"Thông tin tài khoản",html:n},function(e,n){e&&console.error("Khong the gui email thon tin tai khoan cho nguoi dung\n"+e)})}),n.send("Tài khoản của bạn đã được tạo. Kiểm tra email để lấy thông tin đăng nhập")):n.send("Tài khoản "+t.email+" đã được tạo")})}):n.status(400).send("Lỗi: Họ và tên chưa nhập")):n.status(400).send("Lỗi: Email chưa nhập"):n.status(400).send("Không có nội dung")}),e.get("/resetpassword",function(e,n,a){var t=e.query.email;if(!t)return n.send("Yêu cầu một email");t=t.toLowerCase(),User.findOne({$or:[{"local.email":t},{email:t},{email2:t}]},function(a,i){if(a)return n.send(400,a);if(!i)return n.send(400,"Email này chưa được đăng ký");var r=crypto.createHash("md5").update((new Date).toISOString()).digest("hex");i.local.rspassword=i.generateHash(r),i.save(function(a){if(a)return n.send(400,a);log.create({id_app:"RESETPASSWORD",id_func:"RESETPASSWORD",action:"RESETPASSWORD"},i.email,e.header("user-agent"),e),loadTemplate("reset mat khau.html",{receiver_name:i.name,email:i.email,password:r},function(e,n){if(e)return console.log(e);email.sendHtml({to:{name:i.name,address:t},subject:"Đổi mật khẩu",html:n},function(e,n){e&&console.error("Khong the gui thong tin tai khoan cho nguoi su dung\n"+e)})}),n.send("Mật khẩu của bạn đã được đổi thành công. Kiểm tra email để lấy mật khẩu mới, sau đó bạn nên đổi mật khẩu này")})})})};