flexbiz-server 12.0.17 → 12.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "flexbiz-server",
3
3
  "main": "./server/app.js",
4
4
  "description": "Flexible Server",
5
- "version": "12.0.17",
5
+ "version": "12.0.18",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
@@ -8,24 +8,25 @@ $username$$+" ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd.");if($user$$
8
8
  if(!$user$$.validPassword($password$$))return $done$$("M\u1eadt kh\u1ea9u kh\u00f4ng ch\u00ednh x\u00e1c.")}return $done$$(null,$user$$)})})}));$app$$.get("/send-otp/:phone",$rateLimiter$$,async($req_url$$,$res$$)=>{const $Phone$$=$req_url$$.params.phone.trim();if("9999"===$Phone$$)saveOTP($Phone$$,"9999",($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)});else{if(!await User.findOne({email:$Phone$$}))return $res$$.status(400).send({error:`T\u00e0i kho\u1ea3n ${$Phone$$} kh\u00f4ng t\u1ed3n t\u1ea1i`});
9
9
  var $otp_code$$=generateOTP();validator.isEmail($Phone$$)?email.sendHtml({to:{address:$Phone$$},subject:"M\u00e3 x\u00e1c th\u1ef1c",html:`Xin vui l\u00f2ng g\u1eedi qu\u00fd kh\u00e1ch m\u00e3 x\u00e1c th\u1ef1c: ${$otp_code$$}. M\u00e3 n\u00e0y s\u1ebd h\u1ebft h\u1ea1n s\u1eed d\u1ee5ng sau 5 ph\u00fat.`},function($error$$){$error$$?(console.error("Error send otp to email",$error$$),$res$$.status(400).send(`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi email ${$Phone$$}`)):
10
10
  saveOTP($Phone$$,$otp_code$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)},5)},configs.sender_otp):($req_url$$=configs.sms.genUrlSendOTP($Phone$$,$otp_code$$),request({url:$req_url$$},($error$$,$response$$,$body$$)=>{$error$$||200!=$response$$.statusCode?$res$$.status(400).send($error$$||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`):($error$$=JSON.parse($body$$),"100"==$error$$.CodeResult?saveOTP($Phone$$,$otp_code$$,
11
- ($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)}):(console.error("Error send sms",$error$$),$res$$.status(400).send(`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`)))}))}});$app$$.get("/verify-otp/:id/:otp",$rateLimiter$$,async function($req$$,$res$$){try{const $id$$=$req$$.params.id,$otp_code$$=$req$$.params.otp,$otp$$=await OTP.findById($id$$);if(!$otp$$||$otp$$.otp!=$otp_code$$||$otp$$.verified||$otp$$.expire_time.getTime()<
12
- (new Date).getTime())return $res$$.status(400).send({error:"M\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c \u0111\u00e3 h\u1ebft hi\u1ec7u l\u1ef1c",code:4001});await OTP.findOneAndUpdate({_id:$id$$},{verified:!0});let $is_new$$=!1;const $username$$=$otp$$.phone;let $user$$=await User.findOne({email:$username$$});if(!$user$$){$user$$=new User;$user$$.email=$username$$;$user$$.local={active:!0};$user$$.local.email=$otp$$.email;$user$$.local.phone=$otp$$.phone;$user$$.local.name=
13
- $otp$$.phone;$user$$.name=$otp$$.phone;$is_new$$=!0;try{await $user$$.save()}catch($e$$){return console.log("error verify otp, create user",$e$$),$res$$.status(500).send($e$$)}}else if(!$user$$.local||!$user$$.local.active){$user$$.local=$user$$.local||{};$user$$.local.active=!0;try{await $user$$.save()}catch($e$$){return console.log("error verify otp, create user",$e$$),$res$$.status(500).send($e$$)}}if($req$$.query.id_app&&$req$$.query.group_id){const $id_app$$=$req$$.query.id_app,$group_id$$=$req$$.query.group_id,
14
- $app$$=await App.findById($id_app$$);$app$$&&Participant.createParticipant({id_app:$id_app$$,email:$user$$.email,name:$user$$.name,group_id:$group_id$$,active:!0},$cust_e$$=>{if($cust_e$$)return console.log("can't add user",$user$$.email,"to company",$app$$.name);$cust_e$$={ten_kh:$user$$.name,email:$user$$.email,dien_thoai:$otp$$.phone,id_app:$id_app$$,user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email};try{Customer.asyncCreateCustomer($cust_e$$)}catch($e$$){console.log("Auto create new customer with error:",
15
- $e$$.message)}})}const $accessToken$$=generateToken($user$$),$agent$$=$req$$.headers["user-agent"];console.log("create new token for user",$user$$.email);(new Token({email:$user$$.email,token:$accessToken$$,agent:$agent$$,ip:"",once:1==$req$$.query.once||"true"==$req$$.query.once||"1"===$req$$.query.once?!0:!1})).save(function($e$$,$rs$$){return $e$$?$res$$.status(500).send($e$$):$res$$.send({token:$accessToken$$,is_new:$is_new$$,once:$rs$$.once})})}catch($e$$){console.log("error verify otp",$e$$),
16
- $res$$.status(400).send($e$$.message)}});$app$$.post("/auth/sign",$rateLimiter$$,($req$$,$res$$,$next$$)=>{$passport$$.authenticate("basic",{session:!1},function($err$$,$user$$){if($err$$||!$user$$)return $res$$.status(401).send({message:$err$$||"Unauthorized"});$req$$.user=$user$$;$next$$()})($req$$,$res$$,$next$$)},async($req$jscomp$3_user$$,$res$$)=>{let $data$$=$req$jscomp$3_user$$.body;$req$jscomp$3_user$$=$req$jscomp$3_user$$.user;if(!$data$$)return $res$$.status(400).send("Not have data to sign");
17
- if(!$data$$.id_app)return $res$$.status(400).send("Data miss id_app property");try{let $signature$$=await Wallet.sign($data$$.id_app,$req$jscomp$3_user$$.email,$data$$);$res$$.send($signature$$)}catch($e$$){return $res$$.status(400).send($e$$.message||$e$$)}});$app$$.get("/auth/local",$rateLimiter$$,function($req$$,$res$$,$next$$){let $ip$$=($req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress).split(".").join("").split(":").join(""),$authorization$$=$req$$.headers.authorization;
18
- if(!$authorization$$)return $res$$.status(400).send({message:"Authorization is required"});$authorization$$=Buffer.from($authorization$$.replace("Basic ",""),"base64").toString("utf-8");$authorization$$=$authorization$$.split(":");if(1<$authorization$$.length){var $t_session$$="times_login_"+$ip$$+"_"+$authorization$$[0].trim().toLowerCase(),$d_session$$="datetime_login_"+$ip$$+"_"+$authorization$$[0].trim().toLowerCase();$req$$.t_session=$t_session$$;$req$$.d_session=$d_session$$;var $now$$=new Date,
19
- $d$$=$now$$,$times_try$$=1;if($req$$.headers.cookie&&$req$$.session){$req$$=$req$$.session;$req$$[$t_session$$]?($times_try$$=$req$$[$t_session$$]+1,$req$$[$t_session$$]=$times_try$$):($req$$[$t_session$$]=$times_try$$,$req$$[$d_session$$]=$now$$);$req$$[$d_session$$]?$d$$=new Date($req$$[$d_session$$]):$req$$[$d_session$$]=$now$$;$req$$=$now$$.getTime()-$d$$.getTime();if(18E6>$req$$&&10<$times_try$$)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai 10 l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+
20
- Math.round((18E6-$req$$)/6E4,0)+" ph\u00fat"});$next$$()}else global.clientRedis.get($t_session$$,function($err$$,$reply$$){$reply$$?($times_try$$=Number($reply$$)+1,global.clientRedis.set($t_session$$,$times_try$$)):(global.clientRedis.set($t_session$$,$times_try$$),global.clientRedis.set($d_session$$,$now$$));global.clientRedis.get($d_session$$,function($err$jscomp$3_time_wait$$,$reply$$){$reply$$?$d$$=new Date($reply$$):global.clientRedis.set($d_session$$,$now$$);$err$jscomp$3_time_wait$$=$now$$.getTime()-
21
- $d$$.getTime();if(18E6>$err$jscomp$3_time_wait$$&&10<$times_try$$)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai 10 l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+Math.round((18E6-$err$jscomp$3_time_wait$$)/6E4,0)+" ph\u00fat"});$next$$()})})}},function($req$$,$res$$,$next$$){$passport$$.authenticate("basic",{session:!1},function($err$$,$user$$){if($err$$||!$user$$)return $res$$.status(401).send({message:$err$$||"Unauthorized"});if(configs.require_verify&&
22
- !$user$$.local.active)return $res$$.status(401).send({require_verify:!0});$req$$.user=$user$$;$next$$()})($req$$,$res$$,$next$$)},async($req$$,$res$$)=>{let $agent$$=$req$$.headers["user-agent"];if($req$$.headers.cookie){var $group_id$jscomp$1_session$$=$req$$.session;$group_id$jscomp$1_session$$[$req$$.t_session]=0;$group_id$jscomp$1_session$$[$req$$.d_session]=""}else global.clientRedis.set($req$$.t_session,0),global.clientRedis.set($req$$.d_session,"");log.create({id_app:"LOGIN",id_func:"LOGIN",
23
- action:"LOCALLOGIN"},$req$$.user.email,$req$$.header("user-agent"),$req$$);let $user$$=$req$$.user;if($req$$.query.id_app&&$req$$.query.group_id&&global.mongoose.Types.ObjectId.isValid($req$$.query.group_id)){const $id_app$$=$req$$.query.id_app;$group_id$jscomp$1_session$$=$req$$.query.group_id;const $app$$=await App.findById($id_app$$),$group$$=await UserGroup.findOne({_id:$group_id$jscomp$1_session$$,is_customer_group:!0});$app$$&&$group$$&&Participant.createParticipant({id_app:$id_app$$,email:$user$$.email,
24
- name:$user$$.name,group_id:$group_id$jscomp$1_session$$,active:!0},$cust$jscomp$1_e$$=>{if($cust$jscomp$1_e$$)return console.log("can't add user",$user$$.email,"to company",$app$$.name);$cust$jscomp$1_e$$={ten_kh:$user$$.name,email:$user$$.email,id_app:$id_app$$,user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email};validator.isMobilePhone($user$$.email,["vi-VN"])&&($cust$jscomp$1_e$$.dien_thoai=$user$$.email);try{Customer.asyncCreateCustomer($cust$jscomp$1_e$$)}catch($e$$){console.log("Auto create new customer with error:",
25
- $e$$.message)}})}const $accessToken$$=generateToken($user$$);(new Token({email:$user$$.email,token:$accessToken$$,agent:$agent$$,ip:"",once:1==$req$$.query.once||"true"==$req$$.query.once||"1"===$req$$.query.once?!0:!1})).save(function($e$$,$rs$$){if($e$$)return $res$$.status(500).send($e$$);$res$$.send({token:$accessToken$$,once:$rs$$.once})})});$app$$.get("/check-user/:email",$rateLimiter$$,function($req$$,$res$$){User.findOne({email:$req$$.params.email},{email:1,name:1,picture:1}).lean().exec(function($e$$,
26
- $user$$){if($e$$)return $res$$.status(400).send($e$$);$res$$.send($user$$)})});$app$$.post("/signup",$rateLimiter$$,async($req$$,$res$$)=>{var $body$$=$req$$.body;$body$$.json&&($body$$=JSON.parse($body$$.json));if(!$body$$)return $res$$.status(400).send("Kh\u00f4ng c\u00f3 n\u1ed9i dung");if(!$body$$.email)return $res$$.status(400).send("L\u1ed7i: B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");$body$$.email=$body$$.email.trim().toLowerCase();if(!$body$$.name)return $res$$.status(400).send("L\u1ed7i: H\u1ecd v\u00e0 t\u00ean ch\u01b0a nh\u1eadp");
27
- User.findOne({email:$body$$.email},function($error$jscomp$1$$,$result$$){if($error$jscomp$1$$)return $res$$.status(400).send($error$jscomp$1$$);if($result$$){if($result$$.local&&$result$$.local.email==$body$$.email)return $res$$.status(400).send("L\u1ed7i: T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd");$result$$.local||($result$$.local={})}else $result$$=new User,$result$$.email=$body$$.email,$result$$.local={};$result$$.local.email=$body$$.email;$result$$.local.name=
28
- $body$$.name;$result$$.partner=$body$$.partner;$result$$.name=$result$$.local.name;$body$$.picture?$result$$.local.picture=$body$$.picture:$result$$.local.picture||($result$$.local.picture="/images/avatar.jpg");let $password$$;if($body$$.password){if($body$$.rePassword!==$body$$.password)return $res$$.status(400).send("L\u1ed7i: M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c");if(!User.teststrengthPassword($body$$.password))return $res$$.status(400).send("L\u1ed7i: M\u1eadt kh\u1ea9u ph\u1ea3i c\u00f3 \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1 v\u00e0 bao g\u1ed3m \u00edt nh\u1ea5t m\u1ed9t ch\u1eef s\u1ed1, m\u1ed9t ch\u1eef hoa v\u00e0 m\u1ed9t ch\u1eef th\u01b0\u1eddng");
11
+ ($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)}):(console.error("Error send sms",$error$$),$res$$.status(400).send(`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`)))}))}});$app$$.get("/verify-otp/:id/:otp",$rateLimiter$$,async function($req$$,$res$$){try{const $id$$=$req$$.params.id;if(!global.mongoose.Types.ObjectId.isValid($id$$))return $res$$.status(400).send({error:"ID c\u1ee7a m\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i",
12
+ code:4001});const $otp_code$$=$req$$.params.otp,$otp$$=await OTP.findById($id$$);if(!$otp$$||$otp$$.otp!=$otp_code$$||$otp$$.verified||$otp$$.expire_time.getTime()<(new Date).getTime())return $res$$.status(400).send({error:"M\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c \u0111\u00e3 h\u1ebft hi\u1ec7u l\u1ef1c",code:4001});await OTP.findOneAndUpdate({_id:$id$$},{verified:!0});let $is_new$$=!1;const $username$$=$otp$$.phone;let $user$$=await User.findOne({email:$username$$});
13
+ if(!$user$$){$user$$=new User;$user$$.email=$username$$;$user$$.local={active:!0};$user$$.local.email=$otp$$.email;$user$$.local.phone=$otp$$.phone;$user$$.local.name=$otp$$.phone;$user$$.name=$otp$$.phone;$is_new$$=!0;try{await $user$$.save()}catch($e$$){return console.log("error verify otp, create user",$e$$),$res$$.status(500).send($e$$)}}else if(!$user$$.local||!$user$$.local.active){$user$$.local=$user$$.local||{};$user$$.local.active=!0;try{await $user$$.save()}catch($e$$){return console.log("error verify otp, create user",
14
+ $e$$),$res$$.status(500).send($e$$)}}if($req$$.query.id_app&&$req$$.query.group_id){const $id_app$$=$req$$.query.id_app,$group_id$$=$req$$.query.group_id,$app$$=await App.findById($id_app$$);$app$$&&Participant.createParticipant({id_app:$id_app$$,email:$user$$.email,name:$user$$.name,group_id:$group_id$$,active:!0},$cust_e$$=>{if($cust_e$$)return console.log("can't add user",$user$$.email,"to company",$app$$.name);$cust_e$$={ten_kh:$user$$.name,email:$user$$.email,dien_thoai:$otp$$.phone,id_app:$id_app$$,
15
+ user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email};try{Customer.asyncCreateCustomer($cust_e$$)}catch($e$$){console.log("Auto create new customer with error:",$e$$.message)}})}const $accessToken$$=generateToken($user$$),$agent$$=$req$$.headers["user-agent"];console.log("create new token for user",$user$$.email);(new Token({email:$user$$.email,token:$accessToken$$,agent:$agent$$,ip:"",once:1==$req$$.query.once||"true"==$req$$.query.once||"1"===$req$$.query.once?!0:
16
+ !1})).save(function($e$$,$rs$$){return $e$$?$res$$.status(500).send($e$$):$res$$.send({token:$accessToken$$,is_new:$is_new$$,once:$rs$$.once})})}catch($e$$){console.log("error verify otp",$e$$),$res$$.status(400).send($e$$.message)}});$app$$.post("/auth/sign",$rateLimiter$$,($req$$,$res$$,$next$$)=>{$passport$$.authenticate("basic",{session:!1},function($err$$,$user$$){if($err$$||!$user$$)return $res$$.status(401).send({message:$err$$||"Unauthorized"});$req$$.user=$user$$;$next$$()})($req$$,$res$$,
17
+ $next$$)},async($req$jscomp$3_user$$,$res$$)=>{let $data$$=$req$jscomp$3_user$$.body;$req$jscomp$3_user$$=$req$jscomp$3_user$$.user;if(!$data$$)return $res$$.status(400).send("Not have data to sign");if(!$data$$.id_app)return $res$$.status(400).send("Data miss id_app property");try{let $signature$$=await Wallet.sign($data$$.id_app,$req$jscomp$3_user$$.email,$data$$);$res$$.send($signature$$)}catch($e$$){return $res$$.status(400).send($e$$.message||$e$$)}});$app$$.get("/auth/local",$rateLimiter$$,
18
+ function($req$$,$res$$,$next$$){let $ip$$=($req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress).split(".").join("").split(":").join(""),$authorization$$=$req$$.headers.authorization;if(!$authorization$$)return $res$$.status(400).send({message:"Authorization is required"});$authorization$$=Buffer.from($authorization$$.replace("Basic ",""),"base64").toString("utf-8");$authorization$$=$authorization$$.split(":");if(1<$authorization$$.length){var $t_session$$="times_login_"+
19
+ $ip$$+"_"+$authorization$$[0].trim().toLowerCase(),$d_session$$="datetime_login_"+$ip$$+"_"+$authorization$$[0].trim().toLowerCase();$req$$.t_session=$t_session$$;$req$$.d_session=$d_session$$;var $now$$=new Date,$d$$=$now$$,$times_try$$=1;if($req$$.headers.cookie&&$req$$.session){$req$$=$req$$.session;$req$$[$t_session$$]?($times_try$$=$req$$[$t_session$$]+1,$req$$[$t_session$$]=$times_try$$):($req$$[$t_session$$]=$times_try$$,$req$$[$d_session$$]=$now$$);$req$$[$d_session$$]?$d$$=new Date($req$$[$d_session$$]):
20
+ $req$$[$d_session$$]=$now$$;$req$$=$now$$.getTime()-$d$$.getTime();if(18E6>$req$$&&10<$times_try$$)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai 10 l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+Math.round((18E6-$req$$)/6E4,0)+" ph\u00fat"});$next$$()}else global.clientRedis.get($t_session$$,function($err$$,$reply$$){$reply$$?($times_try$$=Number($reply$$)+1,global.clientRedis.set($t_session$$,$times_try$$)):(global.clientRedis.set($t_session$$,$times_try$$),
21
+ global.clientRedis.set($d_session$$,$now$$));global.clientRedis.get($d_session$$,function($err$jscomp$3_time_wait$$,$reply$$){$reply$$?$d$$=new Date($reply$$):global.clientRedis.set($d_session$$,$now$$);$err$jscomp$3_time_wait$$=$now$$.getTime()-$d$$.getTime();if(18E6>$err$jscomp$3_time_wait$$&&10<$times_try$$)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai 10 l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+Math.round((18E6-$err$jscomp$3_time_wait$$)/
22
+ 6E4,0)+" ph\u00fat"});$next$$()})})}},function($req$$,$res$$,$next$$){$passport$$.authenticate("basic",{session:!1},function($err$$,$user$$){if($err$$||!$user$$)return $res$$.status(401).send({message:$err$$||"Unauthorized"});if(configs.require_verify&&!$user$$.local.active)return $res$$.status(401).send({require_verify:!0});$req$$.user=$user$$;$next$$()})($req$$,$res$$,$next$$)},async($req$$,$res$$)=>{let $agent$$=$req$$.headers["user-agent"];if($req$$.headers.cookie){var $group_id$jscomp$1_session$$=
23
+ $req$$.session;$group_id$jscomp$1_session$$[$req$$.t_session]=0;$group_id$jscomp$1_session$$[$req$$.d_session]=""}else global.clientRedis.set($req$$.t_session,0),global.clientRedis.set($req$$.d_session,"");log.create({id_app:"LOGIN",id_func:"LOGIN",action:"LOCALLOGIN"},$req$$.user.email,$req$$.header("user-agent"),$req$$);let $user$$=$req$$.user;if($req$$.query.id_app&&$req$$.query.group_id&&global.mongoose.Types.ObjectId.isValid($req$$.query.group_id)){const $id_app$$=$req$$.query.id_app;$group_id$jscomp$1_session$$=
24
+ $req$$.query.group_id;const $app$$=await App.findById($id_app$$),$group$$=await UserGroup.findOne({_id:$group_id$jscomp$1_session$$,is_customer_group:!0});$app$$&&$group$$&&Participant.createParticipant({id_app:$id_app$$,email:$user$$.email,name:$user$$.name,group_id:$group_id$jscomp$1_session$$,active:!0},$cust$jscomp$1_e$$=>{if($cust$jscomp$1_e$$)return console.log("can't add user",$user$$.email,"to company",$app$$.name);$cust$jscomp$1_e$$={ten_kh:$user$$.name,email:$user$$.email,id_app:$id_app$$,
25
+ user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email};validator.isMobilePhone($user$$.email,["vi-VN"])&&($cust$jscomp$1_e$$.dien_thoai=$user$$.email);try{Customer.asyncCreateCustomer($cust$jscomp$1_e$$)}catch($e$$){console.log("Auto create new customer with error:",$e$$.message)}})}const $accessToken$$=generateToken($user$$);(new Token({email:$user$$.email,token:$accessToken$$,agent:$agent$$,ip:"",once:1==$req$$.query.once||"true"==$req$$.query.once||"1"===$req$$.query.once?
26
+ !0:!1})).save(function($e$$,$rs$$){if($e$$)return $res$$.status(500).send($e$$);$res$$.send({token:$accessToken$$,once:$rs$$.once})})});$app$$.get("/check-user/:email",$rateLimiter$$,function($req$$,$res$$){User.findOne({email:$req$$.params.email},{email:1,name:1,picture:1}).lean().exec(function($e$$,$user$$){if($e$$)return $res$$.status(400).send($e$$);$res$$.send($user$$)})});$app$$.post("/signup",$rateLimiter$$,async($req$$,$res$$)=>{var $body$$=$req$$.body;$body$$.json&&($body$$=JSON.parse($body$$.json));
27
+ if(!$body$$)return $res$$.status(400).send("Kh\u00f4ng c\u00f3 n\u1ed9i dung");if(!$body$$.email)return $res$$.status(400).send("L\u1ed7i: B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");$body$$.email=$body$$.email.trim().toLowerCase();if(!$body$$.name)return $res$$.status(400).send("L\u1ed7i: H\u1ecd v\u00e0 t\u00ean ch\u01b0a nh\u1eadp");User.findOne({email:$body$$.email},function($error$jscomp$1$$,$result$$){if($error$jscomp$1$$)return $res$$.status(400).send($error$jscomp$1$$);if($result$$){if($result$$.local&&
28
+ $result$$.local.email==$body$$.email)return $res$$.status(400).send("L\u1ed7i: T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd");$result$$.local||($result$$.local={})}else $result$$=new User,$result$$.email=$body$$.email,$result$$.local={};$result$$.local.email=$body$$.email;$result$$.local.name=$body$$.name;$result$$.partner=$body$$.partner;$result$$.name=$result$$.local.name;$body$$.picture?$result$$.local.picture=$body$$.picture:$result$$.local.picture||
29
+ ($result$$.local.picture="/images/avatar.jpg");let $password$$;if($body$$.password){if($body$$.rePassword!==$body$$.password)return $res$$.status(400).send("L\u1ed7i: M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c");if(!User.teststrengthPassword($body$$.password))return $res$$.status(400).send("L\u1ed7i: M\u1eadt kh\u1ea9u ph\u1ea3i c\u00f3 \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1 v\u00e0 bao g\u1ed3m \u00edt nh\u1ea5t m\u1ed9t ch\u1eef s\u1ed1, m\u1ed9t ch\u1eef hoa v\u00e0 m\u1ed9t ch\u1eef th\u01b0\u1eddng");
29
30
  $password$$=$body$$.password}else $password$$=_crypto.createHash("md5").update($result$$.email+(new Date).toISOString()).digest("hex");$result$$.local.password=$result$$.generateHash($password$$);$result$$.save(function($app$jscomp$3_error$$,$newUser$$){if($app$jscomp$3_error$$)return $res$$.status(400).send("L\u1ed7i: Kh\u00f4ng th\u1ec3 \u0111\u0103ng k\u00fd");log.create({id_app:"SIGNUP",id_func:"SIGNUP",action:"SIGNUP"},$result$$.email,$req$$.header("user-agent"),$req$$);if($body$$.cty_name){$app$jscomp$3_error$$=
30
31
  new App;$app$jscomp$3_error$$.user_created=$result$$.email;$app$jscomp$3_error$$.user_updated=$result$$.email;$app$jscomp$3_error$$.name=$body$$.cty_name;var $d$jscomp$1_now$$=new Date;$app$jscomp$3_error$$.ngay_dn=new Date($d$jscomp$1_now$$.getFullYear(),0,1);$app$jscomp$3_error$$.ngay_ks=new Date($d$jscomp$1_now$$.getFullYear()-1,12,0);$app$jscomp$3_error$$.nam_bd=$d$jscomp$1_now$$.getFullYear();$app$jscomp$3_error$$.ngay_ky1=new Date($d$jscomp$1_now$$.getFullYear(),0,1);$d$jscomp$1_now$$=new Date;
31
32
  $d$jscomp$1_now$$.setMonth($d$jscomp$1_now$$.getMonth()+3);$app$jscomp$3_error$$.expire_date=new Date($d$jscomp$1_now$$);$app$jscomp$3_error$$.save(function($error$jscomp$0$$,$obj$$){if($error$jscomp$0$$)return console.log("Khong tao duoc new app: "+$error$jscomp$0$$);require("../libs/initDatabase").init($obj$$._id,function($error$$){$error$$&&console.log("Can't init database \n"+$error$$)})})}$body$$.id_app&&App.findById($body$$.id_app,($e$jscomp$0$$,$app$$)=>{if($e$jscomp$0$$||!$app$$)return console.log("Can't find app",
@@ -162,30 +162,29 @@ $e$$});if(0===$rs$$.rows_error.length)$res$$.send($rs$$);else{let $msg$$=$rs$$.r
162
162
  const PostBook=require("../libs/post-book"),utils=require("../libs/utils"),Sokho=global.getModel("sokho"),Sokhott=global.getModel("sokhott"),Sokhokhongton=global.getModel("sokhokhongton"),dmvt=global.getModel("dmvt"),Tdttno=global.getModel("tdttno"),Tdttno_tt=global.getModel("tdttno_tt"),Tdttco_tt=global.getModel("tdttco_tt"),Tdttco=global.getModel("tdttco"),Vatra=global.getModel("vatra"),Vatvao=global.getModel("vatvao"),deletePost=function($user$$,$obj$$,$callback$jscomp$1$$){$obj$$.toObject&&($obj$$=
163
163
  $obj$$.toObject());if(!$obj$$._id)return console.error("Error when delete post: obj does not have _id",$obj$$),$callback$jscomp$1$$("Error when delete post: obj does not have _id",$obj$$);async.parallel({delete_model_books_registed:$callback$jscomp$0$$=>{setImmediate(()=>{if(!global.model_books)return $callback$jscomp$0$$();async.map(global.model_books,($bookName$$,$callback$$)=>{setImmediate(()=>{let $book$$=mongoose.models[$bookName$$.toLowerCase()];$book$$?$book$$.deleteMany({id_ct:$obj$$._id.toString()},
164
164
  $e$$=>{$callback$$($e$$)}):$callback$$()})},$e$$=>{$callback$jscomp$0$$($e$$)})})},sk:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokho,function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},sktt:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokhott,function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},skkhongton:$callback$jscomp$0$$=>
165
- {setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokhokhongton,function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},vsc:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vsocai"))return $callback$$();vsocai.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},sc:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("socai"))return $callback$$();
166
- Socai.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},vatra:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vatra"))return $callback$$();Vatra.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},vatvao:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vatvao"))return $callback$$();Vatvao.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},
167
- tdttno:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("tdttno"))return $callback$$();Tdttno.deleteMany({id_ct:$obj$$._id.toString()},function($error$$,$rs$$){console.log("delete post","tdttno",$obj$$._id,$error$$,$rs$$);$callback$$($error$$)})})},tdttco:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("tdttco"))return $callback$$();Tdttco.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},
168
- tdttno_tt:$callback$jscomp$0$$=>{setImmediate(()=>{Tdttno_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);$obj$$.tdttnos?async.map($obj$$.tdttnos,function($detail$$,$callback$$){setImmediate(()=>{Tdttno.findOneAndUpdate({_id:$detail$$.id_hd,so_hd:$detail$$.so_hd},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){console.error($e$$);
169
- $callback$jscomp$0$$()}):$callback$jscomp$0$$()})})},tdttco_tt:$callback$jscomp$0$$=>{setImmediate(()=>{Tdttco_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);$obj$$.tdttcos?async.map($obj$$.tdttcos,function($detail$$,$callback$$){setImmediate(()=>{Tdttco.findOneAndUpdate({_id:$detail$$.id_hd,so_hd:$detail$$.so_hd},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);
170
- $callback$$()})})})},function($e$$){console.error($e$$);$callback$jscomp$0$$()}):$callback$jscomp$0$$()})})}},function($e$$){$callback$jscomp$1$$($e$$,$obj$$)})},runWebhooks=controller.runWebhooks=async($ctrl$$,$obj$$,$action$$,$voucher_options$$)=>{$voucher_options$$||($voucher_options$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$ctrl$$.name},{option:1}).lean()||{}).option);if($voucher_options$$&&$voucher_options$$.option_webhooks&&($ctrl$$=$voucher_options$$.option_webhooks.find($w$$=>
171
- $w$$.action.toUpperCase()===$action$$.toUpperCase()&&$w$$.url))){$voucher_options$$=path.dirname(__dirname)+"/workers/webhook.js";if(!fs.existsSync($voucher_options$$))return console.error("webhook process is not exitst");global.webhookPool||(global.webhookPool=new StaticPool($voucher_options$$));global.webhookPool.exec({data:$obj$$,webhook_configs:$ctrl$$},$response$$=>{$response$$.error?console.error($response$$.error):console.log($response$$)})}},postData=controller.postData=function($obj$$,$ctrl$$,
172
- $callback$jscomp$0$$){const $post$$=$ctrl$$.dynamicPost||$ctrl$$.post;if(!$post$$)return $callback$jscomp$0$$();let $obj_created$$=$obj$$.toObject?$obj$$.toObject():{...$obj$$};if(!$obj_created$$.ma_ct)return console.error("\u0110\u1ec3 post \u0111\u01b0\u1ee3c data, y\u00eau c\u1ea7u c\u1ea7n c\u00f3 field ma_ct",$obj_created$$),$callback$jscomp$0$$("\u0110\u1ec3 post \u0111\u01b0\u1ee3c data, \u0110\u1ed1i t\u01b0\u1ee3ng c\u1ea7n c\u00f3 d\u1eef li\u1ec7u ma_ct,trang_thai");Object.keys($obj_created$$).forEach($key$$=>
173
- {let $p$$=$obj_created$$[$key$$];$p$$&&($p$$.toObject&&($obj_created$$[$key$$]=$p$$.toObject()),underscore.isArray($p$$)&&($obj_created$$[$key$$]=$p$$.map($el$$=>$el$$?$el$$.toObject?$el$$.toObject():$el$$:$el$$)))});$ctrl$$.beforePost||($ctrl$$.beforePost=function($obj_created$$,$callback$$){$callback$$(null,null)});$ctrl$$.beforePost($obj_created$$,function($e$jscomp$3$$){if($e$jscomp$3$$)return $callback$jscomp$0$$($e$jscomp$3$$);deletePost($obj_created$$.user_updated,$obj_created$$,async function($e$jscomp$2$$){if($e$jscomp$2$$)return $callback$jscomp$0$$($e$jscomp$2$$);
174
- if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj_created$$)}catch($e$$){return $callback$jscomp$0$$($e$$.message||$e$$.error||$e$$)}setImmediate(()=>{if($obj_created$$.trang_thai||0==$obj_created$$.trang_thai)$obj_created$$.trang_thai=$obj_created$$.trang_thai.toString();trangthai.findOne({ma_ct:$obj_created$$.ma_ct.toUpperCase(),ma_trang_thai:$obj_created$$.trang_thai},function($e$jscomp$1$$,$trang_thai$$){if($e$jscomp$1$$)return $callback$jscomp$0$$($e$jscomp$1$$);if($trang_thai$$&&
175
- !$trang_thai$$.post)return $callback$jscomp$0$$();setImmediate(()=>{$post$$($obj_created$$,function($e$jscomp$0$$,$rs$$){setImmediate(()=>{$e$jscomp$0$$?(console.error("error post data",$obj_created$$._id,$e$jscomp$0$$),deletePost($obj_created$$.user_updated,$obj_created$$,async function($e_delete_post$$){if($e_delete_post$$)return console.error("error delete post",$e_delete_post$$),$callback$jscomp$0$$($e_delete_post$$);if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj_created$$)}catch($e$$){return console.error($e$$.message||
176
- $e$$.error||$e$$),$callback$jscomp$0$$($e$$)}else $callback$jscomp$0$$($e$jscomp$0$$)})):$callback$jscomp$0$$(null,$rs$$)})})})})})})})},pushNotification=controller.pushNotification=($ctrl$$,$_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=!1,$options$$={title:"",data:{}})=>{setImmediate(()=>{if($_obj$$.status){var $obj$jscomp$0$$=$_obj$$.toObject?$_obj$$.toObject():{...$_obj$$};$obj$jscomp$0$$._id=$obj$jscomp$0$$._id.toString();$options$$||($options$$={});var $exclude_token$$=$options$$.exclude_token,
177
- $trang_thai$$=($obj$jscomp$0$$.trang_thai||(0==$obj$jscomp$0$$.progress?"0":$obj$jscomp$0$$.progress)||"").toString();$old_obj$$&&!$justFireEvents$$&&($old_obj$$.trang_thai||(0==$old_obj$$.progress?"0":$old_obj$$.progress)||"").toString()===$trang_thai$$&&($justFireEvents$$=!0);OptionsModel.findOne({id_app:$obj$jscomp$0$$.id_app,id_func:$ctrl$$.name},{option:1}).lean().exec(async($e$jscomp$0$$,$rs$$)=>{setImmediate(async()=>{if($rs$$&&$rs$$.option&&$rs$$.option.users_receive_notification)var $notifications_setting_users_receive_notification$$=
178
- $rs$$.option.users_receive_notification;$notifications_setting_users_receive_notification$$&&0!==$notifications_setting_users_receive_notification$$.length||($notifications_setting_users_receive_notification$$=await Promise.all((($ctrl$$.options||{}).users_receive_notification_default||[]).map($n$$=>new Promise($resolve$$=>{setImmediate(async()=>{underscore.isFunction($n$$)?$resolve$$(await $n$$($obj$jscomp$0$$)):$resolve$$($n$$)})}))));$notifications_setting_users_receive_notification$$&&($notifications_setting_users_receive_notification$$=
179
- $notifications_setting_users_receive_notification$$.filter($u$$=>!$u$$.trang_thai||$u$$.trang_thai.toString()===$trang_thai$$||"delete"===$u$$.trang_thai.toString()),$notifications_setting_users_receive_notification$$=$notifications_setting_users_receive_notification$$.filter($func_string$jscomp$1_n$$=>{if(!$func_string$jscomp$1_n$$.condition)return!0;$func_string$jscomp$1_n$$=$func_string$jscomp$1_n$$.condition;0>$func_string$jscomp$1_n$$.indexOf("return ")&&($func_string$jscomp$1_n$$=`return ${$func_string$jscomp$1_n$$}`);
180
- try{return evalute($func_string$jscomp$1_n$$,{...$obj$jscomp$0$$,master:$obj$jscomp$0$$,data:$obj$jscomp$0$$})}catch($e$$){return console.error($e$$,$func_string$jscomp$1_n$$),!1}}),$notifications_setting_users_receive_notification$$.forEach(async $p$jscomp$0$$=>{setImmediate(async()=>{let $notificationData$$={_id:$obj$jscomp$0$$._id,trang_thai:$trang_thai$$,id_app:$obj$jscomp$0$$.id_app,code:$obj$jscomp$0$$.ma_ct||$ctrl$$.name,id_link:$obj$jscomp$0$$.id_link,code_link:$obj$jscomp$0$$.code_link,event:$eventName$$,
181
- action:$eventName$$.toUpperCase(),data:$options$$.data};$justFireEvents$$||"delete"===$eventName$$.toLowerCase()?($notificationData$$.title="",$notificationData$$.body=""):($notificationData$$.body=$p$jscomp$0$$.body?compileHtml($p$jscomp$0$$.body,$obj$jscomp$0$$):"",$notificationData$$.title=stripHtmlTags(compileHtml($options$$.title||$p$jscomp$0$$.title||$p$jscomp$0$$.content||"",$obj$jscomp$0$$)));$notificationData$$.title||$notificationData$$.body||($exclude_token$$=null);let $users_will_receive$$=
182
- $p$jscomp$0$$.users;$users_will_receive$$||($users_will_receive$$=[]);if($p$jscomp$0$$.send_tat_ca_nhan_vien){var $admins_employees_groups_of_user_sandbox$$=(await Usergroup.find({id_app:$obj$jscomp$0$$.id_app,is_employee_group:!0}).lean()).map($g$$=>$g$$._id.toString());0<$admins_employees_groups_of_user_sandbox$$.length&&($admins_employees_groups_of_user_sandbox$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,group_id:{$in:$admins_employees_groups_of_user_sandbox$$}}).lean()).map($p$$=>
183
- $p$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_employees_groups_of_user_sandbox$$))}$p$jscomp$0$$.send_phu_trach&&$obj$jscomp$0$$.phu_trach&&($users_will_receive$$=$users_will_receive$$.concat([$obj$jscomp$0$$.phu_trach]));$p$jscomp$0$$.send_admin&&($admins_employees_groups_of_user_sandbox$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,admin:!0}).lean()).map($p$$=>$p$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_employees_groups_of_user_sandbox$$));
184
- $p$jscomp$0$$.send_attends&&$obj$jscomp$0$$.attends&&($users_will_receive$$=$users_will_receive$$.concat($obj$jscomp$0$$.attends));$p$jscomp$0$$.group_id&&($admins_employees_groups_of_user_sandbox$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,group_id:$p$jscomp$0$$.group_id}).lean()).map($u$$=>$u$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_employees_groups_of_user_sandbox$$));$p$jscomp$0$$.send_to_customer&&($obj$jscomp$0$$.ma_kh||$obj$jscomp$0$$.id_kh)&&($admins_employees_groups_of_user_sandbox$$=
185
- await mongoose.models.customer.getInfo($obj$jscomp$0$$.id_app,{$or:[{ma_kh:$obj$jscomp$0$$.ma_kh},{_id:$obj$jscomp$0$$.id_kh}]},"of_user"))&&($users_will_receive$$=$users_will_receive$$.concat([$admins_employees_groups_of_user_sandbox$$]));$p$jscomp$0$$.send_to_user_created?$users_will_receive$$=$users_will_receive$$.concat([$obj$jscomp$0$$.user_created]):!1===$p$jscomp$0$$.send_to_user_created&&($users_will_receive$$=$users_will_receive$$.filter($u$$=>$u$$!==$obj$jscomp$0$$.user_created));if($p$jscomp$0$$.handle_receivers){$admins_employees_groups_of_user_sandbox$$=
186
- {obj:$obj$jscomp$0$$,users_will_receive:$users_will_receive$$};try{let $str_func$$=$p$jscomp$0$$.handle_receivers;0!==$str_func$$.indexOf("return ")&&($str_func$$=`return ${$str_func$$}`);0>$str_func$$.indexOf("async ")&&($users_will_receive$$=evalute($str_func$$,$admins_employees_groups_of_user_sandbox$$))}catch($e$$){console.error($e$$)}}$ctrl$$.options||($ctrl$$.options={});$ctrl$$.options.onEmitEvent||($ctrl$$.options.onEmitEvent=($obj$$,$users_will_receive$$,$next$$,$_notificationData$$)=>{$next$$(null,
187
- $users_will_receive$$,$_notificationData$$)});$ctrl$$.options.onEmitEvent(Object.assign({},$obj$jscomp$0$$),$users_will_receive$$,($e$$,$_users_will_receive$$,$_notificationData$$)=>{setImmediate(()=>{if($e$$)return console.error("Error emit events",$e$$);$_users_will_receive$$=underscore.uniq($_users_will_receive$$);0<$_users_will_receive$$.length&&app.emitEvent($obj$jscomp$0$$.id_app,`${$ctrl$$.name.toLowerCase()}:${$eventName$$}`,$_notificationData$$||$notificationData$$,$exclude_token$$,$_users_will_receive$$,
188
- !0)})},Object.assign({},$notificationData$$),Object.assign({},$p$jscomp$0$$))})}))})})}})};
165
+ {setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokhokhongton,function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},vsc:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vsocai"))return $callback$$();vsocai.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},sc:$callback$$=>{setImmediate(()=>{Socai.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},
166
+ vatra:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vatra"))return $callback$$();Vatra.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},vatvao:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vatvao"))return $callback$$();Vatvao.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttno:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("tdttno"))return $callback$$();
167
+ Tdttno.deleteMany({id_ct:$obj$$._id.toString()},function($error$$,$rs$$){console.log("delete post","tdttno",$obj$$._id,$error$$,$rs$$);$callback$$($error$$)})})},tdttco:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("tdttco"))return $callback$$();Tdttco.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttno_tt:$callback$jscomp$0$$=>{setImmediate(()=>{Tdttno_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);
168
+ $obj$$.tdttnos?async.map($obj$$.tdttnos,function($detail$$,$callback$$){setImmediate(()=>{Tdttno.findOneAndUpdate({_id:$detail$$.id_hd,so_hd:$detail$$.so_hd},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){console.error($e$$);$callback$jscomp$0$$()}):$callback$jscomp$0$$()})})},tdttco_tt:$callback$jscomp$0$$=>{setImmediate(()=>{Tdttco_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);
169
+ $obj$$.tdttcos?async.map($obj$$.tdttcos,function($detail$$,$callback$$){setImmediate(()=>{Tdttco.findOneAndUpdate({_id:$detail$$.id_hd,so_hd:$detail$$.so_hd},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){console.error($e$$);$callback$jscomp$0$$()}):$callback$jscomp$0$$()})})}},function($e$$){$callback$jscomp$1$$($e$$,$obj$$)})},runWebhooks=controller.runWebhooks=async($ctrl$$,$obj$$,$action$$,$voucher_options$$)=>
170
+ {$voucher_options$$||($voucher_options$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$ctrl$$.name},{option:1}).lean()||{}).option);if($voucher_options$$&&$voucher_options$$.option_webhooks&&($ctrl$$=$voucher_options$$.option_webhooks.find($w$$=>$w$$.action.toUpperCase()===$action$$.toUpperCase()&&$w$$.url))){$voucher_options$$=path.dirname(__dirname)+"/workers/webhook.js";if(!fs.existsSync($voucher_options$$))return console.error("webhook process is not exitst");global.webhookPool||
171
+ (global.webhookPool=new StaticPool($voucher_options$$));global.webhookPool.exec({data:$obj$$,webhook_configs:$ctrl$$},$response$$=>{$response$$.error?console.error($response$$.error):console.log($response$$)})}},postData=controller.postData=function($obj$$,$ctrl$$,$callback$jscomp$0$$){const $post$$=$ctrl$$.dynamicPost||$ctrl$$.post;if(!$post$$)return $callback$jscomp$0$$();let $obj_created$$=$obj$$.toObject?$obj$$.toObject():{...$obj$$};if(!$obj_created$$.ma_ct)return console.error("\u0110\u1ec3 post \u0111\u01b0\u1ee3c data, y\u00eau c\u1ea7u c\u1ea7n c\u00f3 field ma_ct",
172
+ $obj_created$$),$callback$jscomp$0$$("\u0110\u1ec3 post \u0111\u01b0\u1ee3c data, \u0110\u1ed1i t\u01b0\u1ee3ng c\u1ea7n c\u00f3 d\u1eef li\u1ec7u ma_ct,trang_thai");Object.keys($obj_created$$).forEach($key$$=>{let $p$$=$obj_created$$[$key$$];$p$$&&($p$$.toObject&&($obj_created$$[$key$$]=$p$$.toObject()),underscore.isArray($p$$)&&($obj_created$$[$key$$]=$p$$.map($el$$=>$el$$?$el$$.toObject?$el$$.toObject():$el$$:$el$$)))});$ctrl$$.beforePost||($ctrl$$.beforePost=function($obj_created$$,$callback$$){$callback$$(null,
173
+ null)});$ctrl$$.beforePost($obj_created$$,function($e$jscomp$3$$){if($e$jscomp$3$$)return $callback$jscomp$0$$($e$jscomp$3$$);deletePost($obj_created$$.user_updated,$obj_created$$,async function($e$jscomp$2$$){if($e$jscomp$2$$)return $callback$jscomp$0$$($e$jscomp$2$$);if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj_created$$)}catch($e$$){return $callback$jscomp$0$$($e$$.message||$e$$.error||$e$$)}setImmediate(()=>{if($obj_created$$.trang_thai||0==$obj_created$$.trang_thai)$obj_created$$.trang_thai=
174
+ $obj_created$$.trang_thai.toString();trangthai.findOne({ma_ct:$obj_created$$.ma_ct.toUpperCase(),ma_trang_thai:$obj_created$$.trang_thai},function($e$jscomp$1$$,$trang_thai$$){if($e$jscomp$1$$)return $callback$jscomp$0$$($e$jscomp$1$$);if($trang_thai$$&&!$trang_thai$$.post)return $callback$jscomp$0$$();setImmediate(()=>{$post$$($obj_created$$,function($e$jscomp$0$$,$rs$$){setImmediate(()=>{$e$jscomp$0$$?(console.error("error post data",$obj_created$$._id,$e$jscomp$0$$),deletePost($obj_created$$.user_updated,
175
+ $obj_created$$,async function($e_delete_post$$){if($e_delete_post$$)return console.error("error delete post",$e_delete_post$$),$callback$jscomp$0$$($e_delete_post$$);if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj_created$$)}catch($e$$){return console.error($e$$.message||$e$$.error||$e$$),$callback$jscomp$0$$($e$$)}else $callback$jscomp$0$$($e$jscomp$0$$)})):$callback$jscomp$0$$(null,$rs$$)})})})})})})})},pushNotification=controller.pushNotification=($ctrl$$,$_obj$$,$eventName$$=
176
+ "new",$old_obj$$=null,$justFireEvents$$=!1,$options$$={title:"",data:{}})=>{setImmediate(()=>{if($_obj$$.status){var $obj$jscomp$0$$=$_obj$$.toObject?$_obj$$.toObject():{...$_obj$$};$obj$jscomp$0$$._id=$obj$jscomp$0$$._id.toString();$options$$||($options$$={});var $exclude_token$$=$options$$.exclude_token,$trang_thai$$=($obj$jscomp$0$$.trang_thai||(0==$obj$jscomp$0$$.progress?"0":$obj$jscomp$0$$.progress)||"").toString();$old_obj$$&&!$justFireEvents$$&&($old_obj$$.trang_thai||(0==$old_obj$$.progress?
177
+ "0":$old_obj$$.progress)||"").toString()===$trang_thai$$&&($justFireEvents$$=!0);OptionsModel.findOne({id_app:$obj$jscomp$0$$.id_app,id_func:$ctrl$$.name},{option:1}).lean().exec(async($e$jscomp$0$$,$rs$$)=>{setImmediate(async()=>{if($rs$$&&$rs$$.option&&$rs$$.option.users_receive_notification)var $notifications_setting_users_receive_notification$$=$rs$$.option.users_receive_notification;$notifications_setting_users_receive_notification$$&&0!==$notifications_setting_users_receive_notification$$.length||
178
+ ($notifications_setting_users_receive_notification$$=await Promise.all((($ctrl$$.options||{}).users_receive_notification_default||[]).map($n$$=>new Promise($resolve$$=>{setImmediate(async()=>{underscore.isFunction($n$$)?$resolve$$(await $n$$($obj$jscomp$0$$)):$resolve$$($n$$)})}))));$notifications_setting_users_receive_notification$$&&($notifications_setting_users_receive_notification$$=$notifications_setting_users_receive_notification$$.filter($u$$=>!$u$$.trang_thai||$u$$.trang_thai.toString()===
179
+ $trang_thai$$||"delete"===$u$$.trang_thai.toString()),$notifications_setting_users_receive_notification$$=$notifications_setting_users_receive_notification$$.filter($func_string$jscomp$1_n$$=>{if(!$func_string$jscomp$1_n$$.condition)return!0;$func_string$jscomp$1_n$$=$func_string$jscomp$1_n$$.condition;0>$func_string$jscomp$1_n$$.indexOf("return ")&&($func_string$jscomp$1_n$$=`return ${$func_string$jscomp$1_n$$}`);try{return evalute($func_string$jscomp$1_n$$,{...$obj$jscomp$0$$,master:$obj$jscomp$0$$,
180
+ data:$obj$jscomp$0$$})}catch($e$$){return console.error($e$$,$func_string$jscomp$1_n$$),!1}}),$notifications_setting_users_receive_notification$$.forEach(async $p$jscomp$0$$=>{setImmediate(async()=>{let $notificationData$$={_id:$obj$jscomp$0$$._id,trang_thai:$trang_thai$$,id_app:$obj$jscomp$0$$.id_app,code:$obj$jscomp$0$$.ma_ct||$ctrl$$.name,id_link:$obj$jscomp$0$$.id_link,code_link:$obj$jscomp$0$$.code_link,event:$eventName$$,action:$eventName$$.toUpperCase(),data:$options$$.data};$justFireEvents$$||
181
+ "delete"===$eventName$$.toLowerCase()?($notificationData$$.title="",$notificationData$$.body=""):($notificationData$$.body=$p$jscomp$0$$.body?compileHtml($p$jscomp$0$$.body,$obj$jscomp$0$$):"",$notificationData$$.title=stripHtmlTags(compileHtml($options$$.title||$p$jscomp$0$$.title||$p$jscomp$0$$.content||"",$obj$jscomp$0$$)));$notificationData$$.title||$notificationData$$.body||($exclude_token$$=null);let $users_will_receive$$=$p$jscomp$0$$.users;$users_will_receive$$||($users_will_receive$$=[]);
182
+ if($p$jscomp$0$$.send_tat_ca_nhan_vien){var $admins_employees_groups_of_user_sandbox$$=(await Usergroup.find({id_app:$obj$jscomp$0$$.id_app,is_employee_group:!0}).lean()).map($g$$=>$g$$._id.toString());0<$admins_employees_groups_of_user_sandbox$$.length&&($admins_employees_groups_of_user_sandbox$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,group_id:{$in:$admins_employees_groups_of_user_sandbox$$}}).lean()).map($p$$=>$p$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_employees_groups_of_user_sandbox$$))}$p$jscomp$0$$.send_phu_trach&&
183
+ $obj$jscomp$0$$.phu_trach&&($users_will_receive$$=$users_will_receive$$.concat([$obj$jscomp$0$$.phu_trach]));$p$jscomp$0$$.send_admin&&($admins_employees_groups_of_user_sandbox$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,admin:!0}).lean()).map($p$$=>$p$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_employees_groups_of_user_sandbox$$));$p$jscomp$0$$.send_attends&&$obj$jscomp$0$$.attends&&($users_will_receive$$=$users_will_receive$$.concat($obj$jscomp$0$$.attends));
184
+ $p$jscomp$0$$.group_id&&($admins_employees_groups_of_user_sandbox$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,group_id:$p$jscomp$0$$.group_id}).lean()).map($u$$=>$u$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_employees_groups_of_user_sandbox$$));$p$jscomp$0$$.send_to_customer&&($obj$jscomp$0$$.ma_kh||$obj$jscomp$0$$.id_kh)&&($admins_employees_groups_of_user_sandbox$$=await mongoose.models.customer.getInfo($obj$jscomp$0$$.id_app,{$or:[{ma_kh:$obj$jscomp$0$$.ma_kh},
185
+ {_id:$obj$jscomp$0$$.id_kh}]},"of_user"))&&($users_will_receive$$=$users_will_receive$$.concat([$admins_employees_groups_of_user_sandbox$$]));$p$jscomp$0$$.send_to_user_created?$users_will_receive$$=$users_will_receive$$.concat([$obj$jscomp$0$$.user_created]):!1===$p$jscomp$0$$.send_to_user_created&&($users_will_receive$$=$users_will_receive$$.filter($u$$=>$u$$!==$obj$jscomp$0$$.user_created));if($p$jscomp$0$$.handle_receivers){$admins_employees_groups_of_user_sandbox$$={obj:$obj$jscomp$0$$,users_will_receive:$users_will_receive$$};
186
+ try{let $str_func$$=$p$jscomp$0$$.handle_receivers;0!==$str_func$$.indexOf("return ")&&($str_func$$=`return ${$str_func$$}`);0>$str_func$$.indexOf("async ")&&($users_will_receive$$=evalute($str_func$$,$admins_employees_groups_of_user_sandbox$$))}catch($e$$){console.error($e$$)}}$ctrl$$.options||($ctrl$$.options={});$ctrl$$.options.onEmitEvent||($ctrl$$.options.onEmitEvent=($obj$$,$users_will_receive$$,$next$$,$_notificationData$$)=>{$next$$(null,$users_will_receive$$,$_notificationData$$)});$ctrl$$.options.onEmitEvent(Object.assign({},
187
+ $obj$jscomp$0$$),$users_will_receive$$,($e$$,$_users_will_receive$$,$_notificationData$$)=>{setImmediate(()=>{if($e$$)return console.error("Error emit events",$e$$);$_users_will_receive$$=underscore.uniq($_users_will_receive$$);0<$_users_will_receive$$.length&&app.emitEvent($obj$jscomp$0$$.id_app,`${$ctrl$$.name.toLowerCase()}:${$eventName$$}`,$_notificationData$$||$notificationData$$,$exclude_token$$,$_users_will_receive$$,!0)})},Object.assign({},$notificationData$$),Object.assign({},$p$jscomp$0$$))})}))})})}})};
189
188
  async function createIdRef($model$$,$data$$){$model$$=Object.values($model$$.schema.paths).filter($path$$=>$path$$.options&&$path$$.options.ref&&$path$$.options.localField&&$path$$.options.foreignField);try{return await Promise.all($model$$.map($path$$=>new Promise($resove$$=>{setImmediate(async()=>{let $namePath$$=$path$$.path;var $modelRef_modelRefName$$=$path$$.options.ref,$localField_obj$$=$path$$.options.localField;let $foreignField$$=$path$$.options.foreignField;$data$$[$localField_obj$$]?($modelRef_modelRefName$$=
190
189
  mongoose.models[$modelRef_modelRefName$$.toLowerCase()])?($localField_obj$$=await $modelRef_modelRefName$$.findOne({id_app:$data$$.id_app,[$foreignField$$]:$data$$[$localField_obj$$]}).lean(),$data$$[$namePath$$]=$localField_obj$$?$localField_obj$$._id.toString():null):$data$$[$namePath$$]=null:$data$$[$namePath$$]=null;$resove$$($path$$)})})))}catch($e2$$){return console.error("error create ref data",$e2$$),null}}
191
190
  async function create($user$jscomp$0$$,$ctrl$$,$data$$,$callback$jscomp$1$$,$id_be_supply_by_user$$,$req$$){try{const $model$$=$ctrl$$.model,$voucher_options$$=(await OptionsModel.findOne({id_app:$user$jscomp$0$$.current_id_app,id_func:$ctrl$$.name}).lean()||{}).option,$schema_paths$$=$model$$.schema.paths;let $v_data$$;try{$v_data$$=await asyncBodyToJson($data$$,$ctrl$$,$user$jscomp$0$$.current_id_app,$voucher_options$$)}catch($e$$){return $callback$jscomp$1$$($e$$.message||$e$$.error||$e$$)}underscore.has($schema_paths$$,
@@ -241,29 +240,30 @@ $kq$$){let $msgError$$=$error$jscomp$0$$||ERR_ALREADY_EXIST;console.error($msgEr
241
240
  $error$$.message||$error$$),code:ERR_KEY_ARISE_CODE});$callback$$(null,$obj$$)})},$unique$$)})}):$callback$$(null,$obj$$)})},function($obj$$,$callback$$){let $keys$$=underscore.keys($model$$.referenceKeys).filter($key$$=>"_id"!==$key$$);$unique$$&&($keys$$=$keys$$.filter($key$$=>0>$unique$$.indexOf($key$$).length));if(0===$keys$$.length)return $callback$$(null,$obj$$);checkReference($model$$,$obj$$,function($msgError$$){setImmediate(()=>{if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,
242
241
  $obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)},$current_obj$$);else $callback$$({error:ERR_ARISE+($msgError$$.error||$msgError$$.message||$msgError$$),code:ERR_ARISE_CODE});else $callback$$(null,$obj$$)})},$keys$$)},function($obj$jscomp$1$$,$callback$$){$ctrl$$.validating||($ctrl$$.validating=($user$$,$obj$$,$next$$)=>{$next$$(null,$obj$$)});$ctrl$$.validating($user$jscomp$0$$,$obj$jscomp$1$$,($error$$,$obj$jscomp$0$$)=>{if($error$$)return $callback$$($error$$);
243
242
  setImmediate(function(){$data$jscomp$0$$.date_updated=new Date;$data$jscomp$0$$.user_updated=$user$jscomp$0$$.email;delete $data$jscomp$0$$.__v;$ctrl$$.options.onUpdateExtending||($ctrl$$.options.onUpdateExtending=function($obj$$,$data$$,$action$$,$fn$$){$fn$$()});$ctrl$$.options.onUpdateExtending($obj$jscomp$0$$,$data$jscomp$0$$,$action$jscomp$0$$,function(){underscore.has($schema_paths$$,"exfields")&&$data$jscomp$0$$.exfields&&($obj$jscomp$0$$.exfields=$data$jscomp$0$$.exfields);delete $data$jscomp$0$$.__v;
244
- for(let $f$$ in $data$jscomp$0$$)underscore.has($schema_paths$$,$f$$)&&($obj$jscomp$0$$.set($f$$,$data$jscomp$0$$[$f$$]),"exfields"!==$f$$||$obj$jscomp$0$$.exfields||($obj$jscomp$0$$.exfields={}));validate($obj$jscomp$0$$,function($msgError$$){setImmediate(()=>{if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,$obj$jscomp$0$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)},$current_obj$$);else $callback$$($msgError$$);else $callback$$(null,
245
- $obj$jscomp$0$$)})})})})})},function($obj$$,$callback$$){setImmediate(async()=>{$obj$$.ngay_ct&&($obj$$.ngay_ct=moment($obj$$.ngay_ct).toDate());for(var $$condition_k$$ in $ctrl$$.keyValues)$obj$$[$$condition_k$$]=$ctrl$$.keyValues[$$condition_k$$];Object.keys($model$$.schema.paths).filter($model_path$$=>$obj$$[$model_path$$]&&underscore.isArray($obj$$[$model_path$$])).forEach($model_path$$=>{$model$$.schema.paths[$model_path$$].schema&&$model$$.schema.paths[$model_path$$].schema.paths&&Object.keys($model$$.schema.paths[$model_path$$].schema.paths).filter($path$$=>
246
- "line"!==$path$$&&"_id"!==$path$$&&"__v"!==$path$$&&0<=fields_sync_master_detail.indexOf($path$$)).forEach($path$$=>{$obj$$[$path$$]&&$obj$$[$model_path$$].filter($detail$$=>!$detail$$[$path$$]).forEach($detail$$=>{$detail$$[$path$$]=$obj$$[$path$$]})})});await createIdRef($model$$,$obj$$);$ctrl$$.saving&&await $ctrl$$.saving($user$jscomp$0$$,$obj$$);$ctrl$$.emit("saving",$obj$$);let $obj_created$$,$error$jscomp$0$$;$data$jscomp$0$$.$condition&&($$condition_k$$=$data$jscomp$0$$.$condition,$$condition_k$$._id=
247
- $obj$$._id,await $model$$.findOne($$condition_k$$)||($error$jscomp$0$$=ERR_CAN_NOT_UPDATE),delete $data$jscomp$0$$.$condition);if(!$error$jscomp$0$$)try{delete $obj$$.__v,$obj_created$$=await $obj$$.save()}catch($e$$){$error$jscomp$0$$=$e$$}if($error$jscomp$0$$){let $msgErrors$$=[];for(let $k$$ in $error$jscomp$0$$.errors)$msgErrors$$.push($error$jscomp$0$$.errors[$k$$].message);0==$msgErrors$$.length&&($msgErrors$$=$error$jscomp$0$$.message);$msgErrors$$||($msgErrors$$=JSON.stringify($error$jscomp$0$$));
248
- if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,$obj$$,$e$$=>{$e$$&&console.error("onErrorUpdating",$e$$);$callback$$({error:$msgErrors$$,code:ERR_CAN_NOT_UPDATE_CODE})},$current_obj$$);else $callback$$({error:$msgErrors$$,code:ERR_CAN_NOT_UPDATE_CODE})}else $req$$&&$req$$.header&&setImmediate(()=>{log.create({id_app:$user$jscomp$0$$.current_id_app,id_func:$ctrl$$.name,action:"UPDATE",data:{oldData:$current_obj$$,newData:$data$jscomp$0$$,id:$obj$$._id.toString()}},
249
- $user$jscomp$0$$.email,$req$$.header("user-agent"),$req$$)}),postData($obj_created$$,$ctrl$$,function($msgError$$){$msgError$$?setImmediate(()=>{$current_obj$$&&$model$$.findByIdAndUpdate($current_obj$$._id,{$set:$current_obj$$},function($err$$,$restore_data$$){if($err$$||!$restore_data$$)return console.error("can't restore voucher",$err$$||": don't find voucher");console.log("restored data of voucher. posting...");$model$$.findById($current_obj$$._id,($e$jscomp$0$$,$_d$$)=>{if(!$_d$$)return console.error("Don't find voucher",
250
- $current_obj$$._id);postData($_d$$,$ctrl$$,function($e$$){if($e$$)return console.error("can't repost voucher",$e$$);console.log("reposted voucher",$_d$$._id)})})});if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)},$current_obj$$);else $callback$$($msgError$$)}):setImmediate(()=>{$ctrl$$.emit("saved",$obj_created$$);$ctrl$$.emit("updated",$obj_created$$);$obj_created$$=$obj_created$$.toObject();
251
- runWebhooks($ctrl$$,$obj_created$$,"UPDATE",$voucher_options$$);$req$$&&pushNotification($ctrl$$,$obj_created$$,"update",$current_obj$$,null,{exclude_token:$req$$.query.access_token});$ctrl$$.cacheData($obj_created$$);if($req$$&&!1!==$req$$.query.return_data)$ctrl$$.onView($user$jscomp$0$$,[$obj_created$$],function($error$$,$viewValue$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$(null,$viewValue$$[0])})},{req:$req$$});else $callback$$(null,{_id:$obj_created$$._id})})})})},
252
- function($obj$$,$callback$$){$ctrl$$.requestApprove($user$jscomp$0$$.current_app_info,$user$jscomp$0$$,$obj$$,$callback$$,$voucher_options$$)},function($obj$jscomp$0$$,$callback$$){void 0!=$obj$jscomp$0$$.trang_thai&&setImmediate(async()=>{Approve.findOne({id_ct:$obj$jscomp$0$$._id.toString(),"update_after_approve.data.trang_thai":$obj$jscomp$0$$.trang_thai.toString()}).lean().exec(($e$$,$rs$$)=>{!$rs$$||$rs$$.user_approved||$rs$$.user_denied||($rs$$.user_approved=$req$$.user.email,$rs$$.user_approved_name=
253
- $req$$.user.name,$rs$$.date_approved=new Date,Approve.updateOne({_id:$rs$$._id},$rs$$).then(()=>{Approve.sendNotifyApproved($rs$$,$req$$.query.access_token)}))})});setImmediate(async()=>{(await permission.getFieldNotRight($obj$jscomp$0$$.id_app,$user$jscomp$0$$.email,$ctrl$$.name)).forEach($f$$=>{delete $obj$jscomp$0$$[$f$$]});$obj$jscomp$0$$.collection_name=$ctrl$$.collection_name;$ctrl$$.updated?$ctrl$$.updated($user$jscomp$0$$,$obj$jscomp$0$$,function($error$jscomp$0$$,$obj$$){if($error$jscomp$0$$)return console.error("error when saved",
254
- $error$jscomp$0$$),$callback$$($error$jscomp$0$$);$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$jscomp$0$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)}):$callback$$(null,$obj$$)},$current_obj$$):$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$jscomp$0$$,$obj$jscomp$0$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$jscomp$0$$)}):$callback$$(null,$obj$jscomp$0$$)})}],($e$jscomp$164_name_cached$$,$rs$$)=>{$e$jscomp$164_name_cached$$?
255
- (console.error($e$jscomp$164_name_cached$$),$callback$jscomp$1$$($e$jscomp$164_name_cached$$)):($e$jscomp$164_name_cached$$=$model$$.collection.name,$user$jscomp$0$$.current_id_app&&($e$jscomp$164_name_cached$$+=$user$jscomp$0$$.current_id_app),delete global.cacheDatas[$e$jscomp$164_name_cached$$],$callback$jscomp$1$$(null,$rs$$))})}catch($e$$){console.error($e$$),$callback$jscomp$1$$($e$$)}};
243
+ for(let $f$$ in $data$jscomp$0$$)underscore.has($schema_paths$$,$f$$)&&"_id"!==$f$$&&($obj$jscomp$0$$.set($f$$,$data$jscomp$0$$[$f$$]),"exfields"!==$f$$||$obj$jscomp$0$$.exfields||($obj$jscomp$0$$.exfields={}));validate($obj$jscomp$0$$,function($msgError$$){setImmediate(()=>{if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,$obj$jscomp$0$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)},$current_obj$$);else $callback$$($msgError$$);
244
+ else $callback$$(null,$obj$jscomp$0$$)})})})})})},function($obj$$,$callback$$){$current_obj$$&&($obj$$._id=$current_obj$$._id);deletePost($user$jscomp$0$$,$obj$$,async $e$$=>{$callback$$($e$$,$obj$$)})},function($obj$$,$callback$$){setImmediate(async()=>{$obj$$.ngay_ct&&($obj$$.ngay_ct=moment($obj$$.ngay_ct).toDate());for(var $$condition_k$$ in $ctrl$$.keyValues)$obj$$[$$condition_k$$]=$ctrl$$.keyValues[$$condition_k$$];Object.keys($model$$.schema.paths).filter($model_path$$=>$obj$$[$model_path$$]&&
245
+ underscore.isArray($obj$$[$model_path$$])).forEach($model_path$$=>{$model$$.schema.paths[$model_path$$].schema&&$model$$.schema.paths[$model_path$$].schema.paths&&Object.keys($model$$.schema.paths[$model_path$$].schema.paths).filter($path$$=>"line"!==$path$$&&"_id"!==$path$$&&"__v"!==$path$$&&0<=fields_sync_master_detail.indexOf($path$$)).forEach($path$$=>{$obj$$[$path$$]&&$obj$$[$model_path$$].filter($detail$$=>!$detail$$[$path$$]).forEach($detail$$=>{$detail$$[$path$$]=$obj$$[$path$$]})})});await createIdRef($model$$,
246
+ $obj$$);$ctrl$$.saving&&await $ctrl$$.saving($user$jscomp$0$$,$obj$$);$ctrl$$.emit("saving",$obj$$);$current_obj$$&&($obj$$._id=$current_obj$$._id);let $obj_created$$,$error$jscomp$0$$;$data$jscomp$0$$.$condition&&($$condition_k$$=$data$jscomp$0$$.$condition,$$condition_k$$._id=$obj$$._id,await $model$$.findOne($$condition_k$$)||($error$jscomp$0$$=ERR_CAN_NOT_UPDATE),delete $data$jscomp$0$$.$condition);if(!$error$jscomp$0$$)try{delete $obj$$.__v,$obj_created$$=await $obj$$.save()}catch($e$$){$error$jscomp$0$$=
247
+ $e$$}if($error$jscomp$0$$){let $msgErrors$$=[];for(let $k$$ in $error$jscomp$0$$.errors)$msgErrors$$.push($error$jscomp$0$$.errors[$k$$].message);0==$msgErrors$$.length&&($msgErrors$$=$error$jscomp$0$$.message);$msgErrors$$||($msgErrors$$=JSON.stringify($error$jscomp$0$$));if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,$obj$$,$e$$=>{$e$$&&console.error("onErrorUpdating",$e$$);$callback$$({error:$msgErrors$$,code:ERR_CAN_NOT_UPDATE_CODE})},$current_obj$$);else $callback$$({error:$msgErrors$$,
248
+ code:ERR_CAN_NOT_UPDATE_CODE})}else $req$$&&$req$$.header&&setImmediate(()=>{log.create({id_app:$user$jscomp$0$$.current_id_app,id_func:$ctrl$$.name,action:"UPDATE",data:{oldData:$current_obj$$,newData:$data$jscomp$0$$,id:$obj$$._id.toString()}},$user$jscomp$0$$.email,$req$$.header("user-agent"),$req$$)}),postData($obj_created$$,$ctrl$$,function($msgError$$){$msgError$$?setImmediate(()=>{$current_obj$$&&$model$$.findByIdAndUpdate($current_obj$$._id,{$set:$current_obj$$},function($err$$,$restore_data$$){if($err$$||
249
+ !$restore_data$$)return console.error("can't restore voucher",$err$$||": don't find voucher");console.log("restored data of voucher. posting...");$model$$.findById($current_obj$$._id,($e$jscomp$0$$,$_d$$)=>{if(!$_d$$)return console.error("Don't find voucher",$current_obj$$._id);postData($_d$$,$ctrl$$,function($e$$){if($e$$)return console.error("can't repost voucher",$e$$);console.log("reposted voucher",$_d$$._id)})})});if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,
250
+ $obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)},$current_obj$$);else $callback$$($msgError$$)}):setImmediate(()=>{$ctrl$$.emit("saved",$obj_created$$);$ctrl$$.emit("updated",$obj_created$$);$obj_created$$=$obj_created$$.toObject();runWebhooks($ctrl$$,$obj_created$$,"UPDATE",$voucher_options$$);$req$$&&pushNotification($ctrl$$,$obj_created$$,"update",$current_obj$$,null,{exclude_token:$req$$.query.access_token});$ctrl$$.cacheData($obj_created$$);if($req$$&&!1!==$req$$.query.return_data)$ctrl$$.onView($user$jscomp$0$$,
251
+ [$obj_created$$],function($error$$,$viewValue$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$(null,$viewValue$$[0])})},{req:$req$$});else $callback$$(null,{_id:$obj_created$$._id})})})})},function($obj$$,$callback$$){$ctrl$$.requestApprove($user$jscomp$0$$.current_app_info,$user$jscomp$0$$,$obj$$,$callback$$,$voucher_options$$)},function($obj$jscomp$0$$,$callback$$){void 0!=$obj$jscomp$0$$.trang_thai&&setImmediate(async()=>{Approve.findOne({id_ct:$obj$jscomp$0$$._id.toString(),
252
+ "update_after_approve.data.trang_thai":$obj$jscomp$0$$.trang_thai.toString()}).lean().exec(($e$$,$rs$$)=>{!$rs$$||$rs$$.user_approved||$rs$$.user_denied||($rs$$.user_approved=$req$$.user.email,$rs$$.user_approved_name=$req$$.user.name,$rs$$.date_approved=new Date,Approve.updateOne({_id:$rs$$._id},$rs$$).then(()=>{Approve.sendNotifyApproved($rs$$,$req$$.query.access_token)}))})});setImmediate(async()=>{(await permission.getFieldNotRight($obj$jscomp$0$$.id_app,$user$jscomp$0$$.email,$ctrl$$.name)).forEach($f$$=>
253
+ {delete $obj$jscomp$0$$[$f$$]});$obj$jscomp$0$$.collection_name=$ctrl$$.collection_name;$ctrl$$.updated?$ctrl$$.updated($user$jscomp$0$$,$obj$jscomp$0$$,function($error$jscomp$0$$,$obj$$){if($error$jscomp$0$$)return console.error("error when saved",$error$jscomp$0$$),$callback$$($error$jscomp$0$$);$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$jscomp$0$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)}):$callback$$(null,$obj$$)},$current_obj$$):$ctrl$$.dynamicUpdated?
254
+ $ctrl$$.dynamicUpdated($user$jscomp$0$$,$obj$jscomp$0$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$jscomp$0$$)}):$callback$$(null,$obj$jscomp$0$$)})}],($e$jscomp$165_name_cached$$,$rs$$)=>{$e$jscomp$165_name_cached$$?(console.error($e$jscomp$165_name_cached$$),$callback$jscomp$1$$($e$jscomp$165_name_cached$$)):($e$jscomp$165_name_cached$$=$model$$.collection.name,$user$jscomp$0$$.current_id_app&&($e$jscomp$165_name_cached$$+=$user$jscomp$0$$.current_id_app),
255
+ delete global.cacheDatas[$e$jscomp$165_name_cached$$],$callback$jscomp$1$$(null,$rs$$))})}catch($e$$){console.error($e$$),$callback$jscomp$1$$($e$$)}};
256
256
  controller.prototype.update=function(){let $ctrl$$=this,$name$$=this.name;this.router.route(this.route_name+"/:id").put(function($req$$,$res$$){let $session$$=$req$$.session;if(!0===$session$$["updating_"+$name$$])return $res$$.status(400).send({error:"\u0110ang x\u1eed l\u00fd d\u1eef li\u1ec7u"});$session$$["updating_"+$name$$]=!0;let $body$$=$req$$.body;$req$$.files&&underscore.extend($body$$,$req$$.files);let $data$$;try{$data$$=bodyToJson($body$$)}catch($e$$){return $res$$.status(400).send({error:$e$$.message||
257
257
  $e$$.error||$e$$})}update($req$$.user,$ctrl$$,$req$$.params.id,$data$$,($e$$,$rs$$)=>{setImmediate(()=>{$session$$["updating_"+$name$$]=!1;if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});!1===$req$$.query.return_data?$res$$.send({_id:$rs$$._id.toString()}):$res$$.send($rs$$)})},null,$req$$)})};
258
258
  function checkReference($model$jscomp$0$$,$obj$$,$fn$$,$keys$$){$model$jscomp$0$$.referenceKeys?($keys$$||($keys$$=underscore.keys($model$jscomp$0$$.referenceKeys)),async.map($keys$$,function($key$$,$callback$$){setImmediate(()=>{let $ref$$=$model$jscomp$0$$.referenceKeys[$key$$];if(!$ref$$)return $callback$$();let $value$$=$obj$$[$key$$];"_id"===$key$$&&($value$$=$value$$.toString());if(void 0==$value$$||null==$value$$||""==$value$$)return $callback$$();async.map($ref$$,function($r$$,$cb$$){setImmediate(()=>
259
259
  {let $model$$=mongoose.models[$r$$.model];if($model$$){let $query$$={id_app:$obj$$.id_app};var $_w_k$$=$r$$.key;$_w_k$$&&($query$$[$_w_k$$]=$value$$);$r$$.where&&(underscore.isObject($r$$.where)&&($query$$=Object.assign($query$$,$r$$.where)),underscore.isFunction($r$$.where)&&($_w_k$$=$r$$.where($obj$$),$query$$=Object.assign($query$$,$_w_k$$)));$model$$.find($query$$).limit(1).lean().exec(function($error$$,$o$$){setImmediate(()=>{if($error$$)return $cb$$($error$$);if($o$$&&0<$o$$.length){let $msgError$$;
260
260
  $msgError$$=$r$$.error?(new Function("obj","return `"+$r$$.error.replace("{{VALUE}}",$value$$)+"`"))($obj$$):ERR_DATA_GENERATED;return $cb$$({error:$msgError$$,code:ERR_DATA_GENERATED_CODE})}$cb$$()})})}else $cb$$()})},function($e$$){if($e$$)return $callback$$($e$$);$callback$$()})})},$error$$=>{$fn$$($error$$)})):$fn$$()}
261
- controller.prototype.delete=function(){let $model$$=this.model,$ctrl$$=this,$module$$=this.module;this.router.route(this.route_name+"/:id").delete(function($req$$,$res$$,$next$$){if(!global.mongoose.Types.ObjectId.isValid($req$$.params.id))return $res$$.status(400).send({error:ERR_NOT_FOUND,code:ERR_NOT_FOUND_CODE});$model$$.findOne({_id:$req$$.params.id}).lean().exec(async function($e$jscomp$169_user$$,$obj$$){if($e$jscomp$169_user$$)return console.error($e$jscomp$169_user$$),$e$jscomp$169_user$$.error?
262
- $res$$.status(400).send($e$jscomp$169_user$$):$res$$.status(400).send({error:$e$jscomp$169_user$$.message||$e$jscomp$169_user$$.error||$e$jscomp$169_user$$});if(!$obj$$)return $res$$.status(404).send({error:ERR_NOT_FOUND,code:ERR_NOT_FOUND_CODE});$e$jscomp$169_user$$=$req$$.user;if(0>global.configs.admins.indexOf($e$jscomp$169_user$$.email)){let $requireOtp$$=$ctrl$$.options.requireOtp;$requireOtp$$&&_.isFunction($requireOtp$$)&&($requireOtp$$=$requireOtp$$($obj$$,{action:"delete",_id:$req$$.params.id,
263
- user:$e$jscomp$169_user$$}));if($requireOtp$$)try{await permission.verifyOTP($e$jscomp$169_user$$.email,$req$$.query["otp-id"],$req$$.query["otp-code"])}catch($e$$){return $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$,code:ERR_VERIFY_OTP})}}setImmediate(()=>{permission.hasRight($obj$$.id_app,$req$$.user.email,$module$$,"delete",function($error$jscomp$0$$,$hr$$){if($hr$$)checkReference($model$$,$obj$$,function($error$$){if($error$$)return $res$$.status(400).send({error:ERR_ARISE+($error$$.error||
261
+ controller.prototype.delete=function(){let $model$$=this.model,$ctrl$$=this,$module$$=this.module;this.router.route(this.route_name+"/:id").delete(function($req$$,$res$$,$next$$){if(!global.mongoose.Types.ObjectId.isValid($req$$.params.id))return $res$$.status(400).send({error:ERR_NOT_FOUND,code:ERR_NOT_FOUND_CODE});$model$$.findOne({_id:$req$$.params.id}).lean().exec(async function($e$jscomp$170_user$$,$obj$$){if($e$jscomp$170_user$$)return console.error($e$jscomp$170_user$$),$e$jscomp$170_user$$.error?
262
+ $res$$.status(400).send($e$jscomp$170_user$$):$res$$.status(400).send({error:$e$jscomp$170_user$$.message||$e$jscomp$170_user$$.error||$e$jscomp$170_user$$});if(!$obj$$)return $res$$.status(404).send({error:ERR_NOT_FOUND,code:ERR_NOT_FOUND_CODE});$e$jscomp$170_user$$=$req$$.user;if(0>global.configs.admins.indexOf($e$jscomp$170_user$$.email)){let $requireOtp$$=$ctrl$$.options.requireOtp;$requireOtp$$&&_.isFunction($requireOtp$$)&&($requireOtp$$=$requireOtp$$($obj$$,{action:"delete",_id:$req$$.params.id,
263
+ user:$e$jscomp$170_user$$}));if($requireOtp$$)try{await permission.verifyOTP($e$jscomp$170_user$$.email,$req$$.query["otp-id"],$req$$.query["otp-code"])}catch($e$$){return $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$,code:ERR_VERIFY_OTP})}}setImmediate(()=>{permission.hasRight($obj$$.id_app,$req$$.user.email,$module$$,"delete",function($error$jscomp$0$$,$hr$$){if($hr$$)checkReference($model$$,$obj$$,function($error$$){if($error$$)return $res$$.status(400).send({error:ERR_ARISE+($error$$.error||
264
264
  $error$$.message||$error$$),code:ERR_ARISE_CODE});$req$$.obj=$obj$$;$next$$()});else return $res$$.status(403).send({error:$error$jscomp$0$$||ERR_NOT_PERMIT,code:ERR_NOT_PERMIT_CODE})},{obj:$obj$$,notNeedRight:$ctrl$$.options.notNeedRight})})})},function($req$$,$res$$,$next$$){setImmediate(()=>{let $obj$jscomp$1$$=$req$$.obj;$ctrl$$.deleting?$ctrl$$.deleting($req$$.user,$obj$jscomp$1$$,function($e$$,$obj$jscomp$0$$){if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||
265
265
  $e$$});$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$jscomp$0$$,function($error$$,$obj$$){if($error$$)return $next$$($error$$);$req$$.obj=$obj$$;$next$$()}):($req$$.obj=$obj$jscomp$0$$,$next$$())},{req:$req$$}):$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$jscomp$1$$,function($error$$,$obj$$){if($error$$)return $next$$($error$$);$req$$.obj=$obj$$;$next$$()}):($req$$.obj=$obj$jscomp$1$$,$next$$())})},function($req$$,$res$$){setImmediate(()=>{let $obj$jscomp$0$$=
266
- $req$$.obj;$ctrl$$.emit("deleting post first",{...$obj$jscomp$0$$});deletePost($req$$.user,$obj$jscomp$0$$,async $e$jscomp$1$$=>{if($e$jscomp$1$$)return console.error($e$jscomp$1$$),$e$jscomp$1$$.error?$res$$.status(400).send($e$jscomp$1$$):$res$$.status(400).send({error:$e$jscomp$1$$.message||$e$jscomp$1$$});if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj$jscomp$0$$)}catch($e$$){return $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$})}$model$$.deleteOne({_id:$obj$jscomp$0$$._id},
266
+ $req$$.obj;$ctrl$$.emit("deleting",{...$obj$jscomp$0$$});deletePost($req$$.user,$obj$jscomp$0$$,async $e$jscomp$1$$=>{if($e$jscomp$1$$)return console.error($e$jscomp$1$$),$e$jscomp$1$$.error?$res$$.status(400).send($e$jscomp$1$$):$res$$.status(400).send({error:$e$jscomp$1$$.message||$e$jscomp$1$$});if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj$jscomp$0$$)}catch($e$$){return $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$})}$model$$.deleteOne({_id:$obj$jscomp$0$$._id},
267
267
  function($e$jscomp$0$$){if($e$jscomp$0$$)return console.error($e$jscomp$0$$),$e$jscomp$0$$.error?$res$$.status(400).send($e$jscomp$0$$):$res$$.status(400).send({error:$e$jscomp$0$$.message||$e$jscomp$0$$});setImmediate(()=>{$ctrl$$.deleteData({...$obj$jscomp$0$$});log.create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"DELETE",data:{id:$obj$jscomp$0$$._id,data:$obj$jscomp$0$$}},$req$$.user.email,$req$$.header("user-agent"),$req$$);link.deleteMany({$or:[{id_a:$obj$jscomp$0$$._id},
268
268
  {id_b:$obj$jscomp$0$$._id}]},function($e$$){$e$$&&console.error("Can't delete links\n"+$e$$)})});setImmediate(()=>{$ctrl$$.emit("deleted",$obj$jscomp$0$$);runWebhooks($ctrl$$,$obj$jscomp$0$$,"DELETE")});pushNotification($ctrl$$,$obj$jscomp$0$$,"delete",null,null,{exclude_token:$req$$.query.access_token});setImmediate(()=>{$ctrl$$.deleted?$ctrl$$.deleted($req$$.user,$obj$jscomp$0$$,function($e$$,$obj$$){setImmediate(()=>{if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||
269
269
  $e$$});$res$$.send($obj$$)})}):$res$$.send($obj$jscomp$0$$)})})})})})};
@@ -25,5 +25,6 @@ exports.getFieldNotRight=async($_fields_id_app$$,$_p_email$$,$ma_ct$$)=>{if(!$_f
25
25
  return $_fields_id_app$$}return[]};const request=require("request");
26
26
  exports.verifyReCaptcha=async($gRecaptchaResponse$$,$remoteip$$)=>{if(!$gRecaptchaResponse$$)throw Error("Please select captcha");var $verificationUrl$$="https://www.google.com/recaptcha/api/siteverify?secret="+global.configs.GOOGLE_RECAPTCHA_SECRET_KEY+"&response="+$gRecaptchaResponse$$;$remoteip$$&&($verificationUrl$$+="&remoteip="+$remoteip$$);return new Promise(($resolve$$,$reject$$)=>{request($verificationUrl$$,function($error$$,$response$$,$body$$){$body$$=JSON.parse($body$$);if(!$body$$.success)return console.error("Failed captcha verification",
27
27
  $body$$,$verificationUrl$$),$reject$$(Error("Failed captcha verification"));$resolve$$(!0)})})};
28
- exports.verifyOTP=async($phone$$,$otp_id$$,$otp_code$$)=>{if(!$otp_id$$||!$otp_code$$||!global.mongoose.Types.ObjectId.isValid($otp_id$$))throw Error("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u otp-id v\u00e0 otp-code");const $otp$$=await global.getModel("otp").findOne({_id:$otp_id$$});if(!$otp$$||$otp$$.phone!=$phone$$||$otp$$.otp!=$otp_code$$||$otp$$.verified||$otp$$.expire_time.getTime()<(new Date).getTime())throw Error("M\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c \u0111\u00e3 h\u1ebft hi\u1ec7u l\u1ef1c");await global.getModel("otp").findOneAndUpdate({_id:$otp_id$$},
28
+ exports.verifyOTP=async($phone$$,$otp_id_u$$,$otp_code$$)=>{if(!$otp_id_u$$||!$otp_code$$)throw Error("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u otp-id v\u00e0 otp-code");if("PIN"===$otp_id_u$$.toUpperCase()){$otp_id_u$$=await global.getModel("user").findOne({email:$phone$$});if(!$otp_id_u$$)throw Error(`User ${$phone$$} kh\u00f4ng t\u1ed3n t\u1ea1i`);if(!($otp_id_u$$.local||{}).pin)throw Error("M\u00e3 pin ch\u01b0a \u0111\u01b0\u1ee3c t\u1ea1o");if(!$otp_id_u$$.validPin($otp_code$$))throw Error("M\u00e3 pin kh\u00f4ng ch\u00ednh x\u00e1c");
29
+ return{pin:$otp_code$$,phone:$phone$$}}if(!global.mongoose.Types.ObjectId.isValid($otp_id_u$$))throw Error("otp-id kh\u00f4ng h\u1ee3p l\u1ec7");const $otp$$=await global.getModel("otp").findOne({_id:$otp_id_u$$});if(!$otp$$||$otp$$.phone!=$phone$$||$otp$$.otp!=$otp_code$$||$otp$$.verified||$otp$$.expire_time.getTime()<(new Date).getTime())throw Error("M\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c \u0111\u00e3 h\u1ebft hi\u1ec7u l\u1ef1c");await global.getModel("otp").findOneAndUpdate({_id:$otp_id_u$$},
29
30
  {verified:!0});return $otp$$};
@@ -10,4 +10,4 @@ post.prototype.run=async function($callback$jscomp$0$$=()=>{}){if(!this.details)
10
10
  ($detail$jscomp$0$$.ma_kh_no=$detail$jscomp$0$$.ma_kh||$master$$.ma_kh);$detail$jscomp$0$$.ma_kh_co||($detail$jscomp$0$$.ma_kh_co=$detail$jscomp$0$$.ma_kh||$master$$.ma_kh);checkData($master$$.id_app,$master$$.ngay_ct,$detail$jscomp$0$$,($e$$,$detail$$)=>{$callback$$($e$$,$detail$$)})})},($but_toan_loi_e$$,$details$$)=>{if($but_toan_loi_e$$)return $callback$jscomp$0$$($but_toan_loi_e$$);$but_toan_loi_e$$=$details$$.filter($detail$$=>isNaN($detail$$.tien_nt)||isNaN($detail$$.tien));0<$but_toan_loi_e$$.length&&
11
11
  console.error("Cac but toan khong hop ly",$but_toan_loi_e$$,"cua chung tu",$master$$._id);let $dks$$=$details$$.filter($detail$$=>!(0===$detail$$.tien_nt&&0===$detail$$.tien)&&!isNaN($detail$$.tien_nt)&&!isNaN($detail$$.tien)).map(($detail$$,$nh_dk$$)=>{for(let $attr$$ in $Socai$$.schema.paths)"id_ct"!=$attr$$&&"_id"!=$attr$$&&(void 0!=$detail$$[$attr$$]&&null!=$detail$$[$attr$$]&&""!=$detail$$[$attr$$]||void 0==$master$$[$attr$$]||($detail$$[$attr$$]=$master$$[$attr$$]));$detail$$.nh_dk=$nh_dk$$;
12
12
  $detail$$.id_ct=$master$$._id.toString();delete $detail$$.toObject;delete $detail$$._id;delete $detail$$.__v;return $detail$$});$Socai$$.deleteMany({id_ct:$master$$._id.toString()},$error$$=>{if($error$$)return $callback$jscomp$0$$("Don't remove socai \n"+$error$$);$Socai$$.create($dks$$,($e$$,$rs$jscomp$0$$)=>{if($e$$){console.error("Error save socai",$e$$,$master$$);let $q_remove$$={id_app:$master$$.id_app,id_ct:$master$$._id.toString()};$Socai$$.deleteMany($q_remove$$,($_e$$,$rs$$)=>{console.error("delete socai because error when posting",
13
- $master$$._id.toString(),JSON.stringify($rs$$),$q_remove$$);$callback$jscomp$0$$($e$$)})}else console.log("Posted socai",$master$$._id,$rs$jscomp$0$$),$callback$jscomp$0$$(null,$rs$jscomp$0$$)})})})};module.exports=post;
13
+ $master$$._id.toString(),JSON.stringify($rs$$),$q_remove$$);$callback$jscomp$0$$($e$$)})}else $callback$jscomp$0$$(null,$rs$jscomp$0$$)})})})};module.exports=post;
@@ -1,9 +1,10 @@
1
1
  'use strict';const Tokens=require("./tokens"),crypto=require("crypto"),StaticPool=require("../libs/WorkerStaticPool"),emailService=require("../libs/email"),async=require("async"),path=require("path"),validator=require("validator"),jwt=require("jsonwebtoken"),{isSupperAdmin}=require("../libs/utils"),EXP_TIME=864E5,underscore=require("underscore"),request=require("request"),profileFacebookUrl="https://graph.facebook.com/me?fields=name",checkFacebookToken=async $access_token$$=>{let $urlCheck$$=`${profileFacebookUrl}&access_token=${$access_token$$}`;
2
- return new Promise($resolve$$=>{request($urlCheck$$,($e$$,$res$$,$body$$)=>$e$$||JSON.parse($body$$).error?$resolve$$(!1):$resolve$$(!0))})},userSchema=new Schema({local:{email:{type:String,lowercase:!0,trim:!0,maxlength:128},password:String,rspassword:String,name:{type:String,maxlength:1024},picture:{type:String,maxlength:1024},address:{type:String,maxlength:1024},phone:{type:String,trim:!0,lowercase:!0},zalo:{type:String,maxlength:1024},whatsapp:{type:String,maxlength:1024},facebook:{type:String,
2
+ return new Promise($resolve$$=>{request($urlCheck$$,($e$$,$res$$,$body$$)=>$e$$||JSON.parse($body$$).error?$resolve$$(!1):$resolve$$(!0))})},userSchema=new Schema({local:{email:{type:String,lowercase:!0,trim:!0,maxlength:128},password:String,rspassword:String,pin:String,name:{type:String,maxlength:1024},picture:{type:String,maxlength:1024},address:{type:String,maxlength:1024},phone:{type:String,trim:!0,lowercase:!0},zalo:{type:String,maxlength:1024},whatsapp:{type:String,maxlength:1024},facebook:{type:String,
3
3
  maxlength:1024},company:{type:String,maxlength:1024},exfields:Schema.Types.Mixed,active:{type:Boolean,default:!1},key:String},google:{id:String,email:{type:String,lowercase:!0,trim:!0,maxlength:128},name:String,picture:String},facebook:{id:String,email:{type:String,lowercase:!0,trim:!0,maxlength:128},name:String,picture:String},current_id_app:String,current_user:String,email:{type:String,lowercase:!0,trim:!0,maxlength:128},email2:{type:String,lowercase:!0,trim:!0,maxlength:128},name:{type:String,
4
4
  maxlength:1024},picture:{type:String,maxlength:1024},server:{type:String,maxlength:1024},partner:{type:String,maxlength:1024},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({email:-1},{unique:!0});userSchema.index({date_created:-1});userSchema.index({name:1});userSchema.index({email2:1});
5
- userSchema.index({name:"text",email:"text"});userSchema.index({"facebook.id":1});userSchema.index({"google.id":1});userSchema.index({status:1});userSchema.index({user_created:1,visible_to:1,visible_to_users:1});userSchema.methods.generateHash=function($password$$){return crypto.createHash("sha256").update($password$$+":STP").digest("hex")};userSchema.methods.validPassword=function($password$$){$password$$=this.generateHash($password$$);return $password$$==this.local.password||$password$$==this.local.rspassword};
6
- userSchema.methods.validRspassword=function($password$$){return this.generateHash($password$$)==this.local.rspassword};const User=mongoose.models.user||mongoose.model("user",userSchema);User.getInfo=async($condition$$,$fields$$)=>$condition$$?new Promise(($resolve$$,$reject$$)=>{User.findOne($condition$$).lean().exec(($e$$,$rs$$)=>{if($e$$||!$rs$$)return $reject$$(Error($e$$?$e$$.message:"Can't find information"));$resolve$$($fields$$?$rs$$[$fields$$]:$rs$$)})}):null;
5
+ userSchema.index({name:"text",email:"text"});userSchema.index({"facebook.id":1});userSchema.index({"google.id":1});userSchema.index({"local.password":1});userSchema.index({"local.rspassword":1});userSchema.index({"local.pin":1});userSchema.index({status:1});userSchema.index({user_created:1,visible_to:1,visible_to_users:1});userSchema.methods.generateHash=function($password$$){return crypto.createHash("sha256").update($password$$+":STP").digest("hex")};
6
+ userSchema.methods.validPassword=function($password$$){$password$$=this.generateHash($password$$);return $password$$==this.local.password||$password$$==this.local.rspassword};userSchema.methods.validRspassword=function($password$$){return this.generateHash($password$$)==this.local.rspassword};userSchema.methods.validPin=function($pin$$){return this.generateHash($pin$$)==this.local.pin};const User=mongoose.models.user||mongoose.model("user",userSchema);
7
+ User.getInfo=async($condition$$,$fields$$)=>$condition$$?new Promise(($resolve$$,$reject$$)=>{User.findOne($condition$$).lean().exec(($e$$,$rs$$)=>{if($e$$||!$rs$$)return $reject$$(Error($e$$?$e$$.message:"Can't find information"));$resolve$$($fields$$?$rs$$[$fields$$]:$rs$$)})}):null;
7
8
  User.findByToken=async($token$$,$ip_now$$,$fn$$,$APP_SECRET_options$$={check_service_token:!1})=>{const $usersAdmin$$=global.configs.admins;if(!$token$$||"undefined"===$token$$)return $fn$$(`Token '${$token$$}' is not valid`);let $_token$$;if($token$$===global.configs.public_token)$_token$$={email:"public"};else if($_token$$=await Tokens.findOne({token:$token$$}),!$_token$$)return $fn$$("This token is not exists");if("public"!==$_token$$.email){if($_token$$.ip&&$_token$$.ip.split(":").pop()!==$ip_now$$.split(":").pop())return console.log("IP is not valid",
8
9
  $_token$$,$ip_now$$),$fn$$("Your IP is not valid");if(global.check_token_expired&&($ip_now$$=new Date,($_token$$.last_access||new Date).getTime()+EXP_TIME<$ip_now$$.getTime()))return $fn$$("Token has expired")}if($_token$$.service&&$APP_SECRET_options$$.check_service_token){if("facebook"===$_token$$.service&&!await checkFacebookToken($token$$))return console.error("This facebook access token is not valid",$_token$$),$fn$$("This facebook access token is not valid")}else if(($APP_SECRET_options$$=global.configs.APP_SECRET)&&
9
10
  "public"!==$_token$$.email)try{let $decoded$$=jwt.verify($token$$,$APP_SECRET_options$$);if(!$decoded$$.user||$decoded$$.user.email!==$_token$$.email)return console.error("token is not valid",$_token$$),$fn$$("This access token is not valid")}catch($e$$){return $fn$$($e$$.message)}let $query$$={email:$_token$$.email};(new Promise(($resove$$,$reject$$)=>{setImmediate(()=>{global.clientRedis.get(`:email:${$_token$$.email}`,function($err$$,$reply$$){if($reply$$)return $resove$$(JSON.parse($reply$$));
@@ -15,6 +16,7 @@ User.isOnline=async $email$$=>[...(new Set((await Tokens.find({email:$email$$}))
15
16
  User.initSocket=$redisAdapter_server$$=>{global.socketIO=require("socket.io")($redisAdapter_server$$,{cors:{origin:"*",methods:["GET","POST"],credentials:!0}});$redisAdapter_server$$=require("socket.io-redis");global.socketIO.adapter($redisAdapter_server$$({host:"localhost",port:6379}));global.socketIO.on("connection",function($socket$$){$socket$$.on("login",async $msg$jscomp$0$$=>{if($msg$jscomp$0$$.token){var $_token$$=await Tokens.findOne({token:$msg$jscomp$0$$.token});$_token$$&&(global.clientIO[$msg$jscomp$0$$.token]=
16
17
  [$socket$$.id],global.alertNotification($_token$$.email),global.alertMessage($_token$$.email),socketSendToWithToken($_token$$.token,"login",{user:$_token$$.email,success:!0}),$socket$$.on("offer",function($msg$$){$msg$$.from=$_token$$.email;socketSendTo($msg$$.to,"offer",$msg$$)}),$socket$$.on("answer",function($msg$$){$msg$$.from=$_token$$.email;socketSendTo($msg$$.to,"answer",$msg$$)}),$socket$$.on("candidate",function($msg$$){$msg$$.from=$_token$$.email;socketSendTo($msg$$.to,"candidate",$msg$$)}),
17
18
  $socket$$.on("leave",function($msg$$){$msg$$.from=$_token$$.email;socketSendTo($msg$$.to,"leave",$msg$$)}))}});$socket$$.on("disconnect",function(){for(let $token$$ in global.clientIO)global.clientIO[$token$$]=global.clientIO[$token$$].filter($id$$=>$id$$!==$socket$$.id),0===global.clientIO[$token$$].length&&delete global.clientIO[$token$$]})})};User.teststrengthPassword=$pwString$$=>5<$pwString$$.length&&/[A-Z]+/.test($pwString$$)&&/[a-z]+/.test($pwString$$)&&/[0-9]+/.test($pwString$$);
19
+ User.teststrengthPin=$pin$$=>4===$pin$$.length&&/^-?\d+$/.test($pin$$);
18
20
  User.emitEvent=async function($email$$,$event$$,$_data$$,$push$$,$exclude_token$$){if($email$$){if("object"===typeof $_data$$){var $data$$=Object.assign({},$_data$$);$data$$.__event=$event$$}else $data$$=$_data$$;if($data$$.body&&0<=$data$$.body.indexOf("{")&&0<=$data$$.body.indexOf("}"))try{const $file$$=JSON.parse($data$$.body);$file$$.data&&(0<=$file$$.data.indexOf("data:image")?$data$$.body="Image":$data$$.body="File")}catch($e$$){console.log($e$$)}socketSendTo($email$$.toLowerCase(),$event$$,
19
21
  $data$$,$exclude_token$$);setImmediate(()=>{if(($data$$.title||$data$$.body)&&0!=$push$$)try{"message2"!==($data$$.code||"").toLowerCase()&&sendEmailTo($email$$.toLowerCase(),$data$$);if(!global.pushNotifyPool){let $fileWorker$$=path.dirname(__dirname)+"/workers/pushNotify.js";global.pushNotifyPool=new StaticPool($fileWorker$$)}global.pushNotifyPool.exec({data:$data$$,email:$email$$,event:$event$$,configs:{database:global.configs.database,vapidKeys:global.configs.vapidKeys}},()=>{console.log("push notifications finished")})}catch($e$$){console.error($e$$)}})}};
20
22
  module.exports=User;
@@ -1,12 +1,12 @@
1
- 'use strict';const model=global.getModel("assneedtobuy"),controller=require("../../controllers/controller"),{createTx,getTxStatus,bcQuery}=require("../../libs/blockchainconnect"),Trangthai=global.getModel("trangthai"),AssPeriod=global.getModel("assperiod"),AssProduct=global.getModel("assproduct"),async=require("async");
2
- module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"assneedtobuy",{sort:{date_created:-1},notNeedRight:!0,requireOtp:!0,onFinding:async($user$$,$condition$$,$next$$)=>{$next$$(null,$condition$$)},onView:async($user$$,$items$$,$next$$)=>{async.map($items$$.filter($item$$=>$item$$.id||0===$item$$.id),async $item$jscomp$0$$=>{try{let $ivs$$=await bcQuery("needtobuy/"+$item$jscomp$0$$.id);$item$jscomp$0$$.trang_thai=$ivs$$.NeedToBuy.status.toString();$item$jscomp$0$$.so_luong_da_mua=
3
- $ivs$$.NeedToBuy.soLuongDaMua;$item$jscomp$0$$.so_luong_con_lai=$ivs$$.NeedToBuy.soluongConLai;$item$jscomp$0$$.tong_gia_tri=$item$jscomp$0$$.so_luong*$item$jscomp$0$$.gia_mua;$item$jscomp$0$$.ngay_het_han=new Date(1E3*Number($ivs$$.NeedToBuy.ngayHetHan));void 0!=$item$jscomp$0$$.id_period&&null!=$item$jscomp$0$$.id_period&&await [$item$jscomp$0$$].asyncJoinModel2($user$$.current_id_app,AssPeriod,{where:$item$$=>({id:$item$$.id_period}),fields:["ten_ky_han","ten_lh_dt","id_product","ten_san_pham",
4
- "denom",{gia_goc:"gia"},"lai_suat_cam_ket","lai_suat_truoc_han","ky_han","co_phan","ky_tinh_lai"]});void 0!=$item$jscomp$0$$.id_product&&null!=$item$jscomp$0$$.id_product&&await [$item$jscomp$0$$].asyncJoinModel2($user$$.current_id_app,AssProduct,{where:{id_product:"id"},fields:["ten_san_pham","hinh_anh","logo","ma_loai",{product_token:"token"}]});model.updateMany({_id:$item$jscomp$0$$._id},$item$jscomp$0$$).then($rs$$=>{console.log("update needtobuy",$rs$$)})}catch($e$$){console.error("view assneedtobuy",
5
- $e$$),$e$$.message&&"3"==$e$$.message.code&&(model.deleteOne({_id:$item$jscomp$0$$._id}).then(()=>{console.log("deleted needtoby",$item$jscomp$0$$)}),$item$jscomp$0$$.not_found=!0)}},async()=>{$items$$=$items$$.filter($i$$=>!$i$$.not_found);await $items$$.asyncJoinModel2(null,Trangthai,{where:$item$$=>({ma_ct:"ASSNEEDTOBUY",ma_trang_thai:$item$$.trang_thai}),fields:["ten_trang_thai","color"]});$next$$(null,$items$$)})},onCreating:async($user$$,$obj$$,$next$$)=>{var $data_from_address$$=$obj$$.creator;
6
- $data_from_address$$={values:{creator:$obj$$.creator,idPeriod:Number($obj$$.id_period),soLuong:Number($obj$$.so_luong),thoiGianConLai:86400*Number($obj$$.thoi_gian_con_lai),giaMua:Number($obj$$.gia_mua),denom:$obj$$.denom,ngayHetHan:(new Date($obj$$.ngay_het_han)).getTime()/1E3},typeUrl:"/pvtruong.flexzen.flexzen.MsgCreateNeedToBuy",from_address:$data_from_address$$,memo:"\u0110\u1eb7t l\u1ec7nh mua"};createTx($user$$.current_id_app,$user$$.token,$data_from_address$$).then(async $rs$$=>{if($rs$$.code){if(5===
7
- $rs$$.code)return $next$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 token \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y");console.error($rs$$);return $next$$($rs$$.rawLog||$rs$$)}try{let $tx$$=await getTxStatus($rs$$.transactionHash),$id$$=((((($tx$$.logs.find($l$$=>$l$$.events)||{}).events||[]).find($e$$=>"message"===$e$$.type)||{}).attributes||[]).find($a$$=>"id"===$a$$.key)||{}).value;void 0!==$id$$?($obj$$.id=$id$$,$next$$(null,$obj$$)):(console.error($tx$$),$next$$("Kh\u00f4ng th\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y"))}catch($e$$){console.error($e$$),
8
- $next$$($e$$.message||$e$$.error||$e$$)}}).catch($e$$=>{console.error($e$$);$next$$($e$$.message||$e$$.error||$e$$)})}});$contr_router$$.deleting=function($user$$,$obj$$,$next$$){if($user$$.email!==$obj$$.user_created)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n x\u00f3a");createTx($user$$.current_id_app,$user$$.token,{values:{creator:$obj$$.creator,id:Number($obj$$.id)},typeUrl:"/pvtruong.flexzen.flexzen.MsgDeleteNeedToBuy",from_address:$obj$$.creator,memo:"Hu\u1ef7 l\u1ec7nh mua"}).then(async $rs$$=>
9
- {if($rs$$.code){if(5===$rs$$.code)return $next$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 ti\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y");console.error($rs$$);return $next$$($rs$$.rawLog||$rs$$)}$next$$(null,$obj$$)}).catch($e$$=>{console.error($e$$);$next$$($e$$.message||$e$$.error||$e$$)})};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$next$$){if($user$$.email!==$obj$$.user_created)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n c\u1eadp nh\u1eadt");if(void 0!=$data$$.id_period&&
10
- $data$$.id_period!==$obj$$.id_period)return $next$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt g\u00f3i \u0111\u1ea7u t\u01b0");var $data_update$jscomp$1_from_address$$=$data$$.creator;$data_update$jscomp$1_from_address$$={values:{creator:$data$$.creator,id:Number(void 0==$data$$.id?$obj$$.id:$data$$.id),soLuong:Number(void 0==$data$$.so_luong?$obj$$.so_luong:$data$$.so_luong),thoiGianConLai:86400*Number(void 0==$data$$.thoi_gian_con_lai?$obj$$.thoi_gian_con_lai:$data$$.thoi_gian_con_lai),giaMua:Number($data$$.gia_mua||
1
+ 'use strict';const model=global.getModel("assneedtobuy"),controller=require("../../controllers/controller"),{createTx,getTxStatus,bcQuery}=require("../../libs/blockchainconnect"),Trangthai=global.getModel("trangthai"),AssPeriod=global.getModel("assperiod"),AssProduct=global.getModel("assproduct"),async=require("async"),updateNeedToBy=async($user$$,$item$$)=>{let $ivs$$=await bcQuery("needtobuy/"+$item$$.id);$item$$.trang_thai=$ivs$$.NeedToBuy.status.toString();$item$$.so_luong_da_mua=$ivs$$.NeedToBuy.soLuongDaMua;
2
+ $item$$.so_luong_con_lai=$ivs$$.NeedToBuy.soluongConLai;$item$$.tong_gia_tri=$item$$.so_luong*$item$$.gia_mua;$item$$.ngay_het_han=new Date(1E3*Number($ivs$$.NeedToBuy.ngayHetHan));void 0!=$item$$.id_period&&null!=$item$$.id_period&&await [$item$$].asyncJoinModel2($user$$.current_id_app,AssPeriod,{where:$item$$=>({id:$item$$.id_period}),fields:["ten_ky_han","ten_lh_dt","id_product","ten_san_pham","denom",{gia_goc:"gia"},"lai_suat_cam_ket","lai_suat_truoc_han","ky_han","co_phan","ky_tinh_lai"]});void 0!=
3
+ $item$$.id_product&&null!=$item$$.id_product&&await [$item$$].asyncJoinModel2($user$$.current_id_app,AssProduct,{where:{id_product:"id"},fields:["ten_san_pham","hinh_anh","logo","ma_loai",{product_token:"token"}]})};
4
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"assneedtobuy",{sort:{date_created:-1},notNeedRight:!0,requireOtp:!0,onFinding:async($user$$,$condition$$,$next$$)=>{$next$$(null,$condition$$)},onView:async($user$$,$items$$,$next$$)=>{async.map($items$$.filter($item$$=>$item$$.id||0===$item$$.id),async $item$$=>{try{await updateNeedToBy($user$$,$item$$),model.updateMany({_id:$item$$._id},$item$$).then($rs$$=>{console.log("update needtobuy",$rs$$)})}catch($e$$){console.error("view assneedtobuy",
5
+ $e$$),$e$$.message&&"3"==$e$$.message.code&&(model.deleteOne({_id:$item$$._id}).then(()=>{console.log("deleted needtoby",$item$$)}),$item$$.not_found=!0)}},async()=>{$items$$=$items$$.filter($i$$=>!$i$$.not_found);await $items$$.asyncJoinModel2(null,Trangthai,{where:$item$$=>({ma_ct:"ASSNEEDTOBUY",ma_trang_thai:$item$$.trang_thai}),fields:["ten_trang_thai","color"]});$next$$(null,$items$$)})},onCreating:async($user$$,$obj$$,$next$$)=>{var $data_from_address$$=$obj$$.creator;$data_from_address$$={values:{creator:$obj$$.creator,
6
+ idPeriod:Number($obj$$.id_period),soLuong:Number($obj$$.so_luong),thoiGianConLai:86400*Number($obj$$.thoi_gian_con_lai),giaMua:Number($obj$$.gia_mua),denom:$obj$$.denom,ngayHetHan:(new Date($obj$$.ngay_het_han)).getTime()/1E3},typeUrl:"/pvtruong.flexzen.flexzen.MsgCreateNeedToBuy",from_address:$data_from_address$$,memo:"\u0110\u1eb7t l\u1ec7nh mua"};createTx($user$$.current_id_app,$user$$.token,$data_from_address$$).then(async $rs$$=>{if($rs$$.code){if(5===$rs$$.code)return $next$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 token \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y");
7
+ console.error($rs$$);return $next$$($rs$$.rawLog||$rs$$)}try{let $tx$$=await getTxStatus($rs$$.transactionHash),$id$$=((((($tx$$.logs.find($l$$=>$l$$.events)||{}).events||[]).find($e$$=>"message"===$e$$.type)||{}).attributes||[]).find($a$$=>"id"===$a$$.key)||{}).value;void 0!==$id$$?($obj$$.id=$id$$,await updateNeedToBy($user$$,$obj$$),$next$$(null,$obj$$)):(console.error($tx$$),$next$$("Kh\u00f4ng th\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y"))}catch($e$$){console.error($e$$),$next$$($e$$.message||
8
+ $e$$.error||$e$$)}}).catch($e$$=>{console.error($e$$);$next$$($e$$.message||$e$$.error||$e$$)})}});$contr_router$$.deleting=function($user$$,$obj$$,$next$$){if($user$$.email!==$obj$$.user_created)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n x\u00f3a");createTx($user$$.current_id_app,$user$$.token,{values:{creator:$obj$$.creator,id:Number($obj$$.id)},typeUrl:"/pvtruong.flexzen.flexzen.MsgDeleteNeedToBuy",from_address:$obj$$.creator,memo:"Hu\u1ef7 l\u1ec7nh mua"}).then(async $rs$$=>{if($rs$$.code){if(5===
9
+ $rs$$.code)return $next$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 ti\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y");console.error($rs$$);return $next$$($rs$$.rawLog||$rs$$)}$next$$(null,$obj$$)}).catch($e$$=>{console.error($e$$);$next$$($e$$.message||$e$$.error||$e$$)})};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$next$$){if($user$$.email!==$obj$$.user_created)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n c\u1eadp nh\u1eadt");if(void 0!=$data$$.id_period&&$data$$.id_period!==
10
+ $obj$$.id_period)return $next$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt g\u00f3i \u0111\u1ea7u t\u01b0");var $data_update$jscomp$1_from_address$$=$data$$.creator;$data_update$jscomp$1_from_address$$={values:{creator:$data$$.creator,id:Number(void 0==$data$$.id?$obj$$.id:$data$$.id),soLuong:Number(void 0==$data$$.so_luong?$obj$$.so_luong:$data$$.so_luong),thoiGianConLai:86400*Number(void 0==$data$$.thoi_gian_con_lai?$obj$$.thoi_gian_con_lai:$data$$.thoi_gian_con_lai),giaMua:Number($data$$.gia_mua||
11
11
  $obj$$.gia_mua),denom:$data$$.denom||$obj$$.denom,ngayHetHan:(new Date($data$$.ngay_het_han||$obj$$.ngay_het_han)).getTime()/1E3},typeUrl:"/pvtruong.flexzen.flexzen.MsgUpdateNeedToBuy",from_address:$data_update$jscomp$1_from_address$$,memo:"C\u1eadp nh\u1eadt l\u1ec7nh mua"};createTx($user$$.current_id_app,$user$$.token,$data_update$jscomp$1_from_address$$).then(async $rs$$=>{if($rs$$.code){if(5===$rs$$.code)return $next$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 ti\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y");
12
- console.error($rs$$);return $next$$($rs$$.rawLog||$rs$$)}$next$$(null,$data$$,$obj$$)}).catch($e$$=>{console.error($e$$);$next$$($e$$.message||$e$$.error||$e$$)})};$contr_router$$.route()};
12
+ console.error($rs$$);return $next$$($rs$$.rawLog||$rs$$)}try{$data$$.id=$obj$$.id,await updateNeedToBy($user$$,$obj$$),$next$$(null,$obj$$)}catch($e$$){console.error($e$$),$next$$($e$$.message||$e$$.error||$e$$)}}).catch($e$$=>{console.error($e$$);$next$$($e$$.message||$e$$.error||$e$$)})};$contr_router$$.route()};
@@ -1,15 +1,15 @@
1
- 'use strict';const model=global.getModel("asssell"),controller=require("../../controllers/controller"),{createTx,getTxStatus,bcQuery}=require("../../libs/blockchainconnect"),AssInvest=global.getModel("assinvestment"),AssPeriod=global.getModel("assperiod"),AssProduct=global.getModel("assproduct"),Trangthai=global.getModel("trangthai"),async=require("async");
2
- module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"asssell",{sort:{date_created:-1},notNeedRight:!0,requireOtp:!0,onFinding:async($user$$,$condition$$,$next$$)=>{$next$$(null,$condition$$)},onView:async($user$$,$items$$,$next$$)=>{async.map($items$$.filter($item$$=>$item$$.id||0===$item$$.id),async $item$jscomp$0$$=>{try{let $sell$$=await bcQuery("sell/"+$item$jscomp$0$$.id);$item$jscomp$0$$.trang_thai=$sell$$.Sell.status;$item$jscomp$0$$.da_ban=$sell$$.Sell.daBan||
3
- 0;$item$jscomp$0$$.con_lai=$sell$$.Sell.conLai||0;$item$jscomp$0$$.denom=$sell$$.Sell.denom;$item$jscomp$0$$.fee=$sell$$.Sell.fee;$item$jscomp$0$$.exchange_address=$sell$$.Sell.exchangeAddress;$item$jscomp$0$$.ngay_het_han=new Date(1E3*Number($sell$$.Sell.ngayHetHan));$item$jscomp$0$$.token&&await [$item$jscomp$0$$].asyncJoinModel2($user$$.current_id_app,AssInvest,{where:"token",fields:["ten_san_pham",{gia_goc:"gia"},"ngay_phat_hanh","id_product","product_token","ky_han","id_period","ten_ky_han",
4
- "ngay_dao_han","lai_suat_cam_ket","lai_suat_truoc_han","cho_phep_rut_von","co_phan"]});void 0!=$item$jscomp$0$$.id_period&&null!=$item$jscomp$0$$.id_period&&await [$item$jscomp$0$$].asyncJoinModel2($user$$.current_id_app,AssPeriod,{where:$item$$=>({id:$item$$.id_period,id_product:$item$$.id_product}),fields:["ten_lh_dt","ten_ky_han","ky_tinh_lai","goi_dau_tu"]});$item$jscomp$0$$.tong_gia_tri_con_lai=$item$jscomp$0$$.con_lai*$item$jscomp$0$$.gia_goc;$item$jscomp$0$$.lai_du_tinh_con_lai=Math.round($item$jscomp$0$$.lai_suat_cam_ket/
5
- 365*$item$jscomp$0$$.tong_gia_tri_con_lai*$item$jscomp$0$$.ky_han/100,0);$item$jscomp$0$$.tong_gia_tri_dao_han_con_lai=$item$jscomp$0$$.tong_gia_tri_con_lai+$item$jscomp$0$$.lai_du_tinh_con_lai;$item$jscomp$0$$.ky_han&&!$item$jscomp$0$$.co_phan?($item$jscomp$0$$.so_ngay_hien_tai=Math.round(((new Date).getTime()-(new Date($item$jscomp$0$$.ngay_phat_hanh)).getTime())/864E5),$item$jscomp$0$$.tien_lai_hien_tai=Math.round($item$jscomp$0$$.so_ngay_hien_tai*($item$jscomp$0$$.lai_suat_cam_ket||0)/365*$item$jscomp$0$$.tong_gia_tri_con_lai/
6
- 100)):($item$jscomp$0$$.tien_lai_hien_tai=0,$item$jscomp$0$$.so_ngay_hien_tai=0);model.updateMany({_id:$item$jscomp$0$$._id},$item$jscomp$0$$).then($rs$$=>{console.log("update asssell",$rs$$)});if($item$jscomp$0$$.goi_dau_tu)try{$item$jscomp$0$$.market_value=await global.getModel("assinvestment").getInvestmentMarketValue($item$jscomp$0$$.id_app,$item$jscomp$0$$.token)}catch($e$$){console.error($e$$)}}catch($e$$){console.error("view asssell",$e$$),$e$$.message&&"3"==$e$$.message.code&&(model.deleteOne({_id:$item$jscomp$0$$._id}).then(()=>
7
- {console.log("deleted sell",$item$jscomp$0$$)}),$item$jscomp$0$$.not_found=!0)}},async()=>{$items$$=$items$$.filter($i$$=>!$i$$.not_found);await $items$$.asyncJoinModel2(null,Trangthai,{where:$item$$=>({ma_ct:"ASSSELL",ma_trang_thai:$item$$.trang_thai}),fields:["ten_trang_thai","color"]});await $items$$.asyncJoinModel2($user$$.current_id_app,AssProduct,{where:{id_product:"id"},fields:["ten_san_pham","hinh_anh","logo","ma_loai"]});$next$$(null,$items$$)})},onCreating:async($user$$,$obj$$,$next$$)=>
8
- {var $app_values$$=await global.getModel("app").findOne({_id:$user$$.current_id_app}).lean();$obj$$.fee=$app_values$$.exchange_fee;$obj$$.exchange_address=$app_values$$.wallet_address;let $from_address$$=$obj$$.creator,$typeUrl$$;void 0!=$obj$$.id_need_to_buy&&null!=$obj$$.id_need_to_buy?($typeUrl$$="/pvtruong.flexzen.flexzen.MsgCreateDirectSell",$app_values$$={creator:$obj$$.creator,token:$obj$$.token,idNeedToBuy:Number($obj$$.id_need_to_buy),fee:($app_values$$.exchange_fee||0).toString(),exchangeAddress:$app_values$$.wallet_address||
9
- ""}):($typeUrl$$="/pvtruong.flexzen.flexzen.MsgCreateSell",$app_values$$={creator:$obj$$.creator,token:$obj$$.token,soLuong:Number($obj$$.so_luong),gia:Number($obj$$.gia_ban),denom:$obj$$.denom,ngayHetHan:(new Date($obj$$.ngay_het_han)).getTime()/1E3,buyer:$obj$$.buyer||"",fee:($app_values$$.exchange_fee||0).toString(),exchangeAddress:$app_values$$.wallet_address||""});createTx($user$$.current_id_app,$user$$.token,{values:$app_values$$,typeUrl:$typeUrl$$,from_address:$from_address$$,memo:"\u0110\u1eb7t l\u1ec7nh b\u00e1n"}).then(async $rs$$=>
10
- {if($rs$$.code){if(5===$rs$$.code)return $next$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 token \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y");console.error($rs$$);return $next$$($rs$$.rawLog||$rs$$)}try{let $tx$$=await getTxStatus($rs$$.transactionHash),$id$$=((((($tx$$.logs.find($l$$=>$l$$.events)||{}).events||[]).find($e$$=>"message"===$e$$.type)||{}).attributes||[]).find($a$$=>"id"===$a$$.key)||{}).value;if(void 0!==$id$$){let $sell$$=await bcQuery("sell/"+$id$$);$obj$$.id=$id$$;$obj$$.denom=
11
- $sell$$.Sell.denom;$obj$$.gia_ban=$sell$$.Sell.gia;$obj$$.so_luong=$sell$$.Sell.soLuong;$obj$$.tong_gia_tri=$obj$$.gia_ban*$obj$$.so_luong;$obj$$.da_ban=$sell$$.Sell.daBan;$obj$$.con_lai=$sell$$.Sell.conLai;$obj$$.trang_thai=$sell$$.Sell.status;$next$$(null,$obj$$)}else console.error($tx$$),$next$$("Kh\u00f4ng th\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y")}catch($e$$){console.error($e$$),$next$$($e$$.message||$e$$.error||$e$$)}}).catch($e$$=>{console.error($e$$);$next$$($e$$.message||$e$$.error||
12
- $e$$)})}});$contr_router$$.deleting=function($user$$,$obj$$,$next$$){if($user$$.email!==$obj$$.user_created)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n x\u00f3a");createTx($user$$.current_id_app,$user$$.token,{values:{creator:$obj$$.creator,id:Number($obj$$.id)},typeUrl:"/pvtruong.flexzen.flexzen.MsgDeleteSell",from_address:$obj$$.creator,memo:"Hu\u1ef7 l\u1ec7nh b\u00e1n"}).then(async $rs$$=>{if($rs$$.code){if(5===$rs$$.code)return $next$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 ti\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y");
1
+ 'use strict';const model=global.getModel("asssell"),controller=require("../../controllers/controller"),{createTx,getTxStatus,bcQuery}=require("../../libs/blockchainconnect"),AssInvest=global.getModel("assinvestment"),AssPeriod=global.getModel("assperiod"),AssProduct=global.getModel("assproduct"),Trangthai=global.getModel("trangthai"),async=require("async"),updateSell=async($user$$,$item$$)=>{let $sell$$=await bcQuery("sell/"+$item$$.id);$item$$.trang_thai=$sell$$.Sell.status;$item$$.da_ban=$sell$$.Sell.daBan||
2
+ 0;$item$$.con_lai=$sell$$.Sell.conLai||0;$item$$.denom=$sell$$.Sell.denom;$item$$.fee=$sell$$.Sell.fee;$item$$.exchange_address=$sell$$.Sell.exchangeAddress;$item$$.ngay_het_han=new Date(1E3*Number($sell$$.Sell.ngayHetHan));$item$$.token&&await [$item$$].asyncJoinModel2($user$$.current_id_app,AssInvest,{where:"token",fields:["ten_san_pham",{gia_goc:"gia"},"ngay_phat_hanh","id_product","product_token","ky_han","id_period","ten_ky_han","ngay_dao_han","lai_suat_cam_ket","lai_suat_truoc_han","cho_phep_rut_von",
3
+ "co_phan"]});void 0!=$item$$.id_period&&null!=$item$$.id_period&&await [$item$$].asyncJoinModel2($user$$.current_id_app,AssPeriod,{where:$item$$=>({id:$item$$.id_period,id_product:$item$$.id_product}),fields:["ten_lh_dt","ten_ky_han","ky_tinh_lai","goi_dau_tu"]});$item$$.tong_gia_tri_con_lai=$item$$.con_lai*$item$$.gia_goc;$item$$.lai_du_tinh_con_lai=Math.round($item$$.lai_suat_cam_ket/365*$item$$.tong_gia_tri_con_lai*$item$$.ky_han/100,0);$item$$.tong_gia_tri_dao_han_con_lai=$item$$.tong_gia_tri_con_lai+
4
+ $item$$.lai_du_tinh_con_lai;$item$$.ky_han&&!$item$$.co_phan?($item$$.so_ngay_hien_tai=Math.round(((new Date).getTime()-(new Date($item$$.ngay_phat_hanh)).getTime())/864E5),$item$$.tien_lai_hien_tai=Math.round($item$$.so_ngay_hien_tai*($item$$.lai_suat_cam_ket||0)/365*$item$$.tong_gia_tri_con_lai/100)):($item$$.tien_lai_hien_tai=0,$item$$.so_ngay_hien_tai=0)};
5
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"asssell",{sort:{date_created:-1},notNeedRight:!0,requireOtp:!0,onFinding:async($user$$,$condition$$,$next$$)=>{$next$$(null,$condition$$)},onView:async($user$$,$items$$,$next$$)=>{async.map($items$$.filter($item$$=>$item$$.id||0===$item$$.id),async $item$$=>{try{if(await updateSell($user$$,$item$$),model.updateMany({_id:$item$$._id},$item$$).then($rs$$=>{console.log("updated asssell",$rs$$)}),$item$$.goi_dau_tu)try{$item$$.market_value=
6
+ await global.getModel("assinvestment").getInvestmentMarketValue($item$$.id_app,$item$$.token)}catch($e$$){console.error($e$$)}}catch($e$$){console.error("view asssell",$e$$),$e$$.message&&"3"==$e$$.message.code&&(model.deleteOne({_id:$item$$._id}).then(()=>{console.log("deleted sell",$item$$)}),$item$$.not_found=!0)}},async()=>{$items$$=$items$$.filter($i$$=>!$i$$.not_found);await $items$$.asyncJoinModel2(null,Trangthai,{where:$item$$=>({ma_ct:"ASSSELL",ma_trang_thai:$item$$.trang_thai}),fields:["ten_trang_thai",
7
+ "color"]});await $items$$.asyncJoinModel2($user$$.current_id_app,AssProduct,{where:{id_product:"id"},fields:["ten_san_pham","hinh_anh","logo","ma_loai"]});$next$$(null,$items$$)})},onCreating:async($user$$,$obj$$,$next$$)=>{var $app_values$$=await global.getModel("app").findOne({_id:$user$$.current_id_app}).lean();$obj$$.fee=$app_values$$.exchange_fee;$obj$$.exchange_address=$app_values$$.wallet_address;let $from_address$$=$obj$$.creator,$typeUrl$$;void 0!=$obj$$.id_need_to_buy&&null!=$obj$$.id_need_to_buy?
8
+ ($typeUrl$$="/pvtruong.flexzen.flexzen.MsgCreateDirectSell",$app_values$$={creator:$obj$$.creator,token:$obj$$.token,idNeedToBuy:Number($obj$$.id_need_to_buy),fee:($app_values$$.exchange_fee||0).toString(),exchangeAddress:$app_values$$.wallet_address||""}):($typeUrl$$="/pvtruong.flexzen.flexzen.MsgCreateSell",$app_values$$={creator:$obj$$.creator,token:$obj$$.token,soLuong:Number($obj$$.so_luong),gia:Number($obj$$.gia_ban),denom:$obj$$.denom,ngayHetHan:(new Date($obj$$.ngay_het_han)).getTime()/1E3,
9
+ buyer:$obj$$.buyer||"",fee:($app_values$$.exchange_fee||0).toString(),exchangeAddress:$app_values$$.wallet_address||""});createTx($user$$.current_id_app,$user$$.token,{values:$app_values$$,typeUrl:$typeUrl$$,from_address:$from_address$$,memo:"\u0110\u1eb7t l\u1ec7nh b\u00e1n"}).then(async $rs$$=>{if($rs$$.code){if(5===$rs$$.code)return $next$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 token \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y");console.error($rs$$);return $next$$($rs$$.rawLog||$rs$$)}try{let $tx$$=
10
+ await getTxStatus($rs$$.transactionHash),$id$$=((((($tx$$.logs.find($l$$=>$l$$.events)||{}).events||[]).find($e$$=>"message"===$e$$.type)||{}).attributes||[]).find($a$$=>"id"===$a$$.key)||{}).value;void 0!==$id$$?($obj$$.id=$id$$,await updateSell($user$$,$obj$$),$next$$(null,$obj$$)):(console.error($tx$$),$next$$("Kh\u00f4ng th\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y"))}catch($e$$){console.error($e$$),$next$$($e$$.message||$e$$.error||$e$$)}}).catch($e$$=>{console.error($e$$);$next$$($e$$.message||
11
+ $e$$.error||$e$$)})}});$contr_router$$.deleting=function($user$$,$obj$$,$next$$){if($user$$.email!==$obj$$.user_created)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n x\u00f3a");createTx($user$$.current_id_app,$user$$.token,{values:{creator:$obj$$.creator,id:Number($obj$$.id)},typeUrl:"/pvtruong.flexzen.flexzen.MsgDeleteSell",from_address:$obj$$.creator,memo:"Hu\u1ef7 l\u1ec7nh b\u00e1n"}).then(async $rs$$=>{if($rs$$.code){if(5===$rs$$.code)return $next$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 ti\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y");
13
12
  console.error($rs$$);return $next$$($rs$$.rawLog||$rs$$)}$next$$(null,$obj$$)}).catch($e$$=>{console.error($e$$);$next$$($e$$.message||$e$$.error||$e$$)})};$contr_router$$.updating=async function($user$$,$data$$,$obj$$,$next$$){if($user$$.email!==$obj$$.user_created)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n c\u1eadp nh\u1eadt");let $app$$=await global.getModel("app").findOne({_id:$user$$.current_id_app}).lean();var $data_update$jscomp$1_from_address$$=$obj$$.creator;$data_update$jscomp$1_from_address$$=
14
13
  {values:{creator:$obj$$.creator,id:Number($obj$$.id),soLuong:Number(void 0==$data$$.so_luong?$obj$$.so_luong:$data$$.so_luong),gia:Number($data$$.gia_ban||$obj$$.gia_ban),denom:$data$$.denom||$obj$$.denom,ngayHetHan:(new Date($obj$$.ngay_het_han)).getTime()/1E3,buyer:void 0==$data$$.buyer?$obj$$.buyer:$data$$.buyer,fee:($app$$.exchange_fee||0).toString()},typeUrl:"/pvtruong.flexzen.flexzen.MsgUpdateSell",from_address:$data_update$jscomp$1_from_address$$,memo:"C\u1eadp nh\u1eadt l\u1ec7nh b\u00e1n"};
15
- createTx($user$$.current_id_app,$user$$.token,$data_update$jscomp$1_from_address$$).then(async $rs$$=>{if($rs$$.code){if(5===$rs$$.code)return $next$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 ti\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y");console.error($rs$$);return $next$$($rs$$.rawLog||$rs$$)}$data$$.fee=$app$$.exchange_fee;$data$$.exchange_address=$app$$.wallet_address;$next$$(null,$data$$,$obj$$)}).catch($e$$=>{console.error($e$$);$next$$($e$$.message||$e$$.error||$e$$)})};$contr_router$$.route()};
14
+ createTx($user$$.current_id_app,$user$$.token,$data_update$jscomp$1_from_address$$).then(async $rs$$=>{if($rs$$.code){if(5===$rs$$.code)return $next$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 ti\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y");console.error($rs$$);return $next$$($rs$$.rawLog||$rs$$)}try{$data$$.id=$obj$$.id,await updateSell($user$$,$data$$),$next$$(null,$obj$$)}catch($e$$){console.error($e$$),$next$$($e$$.message||$e$$.error||$e$$)}$data$$.fee=$app$$.exchange_fee;$data$$.exchange_address=
15
+ $app$$.wallet_address;$next$$(null,$data$$,$obj$$)}).catch($e$$=>{console.error($e$$);$next$$($e$$.message||$e$$.error||$e$$)})};$contr_router$$.route()};
@@ -1,9 +1,9 @@
1
1
  'use strict';const async=require("async"),qts=global.getModel("qts"),qts_dieuchinh=global.getModel("qts_dieuchinh"),sotinhkh=global.getModel("sotinhkh"),controller=require("../../controllers/controllerRPT"),moment=require("moment");
2
- module.exports=function($router$$){new controller($router$$,"chitiettaisan",function($req$$,$callback$jscomp$0$$){let $condition$$=$req$$.query;$condition$$.nam||($condition$$.nam=(new Date).getFullYear());$condition$$.thang||($condition$$.thang=(new Date).getMonth()+1);let $id_app$$=$condition$$.id_app,$ngay_cuoi_thang$$,$ngay_dau_thang$$,$toi_ky$$;$ngay_cuoi_thang$$=$condition$$.den_ngay?moment($condition$$.den_ngay).endOf("date").toDate():moment(new Date($condition$$.nam,$condition$$.thang-1,15)).endOf("month").toDate();
3
- $toi_ky$$=$ngay_cuoi_thang$$.getMonth()+1;$ngay_dau_thang$$=moment(new Date($condition$$.nam,$condition$$.thang-1,15)).startOf("month").toDate();async.parallel({id_tss:function($callback$$){let $q_ts$$={id_app:$id_app$$};$q_ts$$.ngay_tang={$lte:$ngay_cuoi_thang$$};$q_ts$$.$or=[{ngay_giam:null}];if($condition$$.tu_ngay){let $tu_ngay$$=moment($condition$$.tu_ngay).startOf("date").toDate();$q_ts$$.ngay_tang.$gte=moment($condition$$.tu_ngay).startOf("date").toDate();$q_ts$$.$or.ngay_giam={$gte:$tu_ngay$$}}else $q_ts$$.$or.ngay_giam=
4
- {$gte:$ngay_dau_thang$$};$condition$$.ma_bp&&($q_ts$$.ma_bp=$condition$$.ma_bp);$condition$$.ma_loai_ts&&($q_ts$$.ma_loai_ts=$condition$$.ma_loai_ts);$condition$$.ma_gd&&($q_ts$$.ma_gd=$condition$$.ma_gd);$condition$$.id_ts&&($q_ts$$.id_ts=$condition$$.id_ts);qts.find($q_ts$$).lean().exec(function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$callback$$(null,$rs$$)})}},function($e$jscomp$2$$,$rs$jscomp$0$$){if($e$jscomp$2$$)return $callback$jscomp$0$$($e$jscomp$2$$);var $ts$$=$rs$jscomp$0$$.id_tss,
5
- $dsts$$=[];$ts$$.forEach(function($r$$){$dsts$$.push($r$$._id.toString())});async.parallel({khauhao_nt:function($callback$$){var $q$$={id_app:$id_app$$,nam:$condition$$.nam-1};$q$$.id_ts={$in:$dsts$$};sotinhkh.find($q$$).lean().exec(function($e$jscomp$0$$,$kh$$){if($e$jscomp$0$$)return $callback$$($e$jscomp$0$$);$kh$$.groupBy("id_ts",["gia_tri_kh_ky"],function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$rs$$||($rs$$=[]);$callback$$(null,$rs$$)})})},khauhao_nn:function($callback$$){var $q$$={id_app:$id_app$$,
6
- nam:$condition$$.nam,ky:{$lte:$toi_ky$$}};$q$$.id_ts={$in:$dsts$$};sotinhkh.find($q$$).lean().exec(function($e$jscomp$0$$,$kh$$){if($e$jscomp$0$$)return $callback$$($e$jscomp$0$$);$kh$$.groupBy("id_ts",["gia_tri_kh_ky"],function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$rs$$||($rs$$=[]);$callback$$(null,$rs$$)})})},nguyengia:function($callback$$){var $q$$={id_ts:{$in:$dsts$$}};$q$$.$where="this.ky*this.nam<="+$toi_ky$$*Number($condition$$.nam);qts_dieuchinh.find($q$$).lean().exec(function($e$$,
7
- $rs$$){if($e$$)return $callback$$($e$$);$ts$$.forEach(function($ts$$){$ts$$.nguyen_gia=$ts$$.details.csum("nguyen_gia")+$rs$$.csum("nguyen_gia",{id_ts:$ts$$._id.toString()});$ts$$.gia_tri_da_kh=$ts$$.details.csum("gia_tri_da_kh")+$rs$$.csum("gia_tri_da_kh",{id_ts:$ts$$._id.toString()});$ts$$.gia_tri_con_lai=$ts$$.details.csum("gia_tri_con_lai")+$rs$$.csum("gia_tri_con_lai",{id_ts:$ts$$._id.toString()})});$callback$$(null,$ts$$)})}},function($e$$,$rs$$){if($e$$)return $callback$jscomp$0$$($e$$);var $stt$$=
8
- 1;$ts$$.forEach(function($r$$){$r$$.gia_tri_kh_nam=$rs$$.khauhao_nn.csum("gia_tri_kh_ky",{id_ts:$r$$._id.toString()});$r$$.gia_tri_kh_truoc=$r$$.gia_tri_da_kh+$rs$$.khauhao_nt.csum("gia_tri_kh_ky",{id_ts:$r$$._id.toString()});$r$$.gia_tri_kh_luy_ke=$r$$.gia_tri_kh_nam+$r$$.gia_tri_kh_truoc;$r$$.gia_tri_con_lai=$r$$.nguyen_gia-$r$$.gia_tri_kh_luy_ke;$r$$.gia_tri_kh_ky=$r$$.so_ky_kh?$r$$.nguyen_gia/$r$$.so_ky_kh:0;$r$$.stt=$stt$$;$stt$$+=1});$e$$={bold:!0,ten_ts:"T\u1ed5ng c\u1ed9ng",nguyen_gia:$ts$$.csum("nguyen_gia"),
9
- gia_tri_da_kh:$ts$$.csum("gia_tri_da_kh"),gia_tri_kh_luy_ke:$ts$$.csum("gia_tri_kh_luy_ke"),gia_tri_con_lai:$ts$$.csum("gia_tri_con_lai")};$callback$jscomp$0$$(null,$ts$$.concat($e$$))})})})};
2
+ module.exports=function($router$$){new controller($router$$,"chitiettaisan",function($req$$,$callback$jscomp$0$$){let $condition$$=$req$$.query;$condition$$.nam=$condition$$.nam?Number($condition$$.nam):(new Date).getFullYear();$condition$$.thang=$condition$$.thang?Number($condition$$.thang):(new Date).getMonth()+1;let $id_app$$=$condition$$.id_app,$ngay_cuoi_thang$$,$ngay_dau_thang$$,$toi_ky$$;$ngay_cuoi_thang$$=$condition$$.den_ngay?moment($condition$$.den_ngay).endOf("date").toDate():moment(new Date($condition$$.nam,
3
+ $condition$$.thang-1,15)).endOf("month").toDate();$toi_ky$$=$ngay_cuoi_thang$$.getMonth()+1;$ngay_dau_thang$$=moment(new Date($condition$$.nam,$condition$$.thang-1,15)).startOf("month").toDate();async.parallel({id_tss:function($callback$$){let $q_ts$$={id_app:$id_app$$};$q_ts$$.ngay_tang={$lte:$ngay_cuoi_thang$$};$q_ts$$.$or=[{ngay_giam:null}];if($condition$$.tu_ngay){let $tu_ngay$$=moment($condition$$.tu_ngay).startOf("date").toDate();$q_ts$$.ngay_tang.$gte=moment($condition$$.tu_ngay).startOf("date").toDate();
4
+ $q_ts$$.$or.ngay_giam={$gte:$tu_ngay$$}}else $q_ts$$.$or.ngay_giam={$gte:$ngay_dau_thang$$};$condition$$.ma_bp&&($q_ts$$.ma_bp=$condition$$.ma_bp);$condition$$.ma_loai_ts&&($q_ts$$.ma_loai_ts=$condition$$.ma_loai_ts);$condition$$.ma_gd&&($q_ts$$.ma_gd=$condition$$.ma_gd);$condition$$.id_ts&&($q_ts$$.id_ts=$condition$$.id_ts);qts.find($q_ts$$).lean().exec(function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$callback$$(null,$rs$$)})}},function($e$jscomp$2$$,$rs$jscomp$0$$){if($e$jscomp$2$$)return $callback$jscomp$0$$($e$jscomp$2$$);
5
+ const $ts$$=$rs$jscomp$0$$.id_tss,$dsts$$=$ts$$.map($r$$=>$r$$._id.toString());async.parallel({khauhao_nt:function($callback$$){const $q$$={id_app:$id_app$$,nam:{$lte:$condition$$.nam-1}};$q$$.id_ts={$in:$dsts$$};sotinhkh.find($q$$).lean().exec(function($e$jscomp$0$$,$kh$$){if($e$jscomp$0$$)return $callback$$($e$jscomp$0$$);$kh$$.groupBy("id_ts",["gia_tri_kh_ky"],function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$rs$$||($rs$$=[]);$callback$$(null,$rs$$)})})},khauhao_nn:function($callback$$){const $q$$=
6
+ {id_app:$id_app$$,nam:$condition$$.nam,thang:{$lte:$toi_ky$$}};$q$$.id_ts={$in:$dsts$$};sotinhkh.find($q$$).lean().exec(function($e$jscomp$0$$,$kh$$){if($e$jscomp$0$$)return $callback$$($e$jscomp$0$$);$kh$$.groupBy("id_ts",["gia_tri_kh_ky"],function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$rs$$||($rs$$=[]);$callback$$(null,$rs$$)})})},nguyengia:function($callback$$){const $q$$={id_ts:{$in:$dsts$$}};$q$$.$where="this.ky + this.nam * 12<="+($toi_ky$$+12*$condition$$.nam);qts_dieuchinh.find($q$$).lean().exec(function($e$$,
7
+ $rs$$){if($e$$)return $callback$$($e$$);$ts$$.forEach(function($ts$$){$ts$$.nguyen_gia=$ts$$.details.csum("nguyen_gia")+$rs$$.csum("nguyen_gia",{id_ts:$ts$$._id.toString()});$ts$$.gia_tri_da_kh=$ts$$.details.csum("gia_tri_da_kh")+$rs$$.csum("gia_tri_da_kh",{id_ts:$ts$$._id.toString()});$ts$$.gia_tri_con_lai=$ts$$.details.csum("gia_tri_con_lai")+$rs$$.csum("gia_tri_con_lai",{id_ts:$ts$$._id.toString()})});$callback$$(null,$ts$$)})}},function($e$$,$rs$$){if($e$$)return $callback$jscomp$0$$($e$$);let $stt$$=
8
+ 1;$ts$$.forEach(function($r$$){$r$$.gia_tri_kh_nam_nay=$rs$$.khauhao_nn.csum("gia_tri_kh_ky",{id_ts:$r$$._id.toString()});$r$$.gia_tri_kh_nam_truoc=$r$$.gia_tri_da_kh+$rs$$.khauhao_nt.csum("gia_tri_kh_ky",{id_ts:$r$$._id.toString()});$r$$.gia_tri_kh_luy_ke=$r$$.gia_tri_kh_nam_nay+$r$$.gia_tri_kh_nam_truoc;$r$$.gia_tri_con_lai=$r$$.nguyen_gia-$r$$.gia_tri_kh_luy_ke;$r$$.gia_tri_kh_ky=$r$$.so_ky_kh?$r$$.nguyen_gia/$r$$.so_ky_kh:0;$r$$.stt=$stt$$;$stt$$+=1});$e$$={bold:!0,ten_ts:"T\u1ed5ng c\u1ed9ng",
9
+ nguyen_gia:$ts$$.csum("nguyen_gia"),gia_tri_kh_nam_nay:$ts$$.csum("gia_tri_kh_nam_nay"),gia_tri_kh_nam_truoc:$ts$$.csum("gia_tri_kh_nam_truoc"),gia_tri_da_kh:$ts$$.csum("gia_tri_da_kh"),gia_tri_kh_luy_ke:$ts$$.csum("gia_tri_kh_luy_ke"),gia_tri_con_lai:$ts$$.csum("gia_tri_con_lai")};$callback$jscomp$0$$(null,$ts$$.concat($e$$))})})})};
@@ -1,15 +1,15 @@
1
1
  'use strict';const User=global.getModel("user"),log=global.getModel("log"),Customer=global.getModel("customer"),Endpoint=global.getModel("endpoint"),getNotifies=require("../../libs/getNotifies"),redisCache=require("../../libs/redis-cache"),underscore=require("underscore"),async=require("async"),fs=require("fs"),{isSupperAdmin}=require("../../libs/utils"),path=require("path"),Token=global.getModel("token"),gm=require("gm").subClass({imageMagick:!0}),request=require("request"),findByToken=User.findByToken;
2
2
  module.exports=function($router$$){const $usersAdmin$$=configs.admins;$router$$.route("/user").get(function($req$$,$res$$){const $access_token$$=$req$$.query.access_token;findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,function($e$$,$user$$){if($e$$)return $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$});$user$$?($user$$.local&&($user$$.address=$user$$.local.address?$user$$.local.address:"",$user$$.phone=$user$$.local.phone?
3
- $user$$.local.phone:"",delete $user$$.local.rePassword,delete $user$$.local.password),$user$$.token=$access_token$$,$user$$.admin=underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase()),!$user$$.picture&&$user$$.local.picture&&($user$$.picture=$user$$.local.picture),delete $user$$.tokens,delete $user$$.facebook,delete $user$$.google,delete $user$$.password,$res$$.send($user$$)):$res$$.status(404).send({error:"Token kh\u00f4ng t\u1ed3n t\u1ea1i"})})});$router$$.route("/profile").get(function($req$$,
4
- $res$$){var $email$$=$req$$.query.email,$query$$={};async.parallel({e:function($callback$$){$email$$?($query$$.email=$email$$,User.findOne($query$$).lean().exec(function($error$$,$user$$){if($error$$)return $callback$$($error$$);$callback$$(null,$user$$)})):$callback$$()},t:function($callback$$){$email$$?$callback$$():findByToken($req$$.query.access_token,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,($e$$,$user$$)=>{if($e$$)return $callback$$($e$$);$callback$$(null,
5
- $user$$)})}},function($e$jscomp$0$$,$dk$$){if($e$jscomp$0$$)return $res$$.state(400).send({error:$e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$});let $user$$=$dk$$.e||$dk$$.t;$user$$?(delete $user$$.local.password,delete $user$$.local.rspassword,delete $user$$.tokens,$user$$.local._id=$user$$._id,$user$$.local.invited=[],$user$$.local.email2=$user$$.email2,$user$$.local.picture||($user$$.local.picture="/images/avatar.jpg"),delete $user$$.token,User.find({partner:$user$$._id},{local:1}).lean().exec(async($e$$,
6
- $p$$)=>{$p$$&&$p$$.forEach(function($u$$){delete $u$$.local.password;delete $u$$.local.rspassword;delete $u$$.tokens;delete $u$$.token;$user$$.local.invited.push($u$$.local)});$user$$.local.isOnline=await User.isOnline($user$$.email);$res$$.send($user$$.local)})):$res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y th\u00f4ng tin c\u1ee7a t\u00e0i kho\u1ea3n n\u00e0y"})})});$router$$.route("/avatar").get(function($req$$,$res$$){var $email$$=$req$$.query.email,$query$$={};async.parallel({e:function($callback$$){$email$$&&
7
- ($query$$.email=$email$$);$callback$$()},t:function($callback$$){$email$$?$callback$$():Token.findOne({token:$req$$.query.access_token},function($e$$,$t$$){if($e$$)return $callback$$($e$$);$t$$&&($query$$.email=$t$$.email);$callback$$()})}},function($e$$){if($e$$)return $res$$.status(400).send({error:$e$$});let $size$$=Number($req$$.query.size)||240;$query$$.email||($query$$.tokens=$req$$.query.access_token);User.findOne($query$$,{picture:1}).lean().exec(function($error$$,$user$$){if($error$$)return $res$$.status(400).send($error$$);
8
- $error$$=configs.paths.images||path.join(path.dirname(path.dirname(__dirname)),"images");if($user$$&&$user$$.picture)if(0===$user$$.picture.indexOf("/getfile/")){let $imgPath$$=$user$$.picture.replace(/\/getfile\//g,"");$imgPath$$=path.join($error$$,$imgPath$$);fs.existsSync($imgPath$$)?gm($imgPath$$).resize($size$$,null).stream(function($err$$,$stdout$$){if($err$$)return $res$$.sendFile($imgPath$$);$stdout$$.pipe($res$$)}):$res$$.sendFile(path.join($error$$,"avatar.jpg"))}else 0===$user$$.picture.indexOf("http://")||
9
- 0===$user$$.picture.indexOf("https://")?request.get($user$$.picture).pipe($res$$):$res$$.sendFile(path.join($error$$,"avatar.jpg"));else $res$$.sendFile(path.join($error$$,"avatar.jpg"))})})});$router$$.route("/uploadfile").post(function($req$$,$res$$){var $access_token$$=$req$$.query.access_token,$folder$$=$req$$.query.folder||"",$id_app$$=$req$$.query.id_app;if(!$req$$.files.fileupload)if($req$$.files.file)$req$$.files.fileupload=$req$$.files.file;else{$res$$.status(400).send({error:"File kh\u00f4ng t\u1ed3n t\u1ea1i"});
10
- return}var $path$$=require("path"),$ext$$=$path$$.extname($req$$.files.fileupload.path);$ext$$?($ext$$=$ext$$.toLowerCase(),".exe"===$ext$$?$res$$.status(400).send({error:"Ki\u1ec3u file n\u00e0y kh\u00f4ng \u0111\u01b0\u1ee3c ch\u1ea5p nh\u1eadn"}):findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,async($error$jscomp$2$$,$_user$$)=>{if($error$jscomp$2$$)return $res$$.status(400).send({error:$error$jscomp$2$$.message||$error$jscomp$2$$.error||
11
- $error$jscomp$2$$});if($_user$$){const $user$$=await User.findOne({email:$_user$$.email});fs.readFile($req$$.files.fileupload.path,function($err$jscomp$0$$,$data$$){if($err$jscomp$0$$)return $res$$($err$jscomp$0$$);var $originalname_p$$=$req$$.files.fileupload.originalname.split(" ").join("_");$err$jscomp$0$$=configs.paths.images||$path$$.dirname($path$$.dirname(__dirname))+"/images";$err$jscomp$0$$+="/";fs.existsSync($err$jscomp$0$$+$folder$$)||fs.mkdirSync($err$jscomp$0$$+$folder$$);$id_app$$&&
12
- "avatar"!=$folder$$&&($folder$$=$folder$$+"/"+$id_app$$,fs.existsSync($err$jscomp$0$$+$folder$$)||fs.mkdirSync($err$jscomp$0$$+$folder$$));let $newPath$$=$folder$$+"/"+$user$$._id.toString()+"_"+(new Date).getTime().toString()+"_"+$originalname_p$$,$path_image$$=$err$jscomp$0$$+$newPath$$;if(".png"!==$ext$$&&".jpeg"!==$ext$$&&".jpg"!==$ext$$&&".gif"!==$ext$$)fs.writeFile($path_image$$,$data$$,function($err$$){if($err$$)return $res$$.status(400).send($err$$.message);fs.unlink($req$$.files.fileupload.path,
3
+ $user$$.local.phone:"",delete $user$$.local.rePassword,delete $user$$.local.password,$user$$.has_pin=!!$user$$.local.pin,delete $user$$.local.pin),$user$$.token=$access_token$$,$user$$.admin=underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase()),!$user$$.picture&&$user$$.local.picture&&($user$$.picture=$user$$.local.picture),delete $user$$.tokens,delete $user$$.facebook,delete $user$$.google,delete $user$$.password,delete $user$$.pin,$res$$.send($user$$)):$res$$.status(404).send({error:"Token kh\u00f4ng t\u1ed3n t\u1ea1i"})})});
4
+ $router$$.route("/profile").get(function($req$$,$res$$){const $email$$=$req$$.query.email,$query$$={};async.parallel({e:function($callback$$){$email$$?($query$$.email=$email$$,User.findOne($query$$).lean().exec(function($error$$,$user$$){if($error$$)return $callback$$($error$$);$callback$$(null,$user$$)})):$callback$$()},t:function($callback$$){$email$$?$callback$$():findByToken($req$$.query.access_token,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,($e$$,$user$$)=>
5
+ {if($e$$)return $callback$$($e$$);$callback$$(null,$user$$)})}},function($e$jscomp$0$$,$dk$$){if($e$jscomp$0$$)return $res$$.state(400).send({error:$e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$});let $user$$=$dk$$.e||$dk$$.t;$user$$?(delete $user$$.local.password,delete $user$$.local.rspassword,delete $user$$.local.pin,delete $user$$.tokens,$user$$.local._id=$user$$._id,$user$$.local.invited=[],$user$$.local.email2=$user$$.email2,$user$$.local.picture||($user$$.local.picture="/images/avatar.jpg"),
6
+ delete $user$$.token,User.find({partner:$user$$._id},{local:1}).lean().exec(async($e$$,$p$$)=>{$p$$&&$p$$.forEach(function($u$$){delete $u$$.local.password;delete $u$$.local.rspassword;delete $u$$.tokens;delete $u$$.token;delete $u$$.local.pin;$user$$.local.invited.push($u$$.local)});$user$$.local.isOnline=await User.isOnline($user$$.email);$res$$.send($user$$.local)})):$res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y th\u00f4ng tin c\u1ee7a t\u00e0i kho\u1ea3n n\u00e0y"})})});$router$$.route("/avatar").get(function($req$$,
7
+ $res$$){var $email$$=$req$$.query.email,$query$$={};async.parallel({e:function($callback$$){$email$$&&($query$$.email=$email$$);$callback$$()},t:function($callback$$){$email$$?$callback$$():Token.findOne({token:$req$$.query.access_token},function($e$$,$t$$){if($e$$)return $callback$$($e$$);$t$$&&($query$$.email=$t$$.email);$callback$$()})}},function($e$$){if($e$$)return $res$$.status(400).send({error:$e$$});let $size$$=Number($req$$.query.size)||240;$query$$.email||($query$$.tokens=$req$$.query.access_token);
8
+ User.findOne($query$$,{picture:1}).lean().exec(function($error$$,$user$$){if($error$$)return $res$$.status(400).send($error$$);$error$$=configs.paths.images||path.join(path.dirname(path.dirname(__dirname)),"images");if($user$$&&$user$$.picture)if(0===$user$$.picture.indexOf("/getfile/")){let $imgPath$$=$user$$.picture.replace(/\/getfile\//g,"");$imgPath$$=path.join($error$$,$imgPath$$);fs.existsSync($imgPath$$)?gm($imgPath$$).resize($size$$,null).stream(function($err$$,$stdout$$){if($err$$)return $res$$.sendFile($imgPath$$);
9
+ $stdout$$.pipe($res$$)}):$res$$.sendFile(path.join($error$$,"avatar.jpg"))}else 0===$user$$.picture.indexOf("http://")||0===$user$$.picture.indexOf("https://")?request.get($user$$.picture).pipe($res$$):$res$$.sendFile(path.join($error$$,"avatar.jpg"));else $res$$.sendFile(path.join($error$$,"avatar.jpg"))})})});$router$$.route("/uploadfile").post(function($req$$,$res$$){var $access_token$$=$req$$.query.access_token,$folder$$=$req$$.query.folder||"",$id_app$$=$req$$.query.id_app;if(!$req$$.files.fileupload)if($req$$.files.file)$req$$.files.fileupload=
10
+ $req$$.files.file;else{$res$$.status(400).send({error:"File kh\u00f4ng t\u1ed3n t\u1ea1i"});return}var $path$$=require("path"),$ext$$=$path$$.extname($req$$.files.fileupload.path);$ext$$?($ext$$=$ext$$.toLowerCase(),".exe"===$ext$$?$res$$.status(400).send({error:"Ki\u1ec3u file n\u00e0y kh\u00f4ng \u0111\u01b0\u1ee3c ch\u1ea5p nh\u1eadn"}):findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,async($error$jscomp$2$$,$_user$$)=>{if($error$jscomp$2$$)return $res$$.status(400).send({error:$error$jscomp$2$$.message||
11
+ $error$jscomp$2$$.error||$error$jscomp$2$$});if($_user$$){const $user$$=await User.findOne({email:$_user$$.email});fs.readFile($req$$.files.fileupload.path,function($err$jscomp$0$$,$data$$){if($err$jscomp$0$$)return $res$$($err$jscomp$0$$);var $originalname_p$$=$req$$.files.fileupload.originalname.split(" ").join("_");$err$jscomp$0$$=configs.paths.images||$path$$.dirname($path$$.dirname(__dirname))+"/images";$err$jscomp$0$$+="/";fs.existsSync($err$jscomp$0$$+$folder$$)||fs.mkdirSync($err$jscomp$0$$+
12
+ $folder$$);$id_app$$&&"avatar"!=$folder$$&&($folder$$=$folder$$+"/"+$id_app$$,fs.existsSync($err$jscomp$0$$+$folder$$)||fs.mkdirSync($err$jscomp$0$$+$folder$$));let $newPath$$=$folder$$+"/"+$user$$._id.toString()+"_"+(new Date).getTime().toString()+"_"+$originalname_p$$,$path_image$$=$err$jscomp$0$$+$newPath$$;if(".png"!==$ext$$&&".jpeg"!==$ext$$&&".jpg"!==$ext$$&&".gif"!==$ext$$)fs.writeFile($path_image$$,$data$$,function($err$$){if($err$$)return $res$$.status(400).send($err$$.message);fs.unlink($req$$.files.fileupload.path,
13
13
  $e$$=>{$e$$&&console.error($e$$)});$req$$.query.json?$res$$.send({fileUrl:"/getfile/"+$newPath$$}):($res$$.writeHead(200,{"Content-Type":"text/html"}),$res$$.end("<html><head><title>/getfile/"+$newPath$$+"</title></head><body>success</body></html>"))});else{$originalname_p$$=$originalname_p$$.split(".");var $thumbPath$$=$newPath$$+".thumb."+$originalname_p$$[$originalname_p$$.length-1],$path_image_thumb$$=$err$jscomp$0$$+$thumbPath$$;gm($req$$.files.fileupload.path).size(function($error$jscomp$1$$,
14
14
  $value$$){if($error$jscomp$1$$)return console.log("Can't get size of image. Check imageMagick \n"+$error$jscomp$1$$),$res$$.status(400).send($error$jscomp$1$$);async.parallel([function($callback$$){$value$$&&1024<$value$$.width?gm($req$$.files.fileupload.path).resize(1024).write($path_image$$,function($error$$){$error$$&&console.log("Can't resize image \n"+$error$$);$callback$$($error$$)}):fs.writeFile($path_image$$,$data$$,function($err$$){$callback$$($err$$)})}],function($err$$){if($err$$)return $res$$.status(400).send($err$$);
15
15
  gm($path_image$$).resize(350,"350>").gravity("Center").extent(350,350).write($path_image_thumb$$,function($error$jscomp$0$$){if($error$jscomp$0$$)console.log("Kh\u00f4ng th\u1ec3 t\u1ea1o thumbnail cho h\u00ecnh \u1ea3nh n\u00e0y. Kiem tra cai dat imageMagick\n"+$error$jscomp$0$$),$res$$.status(400).send($error$jscomp$0$$);else{fs.unlink($req$$.files.fileupload.path,$e$$=>{$e$$&&console.error($e$$)});var $path_avatar$$="/getfile/"+$newPath$$,$path_thumb$$="/getfile/"+$thumbPath$$;"avatars"==$folder$$?
@@ -28,13 +28,16 @@ $router$$.route("/changepasswordByAdmin").post(function($req$$,$res$$){let $body
28
28
  $req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,function($error$jscomp$0$$,$user$$){if($error$jscomp$0$$)return $res$$.status(400).send({error:$error$jscomp$0$$.message||$error$jscomp$0$$.error||$error$jscomp$0$$});if(!$user$$)return $res$$.status(400).send({error:"token kh\u00f4ng c\u00f3 gi\u00e1 tr\u1ecb"});if(underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase()))User.findOne({email:$body$$.email},function($e$jscomp$0$$,$u$$){if($e$jscomp$0$$||
29
29
  !$u$$)return $res$$.status(400).send({error:$body$$.email+" ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd"});$u$$.local.password=$u$$.generateHash($body$$.newPassword);$u$$.local.rspassword=null;$u$$.save(function($error$$){if($error$$)return $res$$.status(400).send($error$$);Token.deleteMany({email:$body$$.email,ip:{$in:["",null,void 0]}},$e$$=>{$e$$&&console.log("error when remove old tokens",$e$$)});log.create({id_app:"CHANGEPASSWORD",id_func:"CHANGEPASSWORD",action:"CHANGEPASSWORD"},$u$$.email,
30
30
  $req$$.header("user-agent"),$req$$);$res$$.send({message:"\u0110\u00e3 c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng"})})});else return $res$$.status(400).send({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n thay \u0111\u1ed5i m\u1eadt kh\u1ea9u c\u1ee7a ng\u01b0\u1eddi s\u1eed d\u1ee5ng n\u00e0y"})})});$router$$.route("/changepassword").post(function($req$$,$res$$){let $access_token$$=$req$$.query.access_token;findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,
31
- async function($error$jscomp$0$$,$_user$$){if($error$jscomp$0$$)return $res$$.status(400).send({error:$error$jscomp$0$$.message||$error$jscomp$0$$.error||$error$jscomp$0$$});if($_user$$){let $user$$=await User.findOne({email:$_user$$.email});if(!$user$$)return $res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng "+$_user$$.email});let $passwords$$=$req$$.body;$error$jscomp$0$$=await Token.findOne({token:$access_token$$})||{};if($user$$.local.password&&!$error$jscomp$0$$.once){if(!$passwords$$.oldPassword)return $res$$.status(400).send({error:"B\u1ea1n ch\u01b0a nh\u1eadp m\u1eadt kh\u1ea9u hi\u1ec7n t\u1ea1i"});
32
- if(!$user$$.validPassword($passwords$$.oldPassword))return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u hi\u1ec7n t\u1ea1i kh\u00f4ng ch\u00ednh x\u00e1c"})}if($passwords$$.newPassword){if($passwords$$.reNewPassword!==$passwords$$.newPassword)return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c"});if(!User.teststrengthPassword($passwords$$.newPassword))return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u ph\u1ea3i c\u00f3 \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1 v\u00e0 bao g\u1ed3m \u00edt nh\u1ea5t m\u1ed9t ch\u1eef s\u1ed1, m\u1ed9t ch\u1eef hoa v\u00e0 m\u1ed9t ch\u1eef th\u01b0\u1eddng"})}else return $res$$.status(400).send({error:"B\u1ea1n ch\u01b0a nh\u1eadp m\u1eadt kh\u1ea9u m\u1edbi"});
33
- $user$$.local.password=$user$$.generateHash($passwords$$.newPassword);$user$$.local.rspassword=null;$user$$.save(function($error$$){if($error$$)return $res$$.status(400).send($error$$);console.error("changed password for",$user$$.email,$passwords$$.newPassword);Token.deleteMany({email:$user$$.email,token:{$ne:$access_token$$},ip:{$in:["",null,void 0]}},$e$$=>{$e$$&&console.error("error when remove old tokens",$e$$)});log.create({id_app:"CHANGEPASSWORD",id_func:"CHANGEPASSWORD",action:"CHANGEPASSWORD"},
34
- $user$$.email,$req$$.header("user-agent"),$req$$);$res$$.send({message:"\u0110\u00e3 c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng"})})}else return $res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng n\u00e0y"})})});$router$$.route("/user/logout").get(function($req$$,$res$$){var $access_token$$=$req$$.query.access_token;findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,function($error$$,$user$$){if($error$$)return $res$$.status(400).send({error:$error$$.message||
35
- $error$$.error||$error$$});Token.deleteMany({token:$access_token$$},function($ep_id_error$$){if($ep_id_error$$)return $res$$.status(400).send($ep_id_error$$);($ep_id_error$$=global.clientIO[$access_token$$])&&global.socketIO&&$ep_id_error$$.forEach($id$$=>{global.socketIO.in($id$$).fetchSockets().then($sockets$$=>{for(const $socket$$ of $sockets$$)$socket$$.disconnect()})});log.create({id_app:"LOGOUT",id_func:"LOGOUT",action:"LOGOUT"},$user$$.email,$req$$.header("user-agent"),$req$$);$req$$.query.ep&&
36
- ($ep_id_error$$=(new Buffer($req$$.query.ep)).toString("base64"),Endpoint.deleteMany({ep_id:$ep_id_error$$},function($e$$){$e$$&&console.log("error when log out endpoint",$e$$)}));$res$$.send({message:$user$$.email+" logged out"})})})});$router$$.route("/notifies").get(function($req$$,$res$$){getNotifies($req$$.user.email,function($error$$,$notifies$$){if($error$$)return $res$$.status(400).send({error:$error$$.message||$error$$.error||$error$$});$res$$.send($notifies$$)})});$router$$.route("/register-endpoint").get(function($req$$,
37
- $res$$){var $endpoint$$=$req$$.query.ep;if($endpoint$$){var $ep_id$$=(new Buffer($endpoint$$)).toString("base64");Endpoint.findOne({ep_id:$ep_id$$},function($e$jscomp$0$$,$ep$$){if($e$jscomp$0$$)return $res$$.status(400).send($e$jscomp$0$$);$ep$$?($ep$$.user=$req$$.user.email,$ep$$.userAuth=$req$$.query.userAuth,$ep$$.userPublicKey=$req$$.query.userPublicKey):$ep$$=new Endpoint({ep_id:$ep_id$$,user:$req$$.user.email,endpoint:$endpoint$$,userAuth:$req$$.query.userAuth,userPublicKey:$req$$.query.userPublicKey});
38
- $ep$$.save(function($e$$,$rs$$){if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)})})}else $res$$.status(400).send({error:"H\u00e0m register-endpoint y\u00eau c\u1ea7u tham s\u1ed1 'ep'"})});$router$$.route("/remove-endpoint").get(function($req$$,$res$$){Endpoint.deleteMany({endpoint:$req$$.query.ep},$e$$=>{if($e$$)return console.error($e$$);$res$$.send("success!")})});let $wallet$$=global.getModel("wallet");$router$$.route("/sign").post(function($req$$,$res$$){let $access_token$$=$req$$.query.access_token,
39
- $dataToSign$$=$req$$.body,$id_app$$=$dataToSign$$.id_app;if(!$id_app$$)return $res$$.status(400).send("Data for sign miss id_app");findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,async function($error$$,$user$$){if($error$$)return $res$$.status(400).send($error$$);if($user$$)try{let $signature$$=await $wallet$$.sign($id_app$$,$user$$.email,$dataToSign$$);$res$$.send({signature:$signature$$})}catch($e$$){$res$$.status(400).send({error:$e$$.message||
40
- $e$$.error||$e$$})}else $res$$.status(400).send({error:"Not found user"})})})};
31
+ async function($error$jscomp$0$$,$_user$$){if($error$jscomp$0$$)return $res$$.status(400).send({error:$error$jscomp$0$$.message||$error$jscomp$0$$.error||$error$jscomp$0$$});if($_user$$){let $user$$=await User.findOne({email:$_user$$.email});if(!$user$$)return $res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng "+$_user$$.email});$error$jscomp$0$$=$req$$.body;$_user$$=await Token.findOne({token:$access_token$$})||{};if($user$$.local.password&&!$_user$$.once){if(!$error$jscomp$0$$.oldPassword)return $res$$.status(400).send({error:"B\u1ea1n ch\u01b0a nh\u1eadp m\u1eadt kh\u1ea9u hi\u1ec7n t\u1ea1i"});
32
+ if(!$user$$.validPassword($error$jscomp$0$$.oldPassword))return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u hi\u1ec7n t\u1ea1i kh\u00f4ng ch\u00ednh x\u00e1c"})}if($error$jscomp$0$$.newPassword){if($error$jscomp$0$$.reNewPassword!==$error$jscomp$0$$.newPassword)return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c"});if(!User.teststrengthPassword($error$jscomp$0$$.newPassword))return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u ph\u1ea3i c\u00f3 \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1 v\u00e0 bao g\u1ed3m \u00edt nh\u1ea5t m\u1ed9t ch\u1eef s\u1ed1, m\u1ed9t ch\u1eef hoa v\u00e0 m\u1ed9t ch\u1eef th\u01b0\u1eddng"})}else return $res$$.status(400).send({error:"B\u1ea1n ch\u01b0a nh\u1eadp m\u1eadt kh\u1ea9u m\u1edbi"});
33
+ $user$$.local.password=$user$$.generateHash($error$jscomp$0$$.newPassword);$user$$.local.rspassword=null;$user$$.save(function($error$$){if($error$$)return $res$$.status(400).send($error$$);Token.deleteMany({email:$user$$.email,token:{$ne:$access_token$$},ip:{$in:["",null,void 0]}},$e$$=>{$e$$&&console.error("error when remove old tokens",$e$$)});log.create({id_app:"CHANGEPASSWORD",id_func:"CHANGEPASSWORD",action:"CHANGEPASSWORD"},$user$$.email,$req$$.header("user-agent"),$req$$);$res$$.send({message:"\u0110\u00e3 c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng"})})}else return $res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng n\u00e0y"})})});
34
+ $router$$.route("/changepin").post(function($req$$,$res$$){let $access_token$$=$req$$.query.access_token;findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,async function($error$jscomp$16_passwords$$,$_user$jscomp$3_token$$){if($error$jscomp$16_passwords$$)return $res$$.status(400).send({error:$error$jscomp$16_passwords$$.message||$error$jscomp$16_passwords$$.error||$error$jscomp$16_passwords$$});if($_user$jscomp$3_token$$){let $user$$=await User.findOne({email:$_user$jscomp$3_token$$.email});
35
+ if(!$user$$)return $res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng "+$_user$jscomp$3_token$$.email});$error$jscomp$16_passwords$$=$req$$.body;$_user$jscomp$3_token$$=await Token.findOne({token:$access_token$$})||{};if($user$$.local.password&&!$_user$jscomp$3_token$$.once){if(!$error$jscomp$16_passwords$$.oldPassword)return $res$$.status(400).send({error:"B\u1ea1n ch\u01b0a nh\u1eadp m\u1eadt kh\u1ea9u"});if(!$user$$.validPassword($error$jscomp$16_passwords$$.oldPassword))return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u kh\u00f4ng ch\u00ednh x\u00e1c"})}if($error$jscomp$16_passwords$$.newPin){if($error$jscomp$16_passwords$$.reNewPin!==
36
+ $error$jscomp$16_passwords$$.newPin)return $res$$.status(400).send({error:"S\u1ed1 PIN x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c"});if(!User.teststrengthPin($error$jscomp$16_passwords$$.newPin))return $res$$.status(400).send({error:"S\u1ed1 Pin kh\u00f4ng h\u1ee3p l\u1ec7"})}else return $res$$.status(400).send({error:"B\u1ea1n ch\u01b0a nh\u1eadp s\u1ed1 PIN"});$user$$.local.pin=$user$$.generateHash($error$jscomp$16_passwords$$.newPin);$user$$.save(function($error$$){if($error$$)return $res$$.status(400).send($error$$);
37
+ log.create({id_app:"CHANGEPIN",id_func:"CHANGEPIN",action:"CHANGEPIN"},$user$$.email,$req$$.header("user-agent"),$req$$);$res$$.send({message:"\u0110\u00e3 c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng"})})}else return $res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng n\u00e0y"})})});$router$$.route("/user/logout").get(function($req$$,$res$$){var $access_token$$=$req$$.query.access_token;findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,
38
+ function($error$$,$user$$){if($error$$)return $res$$.status(400).send({error:$error$$.message||$error$$.error||$error$$});Token.deleteMany({token:$access_token$$},function($ep_id_error$$){if($ep_id_error$$)return $res$$.status(400).send($ep_id_error$$);($ep_id_error$$=global.clientIO[$access_token$$])&&global.socketIO&&$ep_id_error$$.forEach($id$$=>{global.socketIO.in($id$$).fetchSockets().then($sockets$$=>{for(const $socket$$ of $sockets$$)$socket$$.disconnect()})});log.create({id_app:"LOGOUT",id_func:"LOGOUT",
39
+ action:"LOGOUT"},$user$$.email,$req$$.header("user-agent"),$req$$);$req$$.query.ep&&($ep_id_error$$=(new Buffer($req$$.query.ep)).toString("base64"),Endpoint.deleteMany({ep_id:$ep_id_error$$},function($e$$){$e$$&&console.log("error when log out endpoint",$e$$)}));$res$$.send({message:$user$$.email+" logged out"})})})});$router$$.route("/notifies").get(function($req$$,$res$$){getNotifies($req$$.user.email,function($error$$,$notifies$$){if($error$$)return $res$$.status(400).send({error:$error$$.message||
40
+ $error$$.error||$error$$});$res$$.send($notifies$$)})});$router$$.route("/register-endpoint").get(function($req$$,$res$$){var $endpoint$$=$req$$.query.ep;if($endpoint$$){var $ep_id$$=(new Buffer($endpoint$$)).toString("base64");Endpoint.findOne({ep_id:$ep_id$$},function($e$jscomp$0$$,$ep$$){if($e$jscomp$0$$)return $res$$.status(400).send($e$jscomp$0$$);$ep$$?($ep$$.user=$req$$.user.email,$ep$$.userAuth=$req$$.query.userAuth,$ep$$.userPublicKey=$req$$.query.userPublicKey):$ep$$=new Endpoint({ep_id:$ep_id$$,
41
+ user:$req$$.user.email,endpoint:$endpoint$$,userAuth:$req$$.query.userAuth,userPublicKey:$req$$.query.userPublicKey});$ep$$.save(function($e$$,$rs$$){if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)})})}else $res$$.status(400).send({error:"H\u00e0m register-endpoint y\u00eau c\u1ea7u tham s\u1ed1 'ep'"})});$router$$.route("/remove-endpoint").get(function($req$$,$res$$){Endpoint.deleteMany({endpoint:$req$$.query.ep},$e$$=>{if($e$$)return console.error($e$$);$res$$.send("success!")})});
42
+ let $wallet$$=global.getModel("wallet");$router$$.route("/sign").post(function($req$$,$res$$){let $access_token$$=$req$$.query.access_token,$dataToSign$$=$req$$.body,$id_app$$=$dataToSign$$.id_app;if(!$id_app$$)return $res$$.status(400).send("Data for sign miss id_app");findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,async function($error$$,$user$$){if($error$$)return $res$$.status(400).send($error$$);if($user$$)try{let $signature$$=await $wallet$$.sign($id_app$$,
43
+ $user$$.email,$dataToSign$$);$res$$.send({signature:$signature$$})}catch($e$$){$res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$})}else $res$$.status(400).send({error:"Not found user"})})})};
@@ -1,8 +1,9 @@
1
1
  'use strict';const model=global.getModel("user"),underscore=require("underscore"),{isSupperAdmin}=require("../../libs/utils"),controller=require("../../controllers/controller");
2
2
  module.exports=function($contr_router$$){const $usersAdmin$$=configs.admins;$contr_router$$=new controller($contr_router$$,model,"users",{require_id_app:!1,sort:{email:1}});$contr_router$$.route();$contr_router$$.view=function($user$$,$items$$,$fn$$){$items$$.forEach(function($item$$){$item$$.status||!1===$item$$.status||($item$$.status=!0);$item$$.local&&($item$$.local.rePassword=$item$$.local.password,$item$$.address=$item$$.local.address,$item$$.phone=$item$$.local.phone,$item$$.password=$item$$.local.password,
3
- delete $item$$.local.password,delete $item$$.local.rePassword);$item$$.local.name||($item$$.local.name=$item$$.name);$item$$.local.email||($item$$.local.email=$item$$.email);$item$$.google&&(delete $item$$.google.token,delete $item$$.google.refreshToken);$item$$.facebook&&(delete $item$$.facebook.token,delete $item$$.facebook.refreshToken);delete $item$$.tokens;delete $item$$.token;delete $item$$.password;$item$$.admin=underscore.contains($usersAdmin$$,$item$$.email)||isSupperAdmin($item$$.email.toLowerCase())});
4
- $fn$$(null,$items$$)};$contr_router$$.getting=function($user$$,$id$$,$next$$){return underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase())?$next$$():$next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp \u0111\u1ed1i t\u01b0\u1ee3ng n\u00e0y")};$contr_router$$.finding=function($user$$,$condition$$,$next$$){return underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase())?$next$$(null,$condition$$):$next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp \u0111\u1ed1i t\u01b0\u1ee3ng n\u00e0y")};
5
- $contr_router$$.creating=function($user$$,$obj$$,$next$$,$options$$){if(!underscore.contains($usersAdmin$$,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp \u0111\u1ed1i t\u01b0\u1ee3ng n\u00e0y");if($options$$.data.local){if($options$$.data.local.password!=$options$$.data.local.rePassword)return $next$$("M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c");$obj$$.local.password=$obj$$.generateHash($obj$$.local.password)}$obj$$.local.name=
6
- $obj$$.name;$obj$$.local.email=$obj$$.email;return $next$$(null,$obj$$)};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$next$$){if($data$$.phone||$data$$.address)$data$$.local||($data$$.local={email:$data$$.email}),$data$$.phone&&($data$$.local.phone=$data$$.phone),$data$$.address&&($data$$.local.address=$data$$.address),$data$$.name&&($data$$.local.name=$data$$.name);if(!underscore.contains($usersAdmin$$,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase())&&$user$$.email!=$obj$$.email)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n c\u1eadp nh\u1eadt ng\u01b0\u1eddi s\u1eed d\u1ee5ng n\u00e0y");
7
- if($obj$$.email!=$data$$.email)return $next$$("Kh\u00f4ng th\u1ec3 \u0111\u1ed5i email");if($data$$.local){if($data$$.local.password!=$data$$.local.rePassword)return $next$$("M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c");$obj$$.local&&$data$$.local.password!=$obj$$.local.password&&$data$$.local.password&&($data$$.local.password=$obj$$.generateHash($data$$.local.password))}$data$$.local.name=$data$$.name;$data$$.local.email=$data$$.email;return $next$$(null,$data$$,$obj$$)};
8
- $contr_router$$.deleting=function($user$$,$obj$$,$next$$){if(underscore.contains($usersAdmin$$,$obj$$.email)||isSupperAdmin($obj$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng th\u1ec3 x\u00f3a ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb");if(!underscore.contains($usersAdmin$$,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n x\u00f3a ng\u01b0\u1eddi s\u1eed d\u1ee5ng n\u00e0y");$next$$(null,$obj$$)}};
3
+ delete $item$$.local.password,delete $item$$.local.pin,delete $item$$.local.rePassword);$item$$.local.name||($item$$.local.name=$item$$.name);$item$$.local.email||($item$$.local.email=$item$$.email);$item$$.google&&(delete $item$$.google.token,delete $item$$.google.refreshToken);$item$$.facebook&&(delete $item$$.facebook.token,delete $item$$.facebook.refreshToken);delete $item$$.tokens;delete $item$$.token;delete $item$$.password;delete $item$$.pin;$item$$.admin=underscore.contains($usersAdmin$$,
4
+ $item$$.email)||isSupperAdmin($item$$.email.toLowerCase())});$fn$$(null,$items$$)};$contr_router$$.getting=function($user$$,$id$$,$next$$){return underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase())?$next$$():$next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp \u0111\u1ed1i t\u01b0\u1ee3ng n\u00e0y")};$contr_router$$.finding=function($user$$,$condition$$,$next$$){return underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase())?
5
+ $next$$(null,$condition$$):$next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp \u0111\u1ed1i t\u01b0\u1ee3ng n\u00e0y")};$contr_router$$.creating=function($user$$,$obj$$,$next$$,$options$$){if(!underscore.contains($usersAdmin$$,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp \u0111\u1ed1i t\u01b0\u1ee3ng n\u00e0y");if($options$$.data.local){if($options$$.data.local.password!=$options$$.data.local.rePassword)return $next$$("M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c");
6
+ $obj$$.local.password=$obj$$.generateHash($obj$$.local.password)}$obj$$.local.name=$obj$$.name;$obj$$.local.email=$obj$$.email;return $next$$(null,$obj$$)};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$next$$){if($data$$.phone||$data$$.address)$data$$.local||($data$$.local={email:$data$$.email}),$data$$.phone&&($data$$.local.phone=$data$$.phone),$data$$.address&&($data$$.local.address=$data$$.address),$data$$.name&&($data$$.local.name=$data$$.name);if(!underscore.contains($usersAdmin$$,
7
+ $user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase())&&$user$$.email!=$obj$$.email)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n c\u1eadp nh\u1eadt ng\u01b0\u1eddi s\u1eed d\u1ee5ng n\u00e0y");if($obj$$.email!=$data$$.email)return $next$$("Kh\u00f4ng th\u1ec3 \u0111\u1ed5i email");if($data$$.local){if($data$$.local.password!=$data$$.local.rePassword)return $next$$("M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c");$obj$$.local&&$data$$.local.password!=$obj$$.local.password&&
8
+ $data$$.local.password&&($data$$.local.password=$obj$$.generateHash($data$$.local.password))}$data$$.local.name=$data$$.name;$data$$.local.email=$data$$.email;return $next$$(null,$data$$,$obj$$)};$contr_router$$.deleting=function($user$$,$obj$$,$next$$){if(underscore.contains($usersAdmin$$,$obj$$.email)||isSupperAdmin($obj$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng th\u1ec3 x\u00f3a ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb");if(!underscore.contains($usersAdmin$$,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n x\u00f3a ng\u01b0\u1eddi s\u1eed d\u1ee5ng n\u00e0y");
9
+ $next$$(null,$obj$$)}};
@@ -4,7 +4,7 @@ $detail$$.tk_co,$detail$$.ma_kh_co,function($error$$){if($error$$)return $callba
4
4
  module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,ma_ct.toLowerCase(),{isVoucher:!0,sort:{ngay_ct:-1,so_ct:-1}});$contr_router$$.route();$contr_router$$.post=function($obj$$,$fn$$){$fn$$||($fn$$=function(){});const $details_sc$$=[];$obj$$.details.forEach(function($d$$){$details_sc$$.push({...$d$$})});(new PostSocai($obj$$,$details_sc$$)).run(function($e$$,$rs$$){$fn$$($e$$,$rs$$)})};$contr_router$$.creating=function($user$$,$obj$$,$next$$){$obj$$.details||
5
5
  ($obj$$.details=[]);valid_detail($user$$,$obj$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$obj$$)})};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$next$$){valid_detail($user$$,$data$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$data$$,$obj$$)})};$contr_router$$.view=function($user$$,$items$$,$fn$$){const $id_app$$=$user$$.current_id_app;async.parallel({dv:function($callback$$){$items$$.filter($item$$=>$item$$.ma_dvcs).joinModel($id_app$$,
6
6
  dvcs,[{akey:"ma_dvcs",bkey:"_id",fields:[{name:"ten_dvcs",value:"ten_dvcs"}]}],function(){$callback$$()})},t_tien:function($callback$$){$items$$.forEach(function($r$$){$r$$.details&&($r$$.t_tien=$r$$.details.csum("tien"),$r$$.t_tien_nt=$r$$.details.csum("tien_nt"))});$callback$$()},details_tk:function($callback$$){async.each($items$$,function($r$$,$callback1$$){$r$$.details.filter($item$$=>$item$$.tk_no||$item$$.tk_co).joinModel($id_app$$,account,[{akey:"tk_no",bkey:"tk",fields:[{name:"ten_tk_no",
7
- value:"ten_tk"}]},{akey:"tk_co",bkey:"tk",fields:[{name:"ten_tk_co",value:"ten_tk"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_ts:function($callback$$){async.each($items$$,function($r$$,$callback1$$){$r$$.details.filter($item$$=>$item$$.id_ts).joinModel($id_app$$,qts,[{akey:"id_ts",bkey:"_id",fields:[{name:"ten_ts",value:"ten_ts"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_bp:function($callback$$){async.each($items$$,function($r$$,$callback1$$){$r$$.details.filter($item$$=>
7
+ value:"ten_tk"}]},{akey:"tk_co",bkey:"tk",fields:[{name:"ten_tk_co",value:"ten_tk"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_ts:function($callback$$){async.each($items$$,function($r$$,$callback1$$){$r$$.details.filter($item$$=>$item$$.id_ts).joinModel($id_app$$,qts,[{akey:"id_ts",bkey:"_id",fields:["ten_ts","so_the_ts"]}],function(){$callback1$$()})},function(){$callback$$()})},details_bp:function($callback$$){async.each($items$$,function($r$$,$callback1$$){$r$$.details.filter($item$$=>
8
8
  $item$$.ma_bp).joinModel($id_app$$,dmbp,[{akey:"ma_bp",bkey:"ma_bp",fields:[{name:"ten_bp",value:"ten_bp"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_dt:function($callback$$){async.map($items$$,function($r$$,$callback1$$){$r$$.details.filter($item$$=>$item$$.ma_dt).joinModel($id_app$$,dmdt,[{akey:"ma_dt",bkey:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_contract:function($callback$$){async.map($items$$,
9
9
  function($r$$,$callback1$$){$r$$.details.filter($item$$=>$item$$.ma_hd).joinModel($id_app$$,contract,[{akey:"ma_hd",bkey:"so_hd",fields:[{name:"ten_hd",value:"ten_hd"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_phi:function($callback$$){async.map($items$$,function($r$$,$callback1$$){$r$$.details.filter($item$$=>$item$$.ma_phi).joinModel($id_app$$,dmphi,[{akey:"ma_phi",bkey:"ma_phi",fields:[{name:"ten_phi",value:"ten_phi"}]}],function(){$callback1$$()})},function(){$callback$$()})}},
10
10
  function(){$fn$$(null,$items$$)})}};
package/server/route.js CHANGED
@@ -25,6 +25,7 @@ $file$$)}));$createRateLimiterMiddleware_limiter_others$$=$createRateLimiterMidd
25
25
  $req$$.query.resize).toUpperCase()){case "64":case "X":$size$$=64;$cache$$=!0;break;case "128":$size$$=128;$cache$$=!0;break;case "320":case "S":$size$$=320;$cache$$=!0;break;case "512":case "M":$size$$=512;$cache$$=!0;break;case "1024":case "L":$size$$=1024;$cache$$=!0;break;default:try{$size$$=Number($req$$.query.size||$req$$.query.resize)}catch($e$$){console.log("size param must be X or S or M or L or a number")}}if($size$$){let $file_name_resize$$=path.join($root_dir$$,$req$$.params.folder,String($size$$)+
26
26
  "."+$req$$.params.filename);if(fs.existsSync($file_name_resize$$))return gm($file_name_resize$$).stream(function($err$$,$stdout$$){$stdout$$.pipe($res$$)});$cache$$?gm($imgPath$$).resize($size$$,null).write($file_name_resize$$,function($error$$){if($error$$)console.log("Can't resize image \n"+$error$$),$res$$.sendFile($imgPath$$);else return gm($file_name_resize$$).stream(function($err$$,$stdout$$){$stdout$$.pipe($res$$)})}):gm($imgPath$$).resize($size$$,null).stream(function($err$$,$stdout$$){$stdout$$.pipe($res$$)})}else $res$$.sendFile($imgPath$$)}else $res$$.sendFile(path.join(__dirname,
27
27
  "images","others","noimage.png"))});const $Labelinfo$$=global.getModel("labelinfo");$app$$.get("/labels/:labelid",$createRateLimiterMiddleware_limiter_others$$,function($labelid_req$$,$res$$){$labelid_req$$=$labelid_req$$.params.labelid.toUpperCase();$Labelinfo$$.find({labelid:$labelid_req$$}).lean().exec(($e$$,$labels$$)=>{if($e$$)return $res$$.status(400).send($e$$);let $_labels$$={};$labels$$.forEach($l$$=>{$_labels$$[$l$$.textid]=$l$$});$res$$.send($_labels$$)})});const $qr$$=require("qr-image");
28
- $app$$.get("/qrcode",$createRateLimiterMiddleware_limiter_others$$,function($req$$,$res$$){let $report$$=$req$$.query.report;$report$$||($report$$=$req$$.query.data)&&($report$$=Buffer.from($report$$,"base64").toString("utf8"));if(!$report$$)return $res$$.status(400).send("miss parameter 'report'");setImmediate(()=>{const $code$$=$qr$$.image($report$$,{type:"svg"});$res$$.type("svg");$code$$.pipe($res$$)})});const $nodemailer$$=require("nodemailer");$app$$.post("/sendmail",function($req$$,$res$$){setImmediate(()=>
29
- {let $msg$$=$req$$.body;if("KHGFIUWPPC"!==$msg$$.secretKey)return $res$$.status(400).send("Not allow");if(!$msg$$.to||!$msg$$.subject||!$msg$$.message)return $res$$.status(400).send("Msg is not valid");$nodemailer$$.createTransport({host:"mail.flexbiz.app",port:25,secure:!1,auth:{user:"info",pass:""},tls:{rejectUnauthorized:!1},name:$msg$$.name}).sendMail({from:"info@flexbiz.app",to:$msg$$.to,subject:$msg$$.subject,text:$msg$$.message,html:$msg$$.message},$e$$=>{if($e$$)return $res$$.status(400).send($e$$);
30
- $res$$.send("OK")})})})}$cb$$()};
28
+ $app$$.get("/qrcode",$createRateLimiterMiddleware_limiter_others$$,function($req$$,$res$$){let $report$$=$req$$.query.report;$report$$||($report$$=$req$$.query.data)&&($report$$=Buffer.from($report$$,"base64").toString("utf8"));if(!$report$$)return $res$$.status(400).send("miss parameter 'report'");setImmediate(()=>{const $code$$=$qr$$.image($report$$,{type:"svg"});$res$$.type("svg");$code$$.pipe($res$$)})});if(configs.has_api_barcode){console.log("creating api barcode....");const $JsBarcode$$=require("jsbarcode"),
29
+ {createCanvas:$createCanvas$$}=require("canvas");$app$$.get("/barcode",$createRateLimiterMiddleware_limiter_others$$,function($height_req$$,$res$$){let $code$$=$height_req$$.query.code||"code128",$data$$=$height_req$$.query.data,$width$$=Number($height_req$$.query.width||4);$height_req$$=Number($height_req$$.query.height||200);if(!$data$$)return $res$$.status(400).send({error:"Thi\u1ebfu c\u00e1c tham s\u1ed1 data"});try{const $canvas$$=$createCanvas$$();$JsBarcode$$($canvas$$,$data$$,{format:$code$$,
30
+ width:$width$$,height:$height_req$$});$canvas$$.pngStream().pipe($res$$)}catch($e$$){console.error($e$$,$code$$,$data$$),$res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$})}})}const $nodemailer$$=require("nodemailer");$app$$.post("/sendmail",function($req$$,$res$$){setImmediate(()=>{let $msg$$=$req$$.body;if("KHGFIUWPPC"!==$msg$$.secretKey)return $res$$.status(400).send("Not allow");if(!$msg$$.to||!$msg$$.subject||!$msg$$.message)return $res$$.status(400).send("Msg is not valid");$nodemailer$$.createTransport({host:"mail.flexbiz.app",
31
+ port:25,secure:!1,auth:{user:"info",pass:""},tls:{rejectUnauthorized:!1},name:$msg$$.name}).sendMail({from:"info@flexbiz.app",to:$msg$$.to,subject:$msg$$.subject,text:$msg$$.message,html:$msg$$.message},$e$$=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send("OK")})})})}$cb$$()};