UNPKG

flexbiz-server

Version:

Flexible Server

10 lines (9 loc) 4.33 kB
const model=global.getModel("productcode"),controller=require("../../controllers/controller"),crypto=require("crypto"),qr=require("qr-image"),ejs=require("ejs"),path=require("path"),viewsDir=path.join(__dirname,"../../templates"),renderView=($data$$,$templateName$$="product-verify-result.ejs")=>new Promise(($resolve$$,$reject$$)=>{const $filePath$$=path.join(viewsDir,$templateName$$);ejs.renderFile($filePath$$,$data$$,($err$$,$str$$)=>{if($err$$)return $reject$$($err$$);$resolve$$($str$$)})}); module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"productcode",{unique:["code"],notNeedRight:($user$$,$options$$={})=>($options$$.action||"").toLowerCase()=="view"?!0:!1,onView:async($user$$,$items$$,$next$$)=>{await $items$$.asyncJoinModel2($user$$.current_id_app,"dmvt",{where:{dmvt:"_id"},fields:["ma_vt","ten_vt","picture"]});$next$$(null,$items$$)},onCreating:async($qrImage_user$$,$obj$$,$next$$)=>{if($obj$$.ma_vt&&!$obj$$.dmvt){let $vt$$=await global.getModel("dmvt").findOne({id_app:$qrImage_user$$.current_id_app, ma_vt:$obj$$.ma_vt}).lean();if(!$vt$$)return $next$$(`S\u1ea3n ph\u1ea9m kh\u00f4ng t\u1ed3n t\u1ea1i ${$obj$$.ma_vt}`);$obj$$.dmvt=$vt$$._id}$qrImage_user$$=`data:image/png;base64,${qr.imageSync(`${configs.api_url||configs.domain}/api/${$qrImage_user$$.current_id_app}/productcode/verify/${$obj$$.code}?access_token=${configs.public_token}`,{type:"png",margin:2}).toString("base64")}`;$obj$$.qr_image=$qrImage_user$$;$next$$(null,$obj$$)}});$contr_router$$.createRoute("create-codes/:ma_vt/:quantity", async($req$$,$next$$)=>{try{var $createdCodes_ma_vt$$=$req$$.params.ma_vt;const $quantity$$=Number($req$$.params.quantity||1),$product$$=await mongoose.model("dmvt").findOne({ma_vt:$createdCodes_ma_vt$$,id_app:$req$$.user.current_id_app}).lean();if(!$product$$)return $next$$({error:"S\u1ea3n ph\u1ea9m kh\u00f4ng t\u1ed3n t\u1ea1i"});$createdCodes_ma_vt$$=[];for(let $i$$=0;$i$$<($quantity$$||1);$i$$++){const $uniqueString$$=crypto.randomBytes(6).toString("hex"),$qrImage$$=`data:image/png;base64,${qr.imageSync(`${configs.api_url|| configs.domain}/api/${$req$$.user.current_id_app}/productcode/verify/${$uniqueString$$}?access_token=${configs.public_token}`,{type:"png",margin:2}).toString("base64")}`;await model.create({id_app:$req$$.user.current_id_app,code:$uniqueString$$,dmvt:$product$$._id,ma_vt:$product$$.ma_vt,qr_image:$qrImage$$});$createdCodes_ma_vt$$.push({uniqueString:$uniqueString$$,qrImage:$qrImage$$})}$next$$(null,{success:!0,count:$createdCodes_ma_vt$$.length})}catch($error$$){$next$$({error:$error$$.message})}}, {action_code:"add"});$contr_router$$.createRoute("verify/:code",async($req$$,$next$$)=>{const {code:$code$$}=$req$$.params,$clientIp$$=$req$$.headers["x-forwarded-for"]||$req$$.socket.remoteAddress,$userAgent$$=$req$$.headers["user-agent"];try{const $codeInfo$$=await model.findOne({code:$code$$,id_app:$req$$.user.current_id_app}).populate("dmvt");let $renderData$$;$codeInfo$$?($codeInfo$$.scan_history.push({ip:$clientIp$$,user_agent:$userAgent$$}),$codeInfo$$.scan_count+=1,$codeInfo$$.is_scanned? (await $codeInfo$$.save(),$renderData$$={status:"WARNING",code:$code$$,company:$req$$.user.current_app_info||{},scanCount:$codeInfo$$.scan_count,product:$codeInfo$$.dmvt,message:`C\u1ea3nh b\u00e1o: S\u1ea3n ph\u1ea9m n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t tr\u01b0\u1edbc \u0111\u00f3 v\u00e0o ng\u00e0y ${$codeInfo$$.scan_history[0].scanned_at.toLocaleString()}. N\u1ebfu b\u1ea1n v\u1eeba m\u1edbi b\u00f3c tem, c\u00f3 th\u1ec3 \u0111\u00e2y l\u00e0 h\u00e0ng gi\u1ea3.`}):($codeInfo$$.is_scanned= !0,await $codeInfo$$.save(),$renderData$$={status:"GENUINE",code:$code$$,company:$req$$.user.current_app_info||{},product:$codeInfo$$.dmvt,scanCount:$codeInfo$$.scan_count,message:"Ch\u00fac m\u1eebng! S\u1ea3n ph\u1ea9m ch\u00ednh h\u00e3ng v\u00e0 \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t l\u1ea7n \u0111\u1ea7u ti\u00ean."})):$renderData$$={status:"FAKE",code:$code$$,company:$req$$.user.current_app_info||{},scanCount:0,message:"M\u00e3 s\u1ea3n ph\u1ea9m kh\u00f4ng t\u1ed3n t\u1ea1i tr\u00ean h\u1ec7 th\u1ed1ng."}; const $html$$=await renderView($renderData$$);$next$$(null,$html$$)}catch($error$$){Logger.error("[productcode]",$error$$),$next$$("System Error")}});$contr_router$$.route()};