kpiplus
Version:
KPI+
1 lines • 2.19 kB
JavaScript
var User=require("../models/user"),log=require("../models/log"),Token=require("../models/tokens"),googleconfig=require("../configs").google,GoogleStrategy=require("passport-google-oauth").OAuth2Strategy,underscore=require("underscore");module.exports=function(e,o){o.serializeUser(function(e,o){o(null,e.id)}),o.deserializeUser(function(e,o){User.findById(e,function(e,l){o(e,l)})}),o.use(new GoogleStrategy({clientID:googleconfig.clientID,clientSecret:googleconfig.clientSecret,callbackURL:googleconfig.callbackURL},function(e,o,l,n){process.nextTick(function(){User.findOne({email:l.emails[0].value},function(i,r){if(i)return n(i);r?(r.google.token=e,r.google.refreshToken=o,r.google.name=l.displayName,r.google.picture=l._json.image.url,r.token=e,r.name=l.displayName,r.refreshToken=o,r.join_date||(r.join_date=new Date),r.server="google",r.local||(r.picture=r.google.picture,r.local={email:r.email,name:r.name,picture:r.picture}),r.picture||(r.picture=r.google.picture),r.save(function(o,l){if(o)return n(o);new Token({email:l.email,token:e}).save(function(e){return e?n(e):n(null,l)})})):((r=new User).current_user=l.emails[0].value,r.google.id=l.id,r.google.token=e,r.google.email=l.emails[0].value,r.google.name=l.displayName,r.google.refreshToken=o,r.google.picture=l._json.image.url,r.token=e,r.email=l.emails[0].value,r.name=l.displayName,r.refreshToken=o,r.picture=r.google.picture,r.join_date=new Date,r.server="google",r.local={email:r.email,name:r.name,picture:r.picture},r.save(function(o,l){if(o)return n(o);new Token({email:l.email,token:e}).save(function(e){return e?n(e):n(null,l)})}))})})})),e.get("/auth/google",o.authenticate("google",{scope:googleconfig.scope,accessType:"offline",approvalPrompt:"force"})),e.get("/auth/google/callback",o.authenticate("google",{failureRedirect:"/auth/google"}),function(e,o){log.create({id_app:"LOGIN",id_func:"LOGIN",action:"GOOGLELOGIN"},e.user.email,e.header("user-agent"),e);var l={access_token:e.user.google.token,refresh_token:e.user.google.refreshToken,email:e.user.email},n=JSON.stringify(l);o.writeHead(200,{"Content-Type":"text/html"}),o.end("<html><head><title>"+n+"</title></head><body>access_token = "+n+"</body></html>")})};