flexbiz-server
Version:
Flexible Server
14 lines (13 loc) • 6.45 kB
JavaScript
const User=global.getModel("user"),Usergroup=global.getModel("usergroup"),Customer=global.getModel("customer"),Token=global.getModel("token"),App=global.getModel("app"),Participant=global.getModel("participant"),request=require("request");
module.exports=function($app$$){function $getProfile$$($token$$,$callback$$){request({url:$token$$.access_token?"https://www.googleapis.com/userinfo/v2/me":"https://oauth2.googleapis.com/tokeninfo?id_token="+$token$$.id_token,headers:{Authorization:$token$$.access_token?`Bearer ${$token$$.access_token}`:null}},($e_profileUser$$,$res$$,$body$$)=>{if($e_profileUser$$)return $callback$$($e_profileUser$$);$e_profileUser$$=JSON.parse($body$$);if($e_profileUser$$.error)return $callback$$($e_profileUser$$.error);
$e_profileUser$$.emails&&$e_profileUser$$.emails.length>0&&!$e_profileUser$$.email&&($e_profileUser$$.email=$e_profileUser$$.emails[0].value);$e_profileUser$$.emails||($e_profileUser$$.emails=[{value:$e_profileUser$$.email||$e_profileUser$$.id}]);$e_profileUser$$.displayName||($e_profileUser$$.displayName=$e_profileUser$$.name);$callback$$(null,$e_profileUser$$)})}function $addUserToCompany$$($body$$,$newUser$$){$body$$.id_app&&App.findById($body$$.id_app,async($e$$,$app$$)=>{if($e$$||!$app$$)return Logger.info("Can't find app",
$body$$.id_app,$e$$);$e$$=$body$$.group_id;if(!$e$$)try{$e$$=await Usergroup.getInfo($body$$.id_app,{status:!0,is_customer_group:!0},"_id")}catch($e$$){Logger.info($e$$.message)}Participant.createParticipant({id_app:$body$$.id_app,email:$newUser$$.email,group_id:$e$$,active:!0},$cust_e$$=>{$cust_e$$&&Logger.info("can't add user",$newUser$$.email,"to company",$app$$.name);$cust_e$$={ten_kh:$newUser$$.name,email:$newUser$$.email,id_app:$body$$.id_app,user_created:$newUser$$.email,user_updated:$newUser$$.email,
kh_yn:!0,of_user:$newUser$$.email};try{Customer.asyncCreateCustomer($cust_e$$)}catch($e$$){Logger.info("Auto create new customer with error:",$e$$.message)}})})}async function $checkExistUser$$($email$$){return new Promise(($resolve$$,$reject$$)=>{User.findOne({email:$email$$.toLowerCase()}).lean().then($rs$$=>{$rs$$?$resolve$$($rs$$):$resolve$$(null)}).catch($e$$=>{$reject$$(Error($e$$.message))})})}async function $createUser$$($accessToken$$,$profile$$,$done$$){setImmediate(async()=>{let $u$$=await $checkExistUser$$($profile$$.emails[0].value);
if($u$$){if($u$$.google&&$u$$.google.id===$profile$$.id||$u$$.email===$profile$$.email){$addUserToCompany$$($profile$$,$u$$);(new Token({email:$u$$.email,token:$accessToken$$,service:"google"})).save(function($e$$){if($e$$)return Logger.info("error create token",$e$$),$done$$($e$$);$done$$(null,$u$$)});return}Logger.error(`${$profile$$.email} \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd tr\u00ean h\u1ec7 th\u1ed1ng`,$u$$);return $done$$(`${$profile$$.email} \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd tr\u00ean h\u1ec7 th\u1ed1ng`)}User.findOne({"google.id":$profile$$.id||
$profile$$.email},async function($error$$,$user$$){if($error$$)return $done$$($error$$);if($user$$){if($user$$.status==0)return $done$$("T\u00e0i kho\u1ea3n n\u00e0y kh\u00f4ng c\u00f2n hi\u1ec7u l\u1ef1c");Logger.info("update user....");$user$$.google.name=$profile$$.displayName;$profile$$._json&&($user$$.google.picture=$profile$$._json.image.url);$user$$.token=$accessToken$$;$user$$.name=$profile$$.displayName;$user$$.join_date||($user$$.join_date=new Date);$user$$.server="google";$user$$.local||
($user$$.picture=$user$$.google.picture,$user$$.local={email:$user$$.email,name:$user$$.name,picture:$user$$.picture});$user$$.picture||($user$$.picture=$user$$.google.picture);$user$$.save(function($err$jscomp$1_token$$,$user$$){if($err$jscomp$1_token$$)return Logger.info("error update user",$err$jscomp$1_token$$),$done$$($err$jscomp$1_token$$);$err$jscomp$1_token$$=new Token({email:$user$$.email,token:$accessToken$$,service:"google"});$addUserToCompany$$($profile$$,$user$$);$err$jscomp$1_token$$.save(function($e$$){return $e$$?
(Logger.info("error create token",$e$$),$done$$($e$$)):$done$$(null,$user$$)})})}else Logger.info("create new user...",$profile$$.email),$user$$=new User,$user$$.current_user=$profile$$.emails[0].value,$user$$.google.id=$profile$$.id,$user$$.google.email=$profile$$.emails[0].value,$user$$.google.name=$profile$$.displayName,$profile$$._json&&($user$$.google.picture=$profile$$._json.image.url),$user$$.token=$accessToken$$,$user$$.email=$profile$$.emails[0].value,$user$$.name=$profile$$.displayName,
$user$$.picture=$user$$.google.picture,$user$$.join_date=new Date,$user$$.server="google",$user$$.local={email:$user$$.email,name:$user$$.name,picture:$user$$.picture},$user$$.save(function($err$$,$user$$){if($err$$)return Logger.info("error create new user",$err$$),$done$$($err$$);$addUserToCompany$$($profile$$,$user$$);(new Token({email:$user$$.email,token:$accessToken$$,service:"google"})).save(function($e$$){return $e$$?(Logger.info("error create token",$e$$),$done$$($e$$)):$done$$(null,$user$$)})})})})}
$app$$.get("/profile/google",($idToken_req$$,$res$$)=>{let $access_token$$=$idToken_req$$.query.access_token;$idToken_req$$=$idToken_req$$.query.id_token;if(!$access_token$$&&!$idToken_req$$)return $res$$.status(400).send("this API require access_token or id_token parameter");$getProfile$$({id_token:$idToken_req$$,access_token:$access_token$$},($e$$,$profileUser$$)=>{if($e$$)return $res$$.status(400).send($e$$);User.findOne({"google.id":$profileUser$$.id.toString()},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);
$profileUser$$.registed=$rs$$?!0:!1;$res$$.send($profileUser$$)})})});$app$$.get("/createuser/google",($req$$,$res$$)=>{let $access_token$$=$req$$.query.access_token,$idToken$$=$req$$.query.id_token;if(!$access_token$$&&!$idToken$$)return $res$$.status(400).send("this API require access_token or id_token parameter");$getProfile$$({id_token:$idToken$$,access_token:$access_token$$},($e$$,$profileUser$$)=>{if($e$$)return $res$$.status(400).send($e$$);$profileUser$$.id_app=$req$$.query.id_app;$profileUser$$.group_id=
$req$$.query.group_id;$profileUser$$.email||($profileUser$$.email=$req$$.query.email||$profileUser$$.id);$profileUser$$.password=$req$$.query.password;let $token$$=$access_token$$||$idToken$$;$createUser$$($token$$,$profileUser$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$rs$$.toObject&&($rs$$=$rs$$.toObject());$rs$$.access_token=$token$$;$res$$.send($rs$$)})})})};