UNPKG

flexbiz-server

Version:

Flexible Server

28 lines (27 loc) 13.7 kB
'use strict';const model=global.getModel("app"),Participant=global.getModel("participant"),User=global.getModel("user"),UserGroup=global.getModel("usergroup"),Customer=global.getModel("customer"),Trangthai=global.getModel("trangthai"),_Notification=global.getModel("notification"),underscore=require("underscore"),async=require("async"),{isSupperAdmin,isMobilePhone}=require("../../libs/utils"),permission=require("../../libs/permission"),controller=require("../../controllers/controller"),fs=require("fs"), path=require("path"),StaticPool=require("../../libs/WorkerStaticPool"),calcTimeExpired=$item$$=>{$item$$.expire_date?($item$$.so_ngay_con_lai=Math.roundBy(($item$$.expire_date-new Date)/864E5,0),0>$item$$.so_ngay_con_lai&&($item$$.so_ngay_con_lai=0)):$item$$.so_ngay_con_lai=0},getParticipantInfo=async($user$$,$item$$,$callback$$)=>{let $_ps$$=await Participant.getPar($user$$,$item$$);$item$$.appAdmin=$_ps$$.admin;$item$$.group_id=$_ps$$.group_id;$item$$.phu_trach_nhom=($_ps$$.group||{}).phu_trach== $user$$.email;$item$$.par=$_ps$$;$callback$$()},createUserOwner=async($obj$$,$next$$)=>{let $owner$$=$obj$$.owner;if($owner$$&&$obj$$.user_created!==$owner$$){$owner$$=$owner$$.toLowerCase();let $user$$=await User.findOne({email:$owner$$});if(!$user$$){$user$$=new User;$user$$.email=$owner$$;$user$$.name=$owner$$.split("@")[0];$user$$.local={};$user$$.local.email=$user$$.email;$user$$.local.name=$user$$.name;$user$$.local.picture="/images/avatar.jpg";$user$$.local.password=$user$$.generateHash($user$$.email+ ($obj$$.default_password||$user$$.email+"@123456"));try{await $user$$.save();let $_p$$={email:$owner$$,name:$owner$$.split("@")[0],admin:!0,active:!0,cancel:!1,id_app:$obj$$._id.toString()};await new Promise($resolve$$=>{Participant.createParticipant($_p$$,$e$$=>{$e$$&&console.error("participant",$_p$$.email,"exists",$e$$);$resolve$$()})})}catch($e$$){console.error("can't create user owner",$e$$)}}}let $_p$$={email:$obj$$.user_created,name:$obj$$.user_created.split("@")[0],admin:!0,active:!0,cancel:!1, id_app:$obj$$._id.toString()};Participant.createParticipant($_p$$,$e$$=>{$e$$&&console.error("participant",$_p$$.email,"exists",$e$$);$next$$(null,$obj$$)});Participant.createParticipant({email:"public",name:"Public",admin:!1,active:!0,cancel:!1,id_app:$obj$$._id.toString()},$e$$=>{$e$$&&console.error("error add public user to app",$e$$)})}; module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"app",{unique:["app_code"],require_id_app:!1,sort:{name:1}});$contr_router$$.route();$contr_router$$.found=($user$$,$condition$$,$items$$,$fn$$)=>{async.mapSeries($items$$,($item$$,$callback$$)=>{calcTimeExpired($item$$);$callback$$()},$e$$=>{$e$$&&console.error($e$$);$fn$$(null,$items$$)})};$contr_router$$.view=function($user$$,$items$$,$fn$$){$items$$.forEach($item$$=>{$item$$.trang_thai=$item$$.trang_thai|| "0"});async.parallel({trangthai:$callback$$=>{$items$$.joinModel2(null,Trangthai,{where:$item$$=>({ma_ct:"APP",ma_trang_thai:$item$$.trang_thai}),fields:["ten_trang_thai","color"]},()=>{$callback$$()})},show_gia_von_va_nguoi_duyet:$callback$jscomp$0$$=>{async.mapSeries($items$$,($item$$,$callback$$)=>{$item$$.options=$item$$.options||{};$item$$.show_gia_von=!0;$callback$$()},()=>{$callback$jscomp$0$$()})},get_par_info:$callback$jscomp$0$$=>{async.mapSeries($items$$,($item$$,$callback$$)=>{getParticipantInfo($user$$, $item$$,()=>{$item$$.appAdmin||(delete $item$$.viettel_user,delete $item$$.viettel_password,delete $item$$.viettel_url_service,delete $item$$.wallet_address,delete $item$$.wallet_token,delete $item$$.voiip_access_token,delete $item$$.sip_password,delete $item$$.email_host,delete $item$$.email_port,delete $item$$.email_secure,delete $item$$.email_authMethod,delete $item$$.email_user,delete $item$$.email_pass,delete $item$$.email_name,delete $item$$.zalo_app_id,delete $item$$.zalo_secret_key,delete $item$$.zalo_code, delete $item$$.zalo_oa_id,delete $item$$.zalo_access_token,delete $item$$.zalo_refresh_token,delete $item$$.google_credentials,delete $item$$.vnpt_user,delete $item$$.vnpt_password,delete $item$$.vnpt_url_service);$callback$$()})},()=>{$callback$jscomp$0$$()})}},function(){$items$$.forEach(function($item$$){calcTimeExpired($item$$)});$fn$$(null,$items$$)})};$contr_router$$.getting=async($user$$,$id_p$$,$next$$)=>{($id_p$$=await Participant.findOne({id_app:$id_p$$,email:$user$$.email}).lean())&&!0!== $id_p$$.cancel?$next$$():(console.error("participant info of",$user$$.email,$id_p$$),$next$$("Getting appinfo is not allowed"))};$contr_router$$.finding=async($user$$,$condition$$,$next$$)=>{var $_appsOfUser_or1$$=await Participant.appsOfUser($user$$.email);$_appsOfUser_or1$$=$_appsOfUser_or1$$.map($p$$=>$p$$.id_app);let $user_created_condition$$={user_created:$user$$.email};$_appsOfUser_or1$$=[{_id:{$in:$_appsOfUser_or1$$}},$user_created_condition$$];let $or2$$=$condition$$.$or;delete $condition$$.$or; $or2$$?$condition$$.$and=[{$or:$_appsOfUser_or1$$},{$or:$or2$$}]:$condition$$.$or=$_appsOfUser_or1$$;$condition$$.working||(isSupperAdmin($user$$.email.toLowerCase())?delete $user_created_condition$$.user_created:underscore.contains(configs.admins,$user$$.email)&&($user_created_condition$$.user_created={$nin:["invncur@gmail.com","admin"]}));delete $condition$$.working;$user$$.token_id_app&&($condition$$._id=$user$$.token_id_app);$user$$.token_id_apps&&0<$user$$.token_id_apps.length&&($condition$$._id= {$in:$user$$.token_id_apps});$next$$(null,$condition$$)};$contr_router$$.creating=async function($now_user$$,$obj$$,$next$$){if(!underscore.contains(configs.admins,$now_user$$.email)&&!isSupperAdmin($now_user$$.email.toLowerCase())){if(await model.findOne({user_created:$now_user$$.email},{_id:1}))return $next$$("M\u1ed7i t\u00e0i kho\u1ea3n ch\u1ec9 \u0111\u01b0\u1ee3c ph\u00e9p t\u1ea1o m\u1ed9t c\u00f4ng ty");delete $obj$$.allow_modules;delete $obj$$.trang_thai;delete $obj$$.sale_online}if(!$obj$$.ngay_dn)return $next$$(Error("Ng\u00e0y \u0111\u1ea7u n\u0103m t\u00e0i ch\u00ednh kh\u00f4ng \u0111\u01b0\u1ee3c tr\u1ed1ng")); $obj$$.ngay_ks||($obj$$.ngay_ks=new Date("2000-01-01"));$obj$$.ngay_ky1||($obj$$.ngay_ky1=new Date);$now_user$$=new Date;$now_user$$.setMonth($now_user$$.getMonth()+1);$obj$$.expire_date=new Date($now_user$$);$obj$$.nam_bd=$obj$$.ngay_ky1.getFullYear();$obj$$.options=$obj$$.options||{};$next$$(null,$obj$$)};$contr_router$$.created=function($user$$,$obj$$,$next$$){require("../../libs/initDatabase").init($obj$$._id,async $error$$=>{$error$$&&console.error("Can't init database \n"+$error$$);createUserOwner($obj$$, $e$$=>{$e$$&&console.error($e$$);$next$$(null,$obj$$)})})};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$next$$){const $usersAdmin$$=configs.admins;delete $data$$.ngay_ks;underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase())||(delete $data$$.allow_modules,delete $data$$.expire_date,delete $data$$.trang_thai,delete $data$$.sale_online,delete $data$$.menu_code);permission.isAdmin($obj$$._id,$user$$.email,function($e$$,$admin$$){if(!$admin$$&&!underscore.contains($usersAdmin$$, $user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$($user$$.email+" have not permission");$data$$.ngay_ky1&&($data$$.nam_bd=(new Date($data$$.ngay_ky1)).getFullYear());$data$$.options&&0===Object.keys($data$$.options).length&&delete $data$$.options;$data$$.options=$data$$.options?{...$obj$$.options,...$data$$.options}:$obj$$.options||{};$next$$(null,$data$$,$obj$$)})};$contr_router$$.updated=function($user$$,$obj$$,$next$$){createUserOwner($obj$$,$e$$=>{$e$$&&console.error($e$$); $next$$(null,$obj$$)})};$contr_router$$.deleting=function($user$$,$obj$$,$next$$){const $usersAdmin$$=configs.admins;if($user$$.email!=$obj$$.user_created&&!underscore.contains($usersAdmin$$,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n x\u00f3a c\u00f4ng ty n\u00e0y");$next$$(null,$obj$$)};$contr_router$$.deleted=function($user$$,$obj$$,$next$$){async.mapSeries(fs.readdirSync(path.dirname(path.dirname(__dirname))+"/models").filter($f$$=> 0<$f$$.indexOf(".js")),($file$$,$callback$$)=>{try{let $_model$$=global.getModel(""+$file$$);underscore.has($_model$$.schema.paths,"id_app")?$_model$$.deleteMany({id_app:$obj$$._id},()=>{console.log("Deleted ",$file$$,"id_app",$obj$$._id);$callback$$()}):$callback$$()}catch($e$$){console.error("Can't delete mode",$file$$,"error:",$e$$.message),$callback$$()}},()=>{$next$$(null,$obj$$)})};$contr_router$$.router.route($contr_router$$.route_name+"/backup/:id").get(function($req$$,$res$$){let $email$$= $req$$.user.email,$id_app$$=$req$$.params.id;permission.isAdmin($id_app$$,$email$$,function($backupWorkerFile_e$$,$admin$$){if(!$admin$$)return $res$$.status(400).send({error:"Ch\u1ec9 admin m\u1edbi c\u00f3 quy\u1ec1n backup d\u1eef li\u1ec7u c\u1ee7a c\u00f4ng ty"});global.backupPool||($backupWorkerFile_e$$=path.dirname(path.dirname(__dirname))+"/workers/backupApp.js",global.backupPool=new StaticPool($backupWorkerFile_e$$,0,1));global.backupPool.exec({id:$id_app$$,user:$email$$,dateFrom:$req$$.query.dateFrom, dateTo:$req$$.query.dateTo,backup_app_info:$req$$.query.backup_app_info,configs:{database:global.configs.database}},$response$$=>{if($response$$.error)return $res$$.status(400).send($response$$.error);$res$$.sendFile(path.dirname(path.dirname(__dirname))+"/backup/"+$response$$.file)})})});$contr_router$$.router.route($contr_router$$.route_name+"/restore/:id").post(function($req$$,$res$$){let $fileZip$$;$req$$.files&&$req$$.files.backup&&$req$$.files.backup.path?$fileZip$$=$req$$.files.backup.path: $req$$.body&&$req$$.body.file_from_server&&fs.existsSync($req$$.body.file_from_server)&&($fileZip$$=$req$$.body.file_from_server);if(!$fileZip$$)return $res$$.status(400).send("Kh\u00f4ng t\u00ecm th\u1ea5y file backup");let $email$$=$req$$.user.email,$id_app$$=$req$$.params.id;permission.isAdmin($id_app$$,$email$$,function($e$$,$admin$$){if(!$admin$$)return $res$$.status(400).send({error:"Ch\u1ec9 admin m\u1edbi c\u00f3 quy\u1ec1n restore d\u1eef li\u1ec7u c\u1ee7a c\u00f4ng ty"});global.restorePool|| ($e$$=path.dirname(path.dirname(__dirname))+"/workers/restoreApp.js",global.restorePool=new StaticPool($e$$));global.restorePool.exec({id:$id_app$$,user:$email$$,file:$fileZip$$,configs:{database:global.configs.database}},$response$$=>{$response$$.error?_Notification.createNotification($email$$,$email$$,$response$$.error,$response$$.error,null,null,!0,$req$$.access_token,!0):_Notification.createNotification($email$$,$email$$,$response$$.result,$response$$.result,null,null,!0,$req$$.access_token,!0)}); $res$$.send("Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Xin ch\u1edd trong gi\u00e2y l\u00e1t")})});$contr_router$$.router.route($contr_router$$.route_name+"/apps/:email_owner").get(function($query_req$$,$res$$){let $email$$=$query_req$$.params.email_owner;if(!underscore.contains(configs.admins,$query_req$$.user.email)&&!isSupperAdmin($query_req$$.user.email.toLowerCase()))return $res$$.status(403).send("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp t\u00ednh n\u0103ng n\u00e0y"); $query_req$$={};"all"!=$email$$.toLowerCase()&&($query_req$$.user_created=$email$$);model.find($query_req$$).lean().exec(function($error$$,$apps$$){if($error$$)return $res$$.status(400).send($error$$);$apps$$.forEach(function($item$$){calcTimeExpired($item$$)});$res$$.send($apps$$)})});$contr_router$$.router.route($contr_router$$.route_name+"/remove/:id").get(async($app_req$$,$res$$)=>{var $id_app$jscomp$2_p$$=$app_req$$.params.id;let $email$$=$app_req$$.user.email;$app_req$$=await model.findById($id_app$jscomp$2_p$$); if(!$app_req$$)return $res$$.status(400).send("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");$app_req$$.participants&&($app_req$$.participants=$app_req$$.participants.filter($p$$=>$p$$.email!==$email$$),$app_req$$.save(()=>{}));if($id_app$jscomp$2_p$$=await Participant.findOne({id_app:$id_app$jscomp$2_p$$,email:$email$$}))await Participant.deleteOne({_id:$id_app$jscomp$2_p$$._id}),$id_app$jscomp$2_p$$=`${$id_app$jscomp$2_p$$.name} (${$email$$}) \u0111\u00e3 r\u1eddi kh\u1ecfi c\u00f4ng ty ${$app_req$$.name}`, _Notification.createNotification($email$$,$app_req$$.user_created,$id_app$jscomp$2_p$$,$id_app$jscomp$2_p$$);$res$$.send("ok")});$contr_router$$.router.route($contr_router$$.route_name+"/join/:id/:group").get(async($req$$,$res$$)=>{let $id_app$$=$req$$.params.id,$group_id$$=$req$$.params.group,$email$$=$req$$.user.email,$user$$=$req$$.user,$app$$=await model.findById($id_app$$);if(!$app$$)return $res$$.status(400).send("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");if(!await Participant.findOne({id_app:$id_app$$, email:$email$$})&&$group_id$$&&global.mongoose.Types.ObjectId.isValid($group_id$$))try{if(!await UserGroup.findOne({_id:$group_id$$,is_customer_group:!0}))return $res$$.status(400).send("Nh\u00f3m kh\u00e1ch h\u00e0ng kh\u00f4ng t\u1ed3n t\u1ea1i");Participant.createParticipant({id_app:$id_app$$,email:$email$$,name:$user$$.name,group_id:$group_id$$,active:!0},$cust_e$$=>{if($cust_e$$)return $res$$.status(400).send("can't add user",$user$$.email,"to company",$app$$.name);$cust_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};isMobilePhone($user$$.email,["vi-VN"])&&($cust_e$$.dien_thoai=$user$$.email);try{Customer.asyncCreateCustomer($cust_e$$)}catch($e$$){console.log("Auto create new customer with error:",$e$$.message)}$res$$.send("ok")})}catch($e$$){$res$$.status(400).send($e$$.message)}$res$$.send("ok")})};