flexbiz-server 12.2.5 → 12.3.0

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.
Files changed (995) hide show
  1. package/package.json +4 -2
  2. package/server/app.js +18 -0
  3. package/server/auths/bearer.js +3 -0
  4. package/server/auths/facebook.js +13 -0
  5. package/server/auths/google.js +14 -0
  6. package/server/auths/local.js +64 -0
  7. package/server/cluster.js +23 -0
  8. package/server/controllers/controller.js +349 -0
  9. package/server/controllers/controllerRPT.js +71 -0
  10. package/server/data/account.js +479 -0
  11. package/server/data/ckgtluong.js +65 -0
  12. package/server/data/currency.js +4 -0
  13. package/server/data/dmdvt.js +54 -0
  14. package/server/data/dmkho.js +3 -0
  15. package/server/data/dvcs.js +3 -0
  16. package/server/data/kbm_bcdkt.js +4843 -0
  17. package/server/data/kbm_kqhdkd.js +655 -0
  18. package/server/data/kbm_lcttgt.js +2386 -0
  19. package/server/data/kbm_lctttt.js +934 -0
  20. package/server/data/kbm_tkgtgt.js +560 -0
  21. package/server/data/parameter.js +178 -0
  22. package/server/data/ptthanhtoan.js +3 -0
  23. package/server/data/rpt.js +123 -0
  24. package/server/data/rptobject.js +2 -0
  25. package/server/data/sys/labelinfo.js +127789 -0
  26. package/server/data/sys/listinfo.js +223822 -0
  27. package/server/data/sys/quanhuyen.js +9928 -0
  28. package/server/data/sys/reportinfo.js +12132 -0
  29. package/server/data/sys/tableinfo.js +5873 -0
  30. package/server/data/sys/templatestore.js +1988 -0
  31. package/server/data/sys/tinhthanh.js +821 -0
  32. package/server/data/sys/trangthai.js +12301 -0
  33. package/server/data/sys/user.js +21 -0
  34. package/server/data/sys/vietqrbanks.js +1 -0
  35. package/server/data/tc.js +5 -0
  36. package/server/data/usergroup.js +47 -0
  37. package/server/data/vat.js +115 -0
  38. package/server/defaultConfigs.js +152 -0
  39. package/server/global.js +21 -0
  40. package/server/libs/BlockchainTransactionPool.js +3 -0
  41. package/server/libs/WorkerPool.js +4 -0
  42. package/server/libs/WorkerStaticPool.js +5 -0
  43. package/server/libs/assbonus.js +7 -0
  44. package/server/libs/backup.js +2 -0
  45. package/server/libs/blockchainconnect.js +13 -0
  46. package/server/libs/cdpsdiem.js +5 -0
  47. package/server/libs/cdpsdt.js +7 -0
  48. package/server/libs/cdpskh.js +9 -0
  49. package/server/libs/cdpsnphep.js +6 -0
  50. package/server/libs/cdpstk.js +11 -0
  51. package/server/libs/ckcn.js +10 -0
  52. package/server/libs/ckdiem.js +5 -0
  53. package/server/libs/ckdt.js +6 -0
  54. package/server/libs/cknphep.js +6 -0
  55. package/server/libs/cktk.js +4 -0
  56. package/server/libs/cktt.js +7 -0
  57. package/server/libs/ckvt.js +11 -0
  58. package/server/libs/ckvtcapphat.js +6 -0
  59. package/server/libs/ckvtnpp.js +10 -0
  60. package/server/libs/ckvttt.js +11 -0
  61. package/server/libs/ctdiem.js +6 -0
  62. package/server/libs/ctvt.js +7 -0
  63. package/server/libs/ctvtnpp.js +7 -0
  64. package/server/libs/ctvttt.js +7 -0
  65. package/server/libs/databanle.js +15 -0
  66. package/server/libs/databanlenpp.js +8 -0
  67. package/server/libs/databanletheongay.js +27 -0
  68. package/server/libs/dkcn.js +9 -0
  69. package/server/libs/dkdiem.js +5 -0
  70. package/server/libs/dkdt.js +6 -0
  71. package/server/libs/dknphep.js +6 -0
  72. package/server/libs/dktk.js +4 -0
  73. package/server/libs/dktt.js +7 -0
  74. package/server/libs/dkvt.js +7 -0
  75. package/server/libs/dkvtnpp.js +7 -0
  76. package/server/libs/dkvttt.js +7 -0
  77. package/server/libs/dncn.js +6 -0
  78. package/server/libs/dntk.js +4 -0
  79. package/server/libs/dntt.js +6 -0
  80. package/server/libs/dstkcn.js +1 -0
  81. package/server/libs/dstktt.js +1 -0
  82. package/server/libs/dtbanletheonpp.js +17 -0
  83. package/server/libs/dtbanletheosp.js +15 -0
  84. package/server/libs/dtbanletheospnpp.js +15 -0
  85. package/server/libs/email.js +2 -0
  86. package/server/libs/excel.js +2 -0
  87. package/server/libs/getGiaban.js +64 -0
  88. package/server/libs/getGiabanAsync.js +1 -0
  89. package/server/libs/getNotifies.js +1 -0
  90. package/server/libs/htmlReport.js +6 -0
  91. package/server/libs/initDatabase.js +7 -0
  92. package/server/libs/kpistatus.js +33 -0
  93. package/server/libs/load-template.js +3 -0
  94. package/server/libs/mailmanagement.js +14 -0
  95. package/server/libs/mongooseDeletePost.js +5 -0
  96. package/server/libs/mongooseLeanId.js +3 -0
  97. package/server/libs/onepay-payment.js +4 -0
  98. package/server/libs/parse-template.js +5 -0
  99. package/server/libs/permission.js +45 -0
  100. package/server/libs/phanbokh.js +3 -0
  101. package/server/libs/post-book.js +21 -0
  102. package/server/libs/post-socai.js +21 -0
  103. package/server/libs/post-sokho.js +23 -0
  104. package/server/libs/prototypes.js +29 -0
  105. package/server/libs/psdt.js +1 -0
  106. package/server/libs/pskh.js +1 -0
  107. package/server/libs/pstk.js +1 -0
  108. package/server/libs/redis-cache.js +15 -0
  109. package/server/libs/restore.js +1 -0
  110. package/server/libs/schedule.js +18 -0
  111. package/server/libs/textReport.js +3 -0
  112. package/server/libs/thnxt.js +8 -0
  113. package/server/libs/thnxtnpp.js +8 -0
  114. package/server/libs/thnxttt.js +8 -0
  115. package/server/libs/tinhGt.js +7 -0
  116. package/server/libs/tinhGtCapnhatPNK.js +7 -0
  117. package/server/libs/tinhGtPhanboHeSo.js +12 -0
  118. package/server/libs/tinhGtPhanboSltp.js +10 -0
  119. package/server/libs/tinhGtPhanboYtcp.js +12 -0
  120. package/server/libs/tinhGtSltk.js +10 -0
  121. package/server/libs/tinhGtThcppstk.js +10 -0
  122. package/server/libs/tinhGtTrucTiep.js +8 -0
  123. package/server/libs/tinhGtXoa.js +3 -0
  124. package/server/libs/tinhgiatb.js +40 -0
  125. package/server/libs/tinhgiatb1vt.js +5 -0
  126. package/server/libs/tinhhoahong.js +64 -0
  127. package/server/libs/tinhhoahongnpp.js +46 -0
  128. package/server/libs/tinhkhauhao1ts.js +12 -0
  129. package/server/libs/tinhkhauhaots.js +8 -0
  130. package/server/libs/tuoinophaithu.js +10 -0
  131. package/server/libs/tuoinophaitra.js +9 -0
  132. package/server/libs/utils.js +45 -0
  133. package/server/libs/validate.js +4 -0
  134. package/server/libs/validator-acc-cust.js +1 -0
  135. package/server/libs/validator-account.js +4 -0
  136. package/server/libs/validator-vt.js +2 -0
  137. package/server/libs/validator.js +10 -0
  138. package/server/libs/vsocai.js +7 -0
  139. package/server/menu.js +39 -0
  140. package/server/models/account.js +6 -0
  141. package/server/models/afflink.js +2 -0
  142. package/server/models/app.js +13 -0
  143. package/server/models/approve.js +91 -0
  144. package/server/models/area.js +4 -0
  145. package/server/models/assabcihandler.js +35 -0
  146. package/server/models/assbank.js +20 -0
  147. package/server/models/assbooking.js +4 -0
  148. package/server/models/assbuy.js +3 -0
  149. package/server/models/asscashwithdraw.js +3 -0
  150. package/server/models/assfindhash.js +2 -0
  151. package/server/models/assinvestment.js +14 -0
  152. package/server/models/assissue.js +2 -0
  153. package/server/models/asskey.js +15 -0
  154. package/server/models/assneedtobuy.js +6 -0
  155. package/server/models/assperiod.js +8 -0
  156. package/server/models/assproduct.js +12 -0
  157. package/server/models/assprofitsharing.js +3 -0
  158. package/server/models/assreceiver.js +2 -0
  159. package/server/models/assrequest.js +11 -0
  160. package/server/models/asssell.js +7 -0
  161. package/server/models/asstransaction.js +2 -0
  162. package/server/models/asstransfer.js +4 -0
  163. package/server/models/assuser_identity.js +4 -0
  164. package/server/models/asswithdraw.js +4 -0
  165. package/server/models/attend.js +2 -0
  166. package/server/models/banggiaban.js +7 -0
  167. package/server/models/bangtinhluong.js +5 -0
  168. package/server/models/base.js +1 -0
  169. package/server/models/bg1.js +8 -0
  170. package/server/models/bg2.js +9 -0
  171. package/server/models/block.js +3 -0
  172. package/server/models/building.js +4 -0
  173. package/server/models/cache.js +1 -0
  174. package/server/models/calllog.js +3 -0
  175. package/server/models/campaign.js +6 -0
  176. package/server/models/cart.js +5 -0
  177. package/server/models/cddiem.js +2 -0
  178. package/server/models/cddt.js +3 -0
  179. package/server/models/cdkh.js +4 -0
  180. package/server/models/cdnphep.js +2 -0
  181. package/server/models/cdtk.js +3 -0
  182. package/server/models/cdvt.js +4 -0
  183. package/server/models/cdvtnpp.js +4 -0
  184. package/server/models/chamcong.js +6 -0
  185. package/server/models/checkin.js +3 -0
  186. package/server/models/checkinactivity.js +3 -0
  187. package/server/models/checkinkpi.js +3 -0
  188. package/server/models/checkinlocation.js +2 -0
  189. package/server/models/chitieukpi.js +3 -0
  190. package/server/models/chudethaoluan.js +2 -0
  191. package/server/models/ckgtluong.js +2 -0
  192. package/server/models/colleague.js +2 -0
  193. package/server/models/comment.js +4 -0
  194. package/server/models/congdoansx.js +4 -0
  195. package/server/models/congtacvien.js +4 -0
  196. package/server/models/congthuctinhgiaban.js +8 -0
  197. package/server/models/consultant.js +4 -0
  198. package/server/models/contract.js +5 -0
  199. package/server/models/counter.js +2 -0
  200. package/server/models/ctds.js +4 -0
  201. package/server/models/ctds2.js +6 -0
  202. package/server/models/currency.js +3 -0
  203. package/server/models/customer.js +26 -0
  204. package/server/models/databanle.js +7 -0
  205. package/server/models/datlich.js +4 -0
  206. package/server/models/department.js +4 -0
  207. package/server/models/dh2.js +17 -0
  208. package/server/models/diagram.js +2 -0
  209. package/server/models/dinhmucsx.js +7 -0
  210. package/server/models/dkhoc.js +5 -0
  211. package/server/models/dknphep.js +2 -0
  212. package/server/models/dmban.js +3 -0
  213. package/server/models/dmbp.js +12 -0
  214. package/server/models/dmca.js +2 -0
  215. package/server/models/dmchietkhau.js +9 -0
  216. package/server/models/dmchietkhauhd.js +20 -0
  217. package/server/models/dmcpmh.js +2 -0
  218. package/server/models/dmdiemthuong.js +4 -0
  219. package/server/models/dmdoi.js +4 -0
  220. package/server/models/dmdoituongdanhgia.js +2 -0
  221. package/server/models/dmdt.js +7 -0
  222. package/server/models/dmdvt.js +3 -0
  223. package/server/models/dmgiaban.js +7 -0
  224. package/server/models/dmgiamua.js +4 -0
  225. package/server/models/dmgiathitruong.js +4 -0
  226. package/server/models/dmgiathitruong_ngay.js +2 -0
  227. package/server/models/dmgiathitruong_theodoi.js +2 -0
  228. package/server/models/dmhoahonghd.js +8 -0
  229. package/server/models/dmhoahongnpp.js +8 -0
  230. package/server/models/dmkc.js +3 -0
  231. package/server/models/dmkho.js +5 -0
  232. package/server/models/dmkhuyenmai.js +8 -0
  233. package/server/models/dmkhuyenmaihd.js +10 -0
  234. package/server/models/dmletet.js +2 -0
  235. package/server/models/dmlo.js +3 -0
  236. package/server/models/dmloaicong.js +3 -0
  237. package/server/models/dmloaitask.js +2 -0
  238. package/server/models/dmloaits.js +2 -0
  239. package/server/models/dmnckkm.js +3 -0
  240. package/server/models/dmnghiepvu.js +3 -0
  241. package/server/models/dmnguonvon.js +2 -0
  242. package/server/models/dmnhnv.js +4 -0
  243. package/server/models/dmnv.js +15 -0
  244. package/server/models/dmnvt.js +7 -0
  245. package/server/models/dmphatdichvu.js +4 -0
  246. package/server/models/dmphi.js +3 -0
  247. package/server/models/dmqct.js +3 -0
  248. package/server/models/dmqddvt.js +2 -0
  249. package/server/models/dmtanggiamts.js +3 -0
  250. package/server/models/dmto.js +4 -0
  251. package/server/models/dmtt.js +3 -0
  252. package/server/models/dmvt.js +14 -0
  253. package/server/models/dmyt.js +3 -0
  254. package/server/models/dn0.js +12 -0
  255. package/server/models/dnm.js +11 -0
  256. package/server/models/dokho.js +2 -0
  257. package/server/models/domain.js +2 -0
  258. package/server/models/dvcs.js +3 -0
  259. package/server/models/ecomcategories.js +2 -0
  260. package/server/models/ecomcategories_cty.js +3 -0
  261. package/server/models/ecompromotion_flashsales.js +2 -0
  262. package/server/models/ecompromotion_freeships.js +2 -0
  263. package/server/models/endpoint.js +1 -0
  264. package/server/models/events.js +3 -0
  265. package/server/models/evoucher.js +4 -0
  266. package/server/models/experiencejourney.js +2 -0
  267. package/server/models/experiencejourneydata.js +4 -0
  268. package/server/models/experiencejourneypersona.js +3 -0
  269. package/server/models/experiencejourneystage.js +2 -0
  270. package/server/models/exportexceltemplate.js +2 -0
  271. package/server/models/fbconversation.js +9 -0
  272. package/server/models/fbmessage.js +2 -0
  273. package/server/models/fbpage.js +2 -0
  274. package/server/models/fieldright.js +2 -0
  275. package/server/models/file.js +3 -0
  276. package/server/models/financialroadmap.js +3 -0
  277. package/server/models/floor.js +3 -0
  278. package/server/models/floordetail.js +6 -0
  279. package/server/models/folder.js +3 -0
  280. package/server/models/follow.js +2 -0
  281. package/server/models/form.js +3 -0
  282. package/server/models/forminfo.js +5 -0
  283. package/server/models/formvalue.js +3 -0
  284. package/server/models/giaoca.js +4 -0
  285. package/server/models/giatb.js +3 -0
  286. package/server/models/group.js +9 -0
  287. package/server/models/gt_ctgt.js +4 -0
  288. package/server/models/gt_hspb.js +2 -0
  289. package/server/models/gt_sltk.js +3 -0
  290. package/server/models/gt_thcppstk.js +3 -0
  291. package/server/models/hanmucton.js +4 -0
  292. package/server/models/hd1.js +10 -0
  293. package/server/models/hd2.js +17 -0
  294. package/server/models/hd3.js +15 -0
  295. package/server/models/hd7.js +16 -0
  296. package/server/models/hd8.js +11 -0
  297. package/server/models/hde.js +10 -0
  298. package/server/models/hlink.js +2 -0
  299. package/server/models/hlinkvalue.js +2 -0
  300. package/server/models/hmcn.js +2 -0
  301. package/server/models/hmcnct.js +2 -0
  302. package/server/models/hspbts.js +4 -0
  303. package/server/models/htl.js +13 -0
  304. package/server/models/importexceltemplate.js +2 -0
  305. package/server/models/introducebonus.js +3 -0
  306. package/server/models/introducecode.js +3 -0
  307. package/server/models/introducer.js +3 -0
  308. package/server/models/kbbtpb.js +5 -0
  309. package/server/models/kbmPttct.js +4 -0
  310. package/server/models/kbmTkgtgt.js +5 -0
  311. package/server/models/kbm_bcdkt.js +4 -0
  312. package/server/models/kbm_kqhdkd.js +3 -0
  313. package/server/models/kbm_lcttgt.js +5 -0
  314. package/server/models/kbm_lctttt.js +5 -0
  315. package/server/models/kbm_pttct.js +4 -0
  316. package/server/models/kbm_tkgtgt.js +4 -0
  317. package/server/models/kbmbcdkt.js +4 -0
  318. package/server/models/kbmbcqt.js +4 -0
  319. package/server/models/kbmkqhdkd.js +3 -0
  320. package/server/models/kbmlcttgt.js +6 -0
  321. package/server/models/kbmlctttt.js +5 -0
  322. package/server/models/kbmtmbctc.js +4 -0
  323. package/server/models/kehoachdtcp.js +3 -0
  324. package/server/models/kehoachmh.js +7 -0
  325. package/server/models/keyresult.js +7 -0
  326. package/server/models/khunghangthanhvien.js +3 -0
  327. package/server/models/label.js +2 -0
  328. package/server/models/labelinfo.js +2 -0
  329. package/server/models/lenhcapphat.js +7 -0
  330. package/server/models/lenhsx.js +7 -0
  331. package/server/models/lienhe.js +4 -0
  332. package/server/models/like_module.js +2 -0
  333. package/server/models/link.js +2 -0
  334. package/server/models/listinfo.js +1108 -0
  335. package/server/models/loaidiem.js +2 -0
  336. package/server/models/lock.js +2 -0
  337. package/server/models/log.js +3 -0
  338. package/server/models/mailaccount.js +3 -0
  339. package/server/models/mailgroup.js +2 -0
  340. package/server/models/mailreceived.js +2 -0
  341. package/server/models/mailschedule.js +2 -0
  342. package/server/models/mailsent.js +2 -0
  343. package/server/models/mailtemplate.js +2 -0
  344. package/server/models/maudanhgia.js +2 -0
  345. package/server/models/message.js +7 -0
  346. package/server/models/message2.js +3 -0
  347. package/server/models/message2setting.js +3 -0
  348. package/server/models/moduleinfo.js +4 -0
  349. package/server/models/momo.js +17 -0
  350. package/server/models/news.js +2 -0
  351. package/server/models/newsfeed.js +4 -0
  352. package/server/models/nhadat.js +6 -0
  353. package/server/models/note.js +2 -0
  354. package/server/models/notification.js +6 -0
  355. package/server/models/okr.js +4 -0
  356. package/server/models/okrdiagram.js +3 -0
  357. package/server/models/onepay.js +24 -0
  358. package/server/models/opportunity.js +4 -0
  359. package/server/models/options.js +2 -0
  360. package/server/models/originimportid.js +1 -0
  361. package/server/models/otp.js +1 -0
  362. package/server/models/parameter.js +2 -0
  363. package/server/models/participant.js +20 -0
  364. package/server/models/partner.js +1 -0
  365. package/server/models/payload.js +1 -0
  366. package/server/models/pbl.js +14 -0
  367. package/server/models/pc0.js +13 -0
  368. package/server/models/pc1.js +14 -0
  369. package/server/models/pc2.js +12 -0
  370. package/server/models/pc3.js +12 -0
  371. package/server/models/pc5.js +7 -0
  372. package/server/models/pc6.js +14 -0
  373. package/server/models/pdn.js +9 -0
  374. package/server/models/pdx.js +9 -0
  375. package/server/models/phieudanhgia.js +3 -0
  376. package/server/models/pht.js +7 -0
  377. package/server/models/phucap.js +3 -0
  378. package/server/models/pkc.js +6 -0
  379. package/server/models/pkh.js +6 -0
  380. package/server/models/pkk.js +8 -0
  381. package/server/models/pkt.js +12 -0
  382. package/server/models/pn1.js +13 -0
  383. package/server/models/pn2.js +10 -0
  384. package/server/models/pn3.js +12 -0
  385. package/server/models/pn5.js +13 -0
  386. package/server/models/pn6.js +13 -0
  387. package/server/models/pn9.js +14 -0
  388. package/server/models/pnc.js +9 -0
  389. package/server/models/pnh.js +9 -0
  390. package/server/models/pnk.js +9 -0
  391. package/server/models/po1.js +17 -0
  392. package/server/models/ppb.js +6 -0
  393. package/server/models/profile.js +3 -0
  394. package/server/models/pt1.js +10 -0
  395. package/server/models/pt5.js +7 -0
  396. package/server/models/ptl.js +6 -0
  397. package/server/models/ptthanhtoan.js +6 -0
  398. package/server/models/purchase_contract.js +16 -0
  399. package/server/models/pxc.js +9 -0
  400. package/server/models/pxh.js +9 -0
  401. package/server/models/pxk.js +9 -0
  402. package/server/models/qts.js +13 -0
  403. package/server/models/qts_dieuchinh.js +3 -0
  404. package/server/models/qts_dieuchuyen.js +3 -0
  405. package/server/models/quanhuyen.js +2 -0
  406. package/server/models/reason.js +2 -0
  407. package/server/models/reportinfo.js +4 -0
  408. package/server/models/right.js +4 -0
  409. package/server/models/rpt.js +2 -0
  410. package/server/models/rptform.js +5 -0
  411. package/server/models/rptobject.js +2 -0
  412. package/server/models/sale_contract.js +9 -0
  413. package/server/models/schedule.js +16 -0
  414. package/server/models/schedule_log.js +2 -0
  415. package/server/models/service.js +4 -0
  416. package/server/models/shipbook.js +11 -0
  417. package/server/models/shortcut.js +2 -0
  418. package/server/models/smsaccount.js +10 -0
  419. package/server/models/smssend.js +2 -0
  420. package/server/models/so1.js +20 -0
  421. package/server/models/so2.js +9 -0
  422. package/server/models/so3.js +9 -0
  423. package/server/models/so5.js +14 -0
  424. package/server/models/so9.js +19 -0
  425. package/server/models/socai.js +17 -0
  426. package/server/models/socainpp.js +17 -0
  427. package/server/models/socaitmp.js +14 -0
  428. package/server/models/sodiemthuong.js +4 -0
  429. package/server/models/sokho.js +16 -0
  430. package/server/models/sokhocapphat.js +14 -0
  431. package/server/models/sokhokhongton.js +17 -0
  432. package/server/models/sokhonpp.js +16 -0
  433. package/server/models/sokhott.js +15 -0
  434. package/server/models/sophanbokh.js +3 -0
  435. package/server/models/sosanxuat.js +4 -0
  436. package/server/models/sotinhkh.js +2 -0
  437. package/server/models/spdd_ck.js +3 -0
  438. package/server/models/spdd_dk.js +3 -0
  439. package/server/models/step.js +2 -0
  440. package/server/models/strategicdiagram.js +3 -0
  441. package/server/models/strategicgoal.js +4 -0
  442. package/server/models/strategickpi.js +5 -0
  443. package/server/models/strategicobjective.js +4 -0
  444. package/server/models/strategicplan.js +4 -0
  445. package/server/models/subscribe.js +2 -0
  446. package/server/models/support.js +2 -0
  447. package/server/models/synctime.js +2 -0
  448. package/server/models/sysconfig.js +2 -0
  449. package/server/models/sysgroup.js +2 -0
  450. package/server/models/tableinfo.js +3 -0
  451. package/server/models/task.js +7 -0
  452. package/server/models/taskreg.js +3 -0
  453. package/server/models/tc.js +2 -0
  454. package/server/models/tdttco.js +8 -0
  455. package/server/models/tdttco_tt.js +5 -0
  456. package/server/models/tdttno.js +8 -0
  457. package/server/models/tdttno_tt.js +5 -0
  458. package/server/models/templaterpt.js +2 -0
  459. package/server/models/templatestore.js +3 -0
  460. package/server/models/templatevoucher.js +3 -0
  461. package/server/models/tinhthanh.js +2 -0
  462. package/server/models/tokens.js +2 -0
  463. package/server/models/tontucthoi.js +6 -0
  464. package/server/models/trangthai.js +3 -0
  465. package/server/models/trangthaiapp.js +4 -0
  466. package/server/models/transaction.js +15 -0
  467. package/server/models/trialinfo.js +2 -0
  468. package/server/models/user.js +43 -0
  469. package/server/models/usergroup.js +6 -0
  470. package/server/models/vanchuyen.js +11 -0
  471. package/server/models/vat.js +3 -0
  472. package/server/models/vatra.js +5 -0
  473. package/server/models/vatvao.js +5 -0
  474. package/server/models/versioninfo.js +2 -0
  475. package/server/models/vsocai.js +6 -0
  476. package/server/models/waitevent.js +2 -0
  477. package/server/models/wallet.js +8 -0
  478. package/server/models/warranty.js +3 -0
  479. package/server/models/xaphuong.js +2 -0
  480. package/server/models/xhd.js +9 -0
  481. package/server/models/ytdd_ck.js +3 -0
  482. package/server/models/ytdd_dk.js +3 -0
  483. package/server/models/zalo.js +17 -0
  484. package/server/modules/lists/bg-cddiem.js +7 -0
  485. package/server/modules/lists/bg-cddt.js +8 -0
  486. package/server/modules/lists/bg-cdkh.js +10 -0
  487. package/server/modules/lists/bg-cdnphep.js +7 -0
  488. package/server/modules/lists/bg-cdtk.js +9 -0
  489. package/server/modules/lists/bg-cdvt.js +9 -0
  490. package/server/modules/lists/bg-cdvtnpp.js +8 -0
  491. package/server/modules/lists/ls-account.js +4 -0
  492. package/server/modules/lists/ls-afflink.js +3 -0
  493. package/server/modules/lists/ls-approve.js +4 -0
  494. package/server/modules/lists/ls-area.js +3 -0
  495. package/server/modules/lists/ls-assabcihandler.js +3 -0
  496. package/server/modules/lists/ls-assbank.js +3 -0
  497. package/server/modules/lists/ls-assbooking.js +21 -0
  498. package/server/modules/lists/ls-assbuy.js +8 -0
  499. package/server/modules/lists/ls-asscashwithdraw.js +8 -0
  500. package/server/modules/lists/ls-assinvestment.js +30 -0
  501. package/server/modules/lists/ls-assissue.js +3 -0
  502. package/server/modules/lists/ls-asskey.js +41 -0
  503. package/server/modules/lists/ls-assneedtobuy.js +10 -0
  504. package/server/modules/lists/ls-assperiod.js +19 -0
  505. package/server/modules/lists/ls-assproduct.js +9 -0
  506. package/server/modules/lists/ls-assprofitsharing.js +8 -0
  507. package/server/modules/lists/ls-assreceiver.js +3 -0
  508. package/server/modules/lists/ls-assrequest.js +4 -0
  509. package/server/modules/lists/ls-asssell.js +13 -0
  510. package/server/modules/lists/ls-asstransaction.js +3 -0
  511. package/server/modules/lists/ls-asstransfer.js +3 -0
  512. package/server/modules/lists/ls-assuser_identity.js +1 -0
  513. package/server/modules/lists/ls-asswithdraw.js +12 -0
  514. package/server/modules/lists/ls-bangtinhluong.js +2 -0
  515. package/server/modules/lists/ls-block.js +1 -0
  516. package/server/modules/lists/ls-building.js +3 -0
  517. package/server/modules/lists/ls-calllog.js +1 -0
  518. package/server/modules/lists/ls-campaign.js +2 -0
  519. package/server/modules/lists/ls-cart.js +14 -0
  520. package/server/modules/lists/ls-chamcong.js +3 -0
  521. package/server/modules/lists/ls-checkin.js +6 -0
  522. package/server/modules/lists/ls-checkinactivity.js +8 -0
  523. package/server/modules/lists/ls-checkinkpi.js +3 -0
  524. package/server/modules/lists/ls-checkinlocation.js +1 -0
  525. package/server/modules/lists/ls-chitieukpi.js +2 -0
  526. package/server/modules/lists/ls-chudethaoluan.js +1 -0
  527. package/server/modules/lists/ls-ckgtluong.js +1 -0
  528. package/server/modules/lists/ls-comment.js +7 -0
  529. package/server/modules/lists/ls-congdoansx.js +3 -0
  530. package/server/modules/lists/ls-congtacvien.js +5 -0
  531. package/server/modules/lists/ls-consultant.js +2 -0
  532. package/server/modules/lists/ls-contract.js +7 -0
  533. package/server/modules/lists/ls-ctds.js +4 -0
  534. package/server/modules/lists/ls-ctds2.js +4 -0
  535. package/server/modules/lists/ls-currency.js +1 -0
  536. package/server/modules/lists/ls-customer.js +19 -0
  537. package/server/modules/lists/ls-datlich.js +9 -0
  538. package/server/modules/lists/ls-dckhauhaots.js +3 -0
  539. package/server/modules/lists/ls-department.js +3 -0
  540. package/server/modules/lists/ls-diagram.js +1 -0
  541. package/server/modules/lists/ls-dkhoc.js +6 -0
  542. package/server/modules/lists/ls-dknphep.js +1 -0
  543. package/server/modules/lists/ls-dmban.js +4 -0
  544. package/server/modules/lists/ls-dmbp.js +7 -0
  545. package/server/modules/lists/ls-dmca.js +1 -0
  546. package/server/modules/lists/ls-dmchietkhau.js +18 -0
  547. package/server/modules/lists/ls-dmchietkhauhd.js +4 -0
  548. package/server/modules/lists/ls-dmchucvu.js +1 -0
  549. package/server/modules/lists/ls-dmcpmh.js +1 -0
  550. package/server/modules/lists/ls-dmdiemthuong.js +4 -0
  551. package/server/modules/lists/ls-dmdoi.js +4 -0
  552. package/server/modules/lists/ls-dmdoituongdanhgia.js +1 -0
  553. package/server/modules/lists/ls-dmdt.js +11 -0
  554. package/server/modules/lists/ls-dmdvt.js +2 -0
  555. package/server/modules/lists/ls-dmgiaban.js +4 -0
  556. package/server/modules/lists/ls-dmgiamua.js +4 -0
  557. package/server/modules/lists/ls-dmgiathitruong.js +15 -0
  558. package/server/modules/lists/ls-dmgiathitruong_ngay.js +2 -0
  559. package/server/modules/lists/ls-dmgiathitruong_theodoi.js +1 -0
  560. package/server/modules/lists/ls-dmhoahonghd.js +1 -0
  561. package/server/modules/lists/ls-dmhoahongnpp.js +1 -0
  562. package/server/modules/lists/ls-dmkc.js +3 -0
  563. package/server/modules/lists/ls-dmkho.js +1 -0
  564. package/server/modules/lists/ls-dmkhuyenmai.js +5 -0
  565. package/server/modules/lists/ls-dmkhuyenmaihd.js +3 -0
  566. package/server/modules/lists/ls-dmletet.js +1 -0
  567. package/server/modules/lists/ls-dmlo.js +1 -0
  568. package/server/modules/lists/ls-dmloaicong.js +1 -0
  569. package/server/modules/lists/ls-dmloaits.js +1 -0
  570. package/server/modules/lists/ls-dmnckkm.js +7 -0
  571. package/server/modules/lists/ls-dmnghiepvu.js +1 -0
  572. package/server/modules/lists/ls-dmnguonvon.js +1 -0
  573. package/server/modules/lists/ls-dmnhnd.js +1 -0
  574. package/server/modules/lists/ls-dmnhnv.js +6 -0
  575. package/server/modules/lists/ls-dmnhtask.js +5 -0
  576. package/server/modules/lists/ls-dmnkh.js +6 -0
  577. package/server/modules/lists/ls-dmntt.js +6 -0
  578. package/server/modules/lists/ls-dmnv.js +17 -0
  579. package/server/modules/lists/ls-dmnvt.js +8 -0
  580. package/server/modules/lists/ls-dmphatdichvu.js +3 -0
  581. package/server/modules/lists/ls-dmphi.js +6 -0
  582. package/server/modules/lists/ls-dmqct.js +2 -0
  583. package/server/modules/lists/ls-dmqddvt.js +3 -0
  584. package/server/modules/lists/ls-dmtanggiamts.js +1 -0
  585. package/server/modules/lists/ls-dmto.js +5 -0
  586. package/server/modules/lists/ls-dmtt.js +7 -0
  587. package/server/modules/lists/ls-dmvt.js +66 -0
  588. package/server/modules/lists/ls-dmyt.js +1 -0
  589. package/server/modules/lists/ls-dokho.js +1 -0
  590. package/server/modules/lists/ls-dvcs.js +1 -0
  591. package/server/modules/lists/ls-ecomcategories.js +5 -0
  592. package/server/modules/lists/ls-ecomcategories_cty.js +5 -0
  593. package/server/modules/lists/ls-events.js +3 -0
  594. package/server/modules/lists/ls-evoucher.js +3 -0
  595. package/server/modules/lists/ls-experiencejourney.js +1 -0
  596. package/server/modules/lists/ls-experiencejourneydata.js +3 -0
  597. package/server/modules/lists/ls-experiencejourneypersona.js +4 -0
  598. package/server/modules/lists/ls-experiencejourneystage.js +1 -0
  599. package/server/modules/lists/ls-fbconversation.js +2 -0
  600. package/server/modules/lists/ls-fbmessage.js +2 -0
  601. package/server/modules/lists/ls-fbpage.js +10 -0
  602. package/server/modules/lists/ls-file.js +25 -0
  603. package/server/modules/lists/ls-financialroadmap.js +3 -0
  604. package/server/modules/lists/ls-floor.js +2 -0
  605. package/server/modules/lists/ls-floordetail.js +19 -0
  606. package/server/modules/lists/ls-folder.js +1 -0
  607. package/server/modules/lists/ls-form.js +1 -0
  608. package/server/modules/lists/ls-forminfo.js +1 -0
  609. package/server/modules/lists/ls-formvalue.js +1 -0
  610. package/server/modules/lists/ls-giaoca.js +4 -0
  611. package/server/modules/lists/ls-group.js +6 -0
  612. package/server/modules/lists/ls-hlink.js +1 -0
  613. package/server/modules/lists/ls-hlinkvalue.js +1 -0
  614. package/server/modules/lists/ls-hmcn.js +2 -0
  615. package/server/modules/lists/ls-hspbts.js +3 -0
  616. package/server/modules/lists/ls-introducebonus.js +4 -0
  617. package/server/modules/lists/ls-introducecode.js +9 -0
  618. package/server/modules/lists/ls-introducer.js +21 -0
  619. package/server/modules/lists/ls-kbm-bcdkt.js +1 -0
  620. package/server/modules/lists/ls-kbm-bcqt.js +5 -0
  621. package/server/modules/lists/ls-kbm-kqhdkd.js +1 -0
  622. package/server/modules/lists/ls-kbm-lcttgt.js +1 -0
  623. package/server/modules/lists/ls-kbm-lctttt.js +1 -0
  624. package/server/modules/lists/ls-kbm-pttct.js +3 -0
  625. package/server/modules/lists/ls-kbm-tkgtgt.js +2 -0
  626. package/server/modules/lists/ls-kbm-tmbctc.js +3 -0
  627. package/server/modules/lists/ls-kehoachdtcp.js +4 -0
  628. package/server/modules/lists/ls-keyresult.js +7 -0
  629. package/server/modules/lists/ls-khunghangthanhvien.js +1 -0
  630. package/server/modules/lists/ls-kygui.js +19 -0
  631. package/server/modules/lists/ls-label.js +1 -0
  632. package/server/modules/lists/ls-lienhe.js +4 -0
  633. package/server/modules/lists/ls-like-module.js +3 -0
  634. package/server/modules/lists/ls-link.js +1 -0
  635. package/server/modules/lists/ls-loaidiem.js +1 -0
  636. package/server/modules/lists/ls-lock.js +1 -0
  637. package/server/modules/lists/ls-log.js +3 -0
  638. package/server/modules/lists/ls-mailaccount.js +4 -0
  639. package/server/modules/lists/ls-mailreceived.js +5 -0
  640. package/server/modules/lists/ls-mailschedule.js +7 -0
  641. package/server/modules/lists/ls-mailsent.js +4 -0
  642. package/server/modules/lists/ls-mailtemplate.js +4 -0
  643. package/server/modules/lists/ls-maudanhgia.js +3 -0
  644. package/server/modules/lists/ls-message2.js +8 -0
  645. package/server/modules/lists/ls-message2setting.js +4 -0
  646. package/server/modules/lists/ls-news.js +7 -0
  647. package/server/modules/lists/ls-newsfeed.js +4 -0
  648. package/server/modules/lists/ls-nhadat.js +6 -0
  649. package/server/modules/lists/ls-note.js +5 -0
  650. package/server/modules/lists/ls-okr.js +5 -0
  651. package/server/modules/lists/ls-okrdiagram.js +1 -0
  652. package/server/modules/lists/ls-opportunity.js +5 -0
  653. package/server/modules/lists/ls-options.js +4 -0
  654. package/server/modules/lists/ls-parameter.js +3 -0
  655. package/server/modules/lists/ls-participant.js +10 -0
  656. package/server/modules/lists/ls-phieudanhgia.js +8 -0
  657. package/server/modules/lists/ls-phucap.js +1 -0
  658. package/server/modules/lists/ls-profile.js +1 -0
  659. package/server/modules/lists/ls-ptthanhtoan.js +3 -0
  660. package/server/modules/lists/ls-qts-dieuchinh.js +2 -0
  661. package/server/modules/lists/ls-qts-dieuchuyen.js +8 -0
  662. package/server/modules/lists/ls-reason.js +1 -0
  663. package/server/modules/lists/ls-rpt.js +5 -0
  664. package/server/modules/lists/ls-rptform.js +4 -0
  665. package/server/modules/lists/ls-service.js +3 -0
  666. package/server/modules/lists/ls-shortcut.js +1 -0
  667. package/server/modules/lists/ls-smsaccount.js +1 -0
  668. package/server/modules/lists/ls-smssend.js +3 -0
  669. package/server/modules/lists/ls-sosanxuat.js +4 -0
  670. package/server/modules/lists/ls-step.js +1 -0
  671. package/server/modules/lists/ls-strategicdiagram.js +1 -0
  672. package/server/modules/lists/ls-strategicgoal.js +3 -0
  673. package/server/modules/lists/ls-strategickpi.js +7 -0
  674. package/server/modules/lists/ls-strategicobjective.js +3 -0
  675. package/server/modules/lists/ls-strategicplan.js +6 -0
  676. package/server/modules/lists/ls-support.js +3 -0
  677. package/server/modules/lists/ls-task.js +34 -0
  678. package/server/modules/lists/ls-taskreg.js +2 -0
  679. package/server/modules/lists/ls-tc.js +1 -0
  680. package/server/modules/lists/ls-templaterpt.js +4 -0
  681. package/server/modules/lists/ls-templatevoucher.js +1 -0
  682. package/server/modules/lists/ls-tontucthoi.js +3 -0
  683. package/server/modules/lists/ls-trangthaiapp.js +3 -0
  684. package/server/modules/lists/ls-transaction.js +4 -0
  685. package/server/modules/lists/ls-usergroup.js +7 -0
  686. package/server/modules/lists/ls-vat.js +1 -0
  687. package/server/modules/lists/ls-waitevent.js +1 -0
  688. package/server/modules/lists/ls-warranty.js +4 -0
  689. package/server/modules/lists/ls_hanmucton.js +3 -0
  690. package/server/modules/lists/ls_hspb.js +4 -0
  691. package/server/modules/lists/ls_spdd_ck.js +3 -0
  692. package/server/modules/lists/ls_spdd_dk.js +3 -0
  693. package/server/modules/lists/ls_ytdd_ck.js +4 -0
  694. package/server/modules/lists/ls_ytdd_dk.js +4 -0
  695. package/server/modules/lists/sys-attend.js +4 -0
  696. package/server/modules/lists/sys-follow.js +4 -0
  697. package/server/modules/lists/sys-right.js +2 -0
  698. package/server/modules/public/app.js +4 -0
  699. package/server/modules/public/approve.js +37 -0
  700. package/server/modules/public/callin.js +6 -0
  701. package/server/modules/public/comment.js +5 -0
  702. package/server/modules/public/dmnvt.js +4 -0
  703. package/server/modules/public/dmvt.js +9 -0
  704. package/server/modules/public/file.js +11 -0
  705. package/server/modules/public/form.js +7 -0
  706. package/server/modules/public/forminfo.js +1 -0
  707. package/server/modules/public/group.js +4 -0
  708. package/server/modules/public/hlink.js +3 -0
  709. package/server/modules/public/introducecode.js +2 -0
  710. package/server/modules/public/listinfo.js +1 -0
  711. package/server/modules/public/media-webhook.js +1 -0
  712. package/server/modules/public/partner.js +1 -0
  713. package/server/modules/public/paymentCallback.js +32 -0
  714. package/server/modules/public/province.js +1 -0
  715. package/server/modules/public/ptthanhtoan.js +4 -0
  716. package/server/modules/public/subscribe.js +30 -0
  717. package/server/modules/public/support.js +3 -0
  718. package/server/modules/public/tableinfo.js +1 -0
  719. package/server/modules/public/trialinfo.js +4 -0
  720. package/server/modules/public/versioninfo.js +1 -0
  721. package/server/modules/reports/calc-tinhgiatb.js +6 -0
  722. package/server/modules/reports/calc-tinhgiathanh.js +7 -0
  723. package/server/modules/reports/calc-tinhkhauhaots.js +4 -0
  724. package/server/modules/reports/calc-tinhluong.js +32 -0
  725. package/server/modules/reports/rp-assbonus.js +4 -0
  726. package/server/modules/reports/rp-assinterest.js +8 -0
  727. package/server/modules/reports/rp-assproductowners.js +3 -0
  728. package/server/modules/reports/rp-asssupply.js +1 -0
  729. package/server/modules/reports/rp-asstransferlog.js +10 -0
  730. package/server/modules/reports/rp-banggiatb.js +3 -0
  731. package/server/modules/reports/rp-bangtinhkhauhao.js +6 -0
  732. package/server/modules/reports/rp-baocaokhachhang.js +6 -0
  733. package/server/modules/reports/rp-bcdkt.js +11 -0
  734. package/server/modules/reports/rp-bcintroducebonus.js +4 -0
  735. package/server/modules/reports/rp-bckhtiemnang.js +3 -0
  736. package/server/modules/reports/rp-bcqt.js +85 -0
  737. package/server/modules/reports/rp-bkct.js +13 -0
  738. package/server/modules/reports/rp-bkshipbook.js +8 -0
  739. package/server/modules/reports/rp-bkvanchuyen.js +8 -0
  740. package/server/modules/reports/rp-bkvatra.js +7 -0
  741. package/server/modules/reports/rp-bkvatvao.js +7 -0
  742. package/server/modules/reports/rp-cdpsdiem.js +4 -0
  743. package/server/modules/reports/rp-cdpsdt.js +4 -0
  744. package/server/modules/reports/rp-cdpskh.js +6 -0
  745. package/server/modules/reports/rp-cdpsnphep.js +3 -0
  746. package/server/modules/reports/rp-cdpstk.js +4 -0
  747. package/server/modules/reports/rp-chitietchitientheohoadon.js +12 -0
  748. package/server/modules/reports/rp-chitiettaisan.js +13 -0
  749. package/server/modules/reports/rp-chitietthutientheohoadon.js +13 -0
  750. package/server/modules/reports/rp-ckcn.js +3 -0
  751. package/server/modules/reports/rp-ckdiem.js +3 -0
  752. package/server/modules/reports/rp-cktk.js +3 -0
  753. package/server/modules/reports/rp-ckvt.js +10 -0
  754. package/server/modules/reports/rp-ckvttheokho.js +4 -0
  755. package/server/modules/reports/rp-ckvttheotg.js +4 -0
  756. package/server/modules/reports/rp-ckvttt.js +3 -0
  757. package/server/modules/reports/rp-congnophaithutheotuoino.js +3 -0
  758. package/server/modules/reports/rp-congnophaitratheotuoino.js +3 -0
  759. package/server/modules/reports/rp-congviectheobp.js +9 -0
  760. package/server/modules/reports/rp-congviectheodt.js +9 -0
  761. package/server/modules/reports/rp-congviectheokh.js +9 -0
  762. package/server/modules/reports/rp-congviectheonv.js +9 -0
  763. package/server/modules/reports/rp-congviectheotimeline.js +5 -0
  764. package/server/modules/reports/rp-ctbanle.js +15 -0
  765. package/server/modules/reports/rp-ctbanle2.js +20 -0
  766. package/server/modules/reports/rp-ctbanlectv.js +20 -0
  767. package/server/modules/reports/rp-ctbanlenpp.js +25 -0
  768. package/server/modules/reports/rp-ctdanhgianhanvien.js +8 -0
  769. package/server/modules/reports/rp-cthangbanbitralai.js +4 -0
  770. package/server/modules/reports/rp-ctmuahang.js +7 -0
  771. package/server/modules/reports/rp-cttralaihang.js +4 -0
  772. package/server/modules/reports/rp-databanle.js +10 -0
  773. package/server/modules/reports/rp-diemthuong.js +2 -0
  774. package/server/modules/reports/rp-dkcn.js +3 -0
  775. package/server/modules/reports/rp-dktk.js +2 -0
  776. package/server/modules/reports/rp-dsnhanviencm.js +9 -0
  777. package/server/modules/reports/rp-dsnhanvientb.js +9 -0
  778. package/server/modules/reports/rp-dtbanletheoct.js +21 -0
  779. package/server/modules/reports/rp-dtbanletheokh.js +20 -0
  780. package/server/modules/reports/rp-dtbanletheokhnpp.js +20 -0
  781. package/server/modules/reports/rp-dtbanletheokho.js +18 -0
  782. package/server/modules/reports/rp-dtbanletheonam.js +3 -0
  783. package/server/modules/reports/rp-dtbanletheongay.js +1 -0
  784. package/server/modules/reports/rp-dtbanletheonpp.js +23 -0
  785. package/server/modules/reports/rp-dtbanletheonv.js +19 -0
  786. package/server/modules/reports/rp-dtbanletheoquy.js +3 -0
  787. package/server/modules/reports/rp-dtbanletheosp.js +8 -0
  788. package/server/modules/reports/rp-dtbanletheospnpp.js +6 -0
  789. package/server/modules/reports/rp-dtbanletheothang.js +3 -0
  790. package/server/modules/reports/rp-dtbanletheothungan.js +12 -0
  791. package/server/modules/reports/rp-dtbanletheovt.js +2 -0
  792. package/server/modules/reports/rp-dtbanletheovtnpp.js +2 -0
  793. package/server/modules/reports/rp-dutoanthuchitheodt.js +4 -0
  794. package/server/modules/reports/rp-getPXC2PNC.js +8 -0
  795. package/server/modules/reports/rp-getariseofaccountsbymonth.js +4 -0
  796. package/server/modules/reports/rp-getbtpb.js +6 -0
  797. package/server/modules/reports/rp-getcashbycashier.js +8 -0
  798. package/server/modules/reports/rp-getcschietkhau.js +5 -0
  799. package/server/modules/reports/rp-getdinhmuc4lenhcp.js +7 -0
  800. package/server/modules/reports/rp-getdinhmuc4pxk.js +9 -0
  801. package/server/modules/reports/rp-getdk4pht.js +8 -0
  802. package/server/modules/reports/rp-getdk4pkc.js +9 -0
  803. package/server/modules/reports/rp-getdttheoca.js +5 -0
  804. package/server/modules/reports/rp-getinvoice2pay.js +4 -0
  805. package/server/modules/reports/rp-getinvoice2receive.js +4 -0
  806. package/server/modules/reports/rp-getinvoice2return.js +5 -0
  807. package/server/modules/reports/rp-getinvoice2return_bl.js +6 -0
  808. package/server/modules/reports/rp-getkehoachmh4lenhcp.js +4 -0
  809. package/server/modules/reports/rp-getkhauhao.js +7 -0
  810. package/server/modules/reports/rp-getluong.js +8 -0
  811. package/server/modules/reports/rp-getluongchuyen.js +5 -0
  812. package/server/modules/reports/rp-getpn2fee.js +5 -0
  813. package/server/modules/reports/rp-getpn2return.js +5 -0
  814. package/server/modules/reports/rp-getthanhpham4pnk.js +7 -0
  815. package/server/modules/reports/rp-getvc2xhd.js +11 -0
  816. package/server/modules/reports/rp-gt_cpnvltt.js +6 -0
  817. package/server/modules/reports/rp-hangbanbitralai.js +5 -0
  818. package/server/modules/reports/rp-hangthanhvien.js +3 -0
  819. package/server/modules/reports/rp-hoadonbanhangtheohantt.js +3 -0
  820. package/server/modules/reports/rp-hoadonmuahangtheohantt.js +4 -0
  821. package/server/modules/reports/rp-hoahong.js +15 -0
  822. package/server/modules/reports/rp-kcsns.js +20 -0
  823. package/server/modules/reports/rp-kgchamcong.js +7 -0
  824. package/server/modules/reports/rp-kqdanhgianhanvien.js +5 -0
  825. package/server/modules/reports/rp-kqhdkd.js +8 -0
  826. package/server/modules/reports/rp-lcttgt.js +17 -0
  827. package/server/modules/reports/rp-lctttt.js +11 -0
  828. package/server/modules/reports/rp-linkslist.js +4 -0
  829. package/server/modules/reports/rp-phanbochitienchohoadon.js +11 -0
  830. package/server/modules/reports/rp-phanbothutienchohoadon.js +11 -0
  831. package/server/modules/reports/rp-ptbitralai.js +7 -0
  832. package/server/modules/reports/rp-ptcttct.js +22 -0
  833. package/server/modules/reports/rp-ptdonhang.js +8 -0
  834. package/server/modules/reports/rp-pttct.js +44 -0
  835. package/server/modules/reports/rp-pttctkho.js +28 -0
  836. package/server/modules/reports/rp-pttctkho2.js +28 -0
  837. package/server/modules/reports/rp-referredusers.js +1 -0
  838. package/server/modules/reports/rp-sctbhxh.js +4 -0
  839. package/server/modules/reports/rp-sctcnkh.js +17 -0
  840. package/server/modules/reports/rp-sctdiem.js +3 -0
  841. package/server/modules/reports/rp-sctdt.js +7 -0
  842. package/server/modules/reports/rp-sctdtcp.js +11 -0
  843. package/server/modules/reports/rp-sctluong.js +4 -0
  844. package/server/modules/reports/rp-sctthuetncn.js +4 -0
  845. package/server/modules/reports/rp-scttk.js +7 -0
  846. package/server/modules/reports/rp-sctvt.js +5 -0
  847. package/server/modules/reports/rp-sctvt_sl.js +5 -0
  848. package/server/modules/reports/rp-sctvtnpp.js +6 -0
  849. package/server/modules/reports/rp-sctvttt.js +5 -0
  850. package/server/modules/reports/rp-search.js +4 -0
  851. package/server/modules/reports/rp-socai.js +6 -0
  852. package/server/modules/reports/rp-socaitk.js +7 -0
  853. package/server/modules/reports/rp-sochut.js +7 -0
  854. package/server/modules/reports/rp-sokho.js +6 -0
  855. package/server/modules/reports/rp-sokhott.js +6 -0
  856. package/server/modules/reports/rp-sonkbh.js +5 -0
  857. package/server/modules/reports/rp-sonkc.js +6 -0
  858. package/server/modules/reports/rp-sonkct.js +5 -0
  859. package/server/modules/reports/rp-sonkmh.js +5 -0
  860. package/server/modules/reports/rp-sonktt.js +5 -0
  861. package/server/modules/reports/rp-soquy.js +7 -0
  862. package/server/modules/reports/rp-sosanhkhvatt.js +13 -0
  863. package/server/modules/reports/rp-sosanhkhvatt2.js +7 -0
  864. package/server/modules/reports/rp-sotaisan.js +14 -0
  865. package/server/modules/reports/rp-sotiengui.js +7 -0
  866. package/server/modules/reports/rp-taodinhmuctudkhoc.js +5 -0
  867. package/server/modules/reports/rp-thdanhgianhanvien.js +9 -0
  868. package/server/modules/reports/rp-thgt.js +6 -0
  869. package/server/modules/reports/rp-thnxt.js +9 -0
  870. package/server/modules/reports/rp-thnxt_sl.js +9 -0
  871. package/server/modules/reports/rp-thnxtnpp.js +10 -0
  872. package/server/modules/reports/rp-thnxttt.js +9 -0
  873. package/server/modules/reports/rp-tkbanhangtheogioithieu.js +9 -0
  874. package/server/modules/reports/rp-tkgioithieukh.js +4 -0
  875. package/server/modules/reports/rp-tkgtgt.js +7 -0
  876. package/server/modules/reports/rp-tmbctc.js +20 -0
  877. package/server/modules/reports/rp-tonghopbanhang.js +6 -0
  878. package/server/modules/reports/rp-tonghopmuahang.js +5 -0
  879. package/server/modules/reports/rp-tonghoptralaihang.js +5 -0
  880. package/server/modules/reports/rp-tongquanbanle.js +20 -0
  881. package/server/modules/reports/rp-tongquanctvnpp.js +12 -0
  882. package/server/modules/reports/rp-tongquannvbh.js +14 -0
  883. package/server/modules/reports/rp-tongquannvnpp.js +5 -0
  884. package/server/modules/reports/rp-uoctinhnvl.js +11 -0
  885. package/server/modules/reports/rp-wallet.js +3 -0
  886. package/server/modules/reports/rpt-tkdiemtichluy.js +9 -0
  887. package/server/modules/systems/sys-app.js +27 -0
  888. package/server/modules/systems/sys-colleague.js +11 -0
  889. package/server/modules/systems/sys-domain.js +4 -0
  890. package/server/modules/systems/sys-exportexceltemplate.js +4 -0
  891. package/server/modules/systems/sys-fieldright.js +3 -0
  892. package/server/modules/systems/sys-importexceltemplate.js +4 -0
  893. package/server/modules/systems/sys-labelinfo.js +4 -0
  894. package/server/modules/systems/sys-listinfo.js +8 -0
  895. package/server/modules/systems/sys-message.js +14 -0
  896. package/server/modules/systems/sys-moduleinfo.js +4 -0
  897. package/server/modules/systems/sys-notification.js +8 -0
  898. package/server/modules/systems/sys-quanhuyen.js +4 -0
  899. package/server/modules/systems/sys-reportinfo.js +4 -0
  900. package/server/modules/systems/sys-rptobject.js +3 -0
  901. package/server/modules/systems/sys-schedule.js +11 -0
  902. package/server/modules/systems/sys-sysconfig.js +3 -0
  903. package/server/modules/systems/sys-sysgroup.js +3 -0
  904. package/server/modules/systems/sys-tableinfo.js +3 -0
  905. package/server/modules/systems/sys-templatestore.js +5 -0
  906. package/server/modules/systems/sys-tinhthanh.js +4 -0
  907. package/server/modules/systems/sys-token.js +3 -0
  908. package/server/modules/systems/sys-trangthai.js +3 -0
  909. package/server/modules/systems/sys-trialinfo.js +3 -0
  910. package/server/modules/systems/sys-user.js +46 -0
  911. package/server/modules/systems/sys-users.js +10 -0
  912. package/server/modules/systems/sys-versioninfo.js +3 -0
  913. package/server/modules/systems/sys-xaphuong.js +4 -0
  914. package/server/modules/vouchers/vo-banggiaban.js +5 -0
  915. package/server/modules/vouchers/vo-bc1.js +32 -0
  916. package/server/modules/vouchers/vo-bc5.js +15 -0
  917. package/server/modules/vouchers/vo-bg1.js +10 -0
  918. package/server/modules/vouchers/vo-bg2.js +13 -0
  919. package/server/modules/vouchers/vo-bn1.js +35 -0
  920. package/server/modules/vouchers/vo-bn5.js +15 -0
  921. package/server/modules/vouchers/vo-dh2.js +34 -0
  922. package/server/modules/vouchers/vo-dinhmucsx.js +6 -0
  923. package/server/modules/vouchers/vo-dkb.js +21 -0
  924. package/server/modules/vouchers/vo-dn0.js +9 -0
  925. package/server/modules/vouchers/vo-dnm.js +21 -0
  926. package/server/modules/vouchers/vo-hd1.js +38 -0
  927. package/server/modules/vouchers/vo-hd2.js +102 -0
  928. package/server/modules/vouchers/vo-hd3.js +36 -0
  929. package/server/modules/vouchers/vo-hd7.js +31 -0
  930. package/server/modules/vouchers/vo-hd8.js +29 -0
  931. package/server/modules/vouchers/vo-hde.js +41 -0
  932. package/server/modules/vouchers/vo-htl.js +12 -0
  933. package/server/modules/vouchers/vo-kbbtpb.js +6 -0
  934. package/server/modules/vouchers/vo-kehoachmh.js +13 -0
  935. package/server/modules/vouchers/vo-lenhcapphat.js +10 -0
  936. package/server/modules/vouchers/vo-lenhsx.js +12 -0
  937. package/server/modules/vouchers/vo-pbl.js +94 -0
  938. package/server/modules/vouchers/vo-pc0.js +14 -0
  939. package/server/modules/vouchers/vo-pc1.js +31 -0
  940. package/server/modules/vouchers/vo-pc2.js +25 -0
  941. package/server/modules/vouchers/vo-pc3.js +14 -0
  942. package/server/modules/vouchers/vo-pc5.js +15 -0
  943. package/server/modules/vouchers/vo-pc6.js +19 -0
  944. package/server/modules/vouchers/vo-pdn.js +11 -0
  945. package/server/modules/vouchers/vo-pdx.js +9 -0
  946. package/server/modules/vouchers/vo-pht.js +8 -0
  947. package/server/modules/vouchers/vo-pkc.js +7 -0
  948. package/server/modules/vouchers/vo-pkh.js +10 -0
  949. package/server/modules/vouchers/vo-pkk.js +12 -0
  950. package/server/modules/vouchers/vo-pkt.js +13 -0
  951. package/server/modules/vouchers/vo-pn1.js +27 -0
  952. package/server/modules/vouchers/vo-pn2.js +17 -0
  953. package/server/modules/vouchers/vo-pn3.js +18 -0
  954. package/server/modules/vouchers/vo-pn5.js +15 -0
  955. package/server/modules/vouchers/vo-pn6.js +18 -0
  956. package/server/modules/vouchers/vo-pn9.js +24 -0
  957. package/server/modules/vouchers/vo-pnc.js +20 -0
  958. package/server/modules/vouchers/vo-pnh.js +16 -0
  959. package/server/modules/vouchers/vo-pnk.js +14 -0
  960. package/server/modules/vouchers/vo-pnknpp.js +13 -0
  961. package/server/modules/vouchers/vo-po1.js +15 -0
  962. package/server/modules/vouchers/vo-ppb.js +8 -0
  963. package/server/modules/vouchers/vo-pt1.js +21 -0
  964. package/server/modules/vouchers/vo-pt5.js +15 -0
  965. package/server/modules/vouchers/vo-ptl.js +9 -0
  966. package/server/modules/vouchers/vo-purchase_contract.js +9 -0
  967. package/server/modules/vouchers/vo-pxc.js +22 -0
  968. package/server/modules/vouchers/vo-pxh.js +15 -0
  969. package/server/modules/vouchers/vo-pxk.js +15 -0
  970. package/server/modules/vouchers/vo-pxknpp.js +14 -0
  971. package/server/modules/vouchers/vo-qts.js +13 -0
  972. package/server/modules/vouchers/vo-sale_contract.js +11 -0
  973. package/server/modules/vouchers/vo-shipbook.js +17 -0
  974. package/server/modules/vouchers/vo-so1.js +127 -0
  975. package/server/modules/vouchers/vo-so2.js +37 -0
  976. package/server/modules/vouchers/vo-so3.js +41 -0
  977. package/server/modules/vouchers/vo-so5.js +58 -0
  978. package/server/modules/vouchers/vo-so7.js +101 -0
  979. package/server/modules/vouchers/vo-so9.js +121 -0
  980. package/server/modules/vouchers/vo-vanchuyen.js +14 -0
  981. package/server/modules/vouchers/vo-xhd.js +34 -0
  982. package/server/route.js +53 -0
  983. package/server/sslConfig.js +2 -0
  984. package/server/workers/backupApp.js +9 -0
  985. package/server/workers/calcGrid.js +8 -0
  986. package/server/workers/customerOnImport.js +8 -0
  987. package/server/workers/dmvtOnImport.js +9 -0
  988. package/server/workers/excelParser.js +9 -0
  989. package/server/workers/inputWorker.js +6 -0
  990. package/server/workers/pushNotify.js +10 -0
  991. package/server/workers/reportWorker.js +6 -0
  992. package/server/workers/restoreApp.js +22 -0
  993. package/server/workers/runScript.js +5 -0
  994. package/server/workers/sendEmail.js +10 -0
  995. package/server/workers/webhook.js +5 -0
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.2.5",
5
+ "version": "12.3.0",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
@@ -55,7 +55,6 @@
55
55
  "multer": "0.1.8",
56
56
  "natives": "^1.1.6",
57
57
  "ng-node-compile": "^2.0.52",
58
- "node-tesseract-ocr": "^2.2.1",
59
58
  "node-worker-threads-pool": "^1.4.3",
60
59
  "node-xlsx": "latest",
61
60
  "node-zip": "latest",
@@ -77,14 +76,17 @@
77
76
  "sitemap-generator": "^8.4.0",
78
77
  "smtp-server": "^3.9.0",
79
78
  "socket.io": "^4.1.2",
79
+ "socket.io-client": "^4.1.2",
80
80
  "socket.io-redis": "^6.1.1",
81
81
  "sticky-session": "^1.1.2",
82
+ "tesseract.js": "^5.1.0",
82
83
  "toobusy-js": "^0.5.1",
83
84
  "underscore": "^1.13.1",
84
85
  "unidecode": "^0.1.8",
85
86
  "validate.js": "^0.13.1",
86
87
  "validator": "^13.6.0",
87
88
  "vhost": "^3.0.2",
89
+ "vietnam-qr-pay": "^1.4.0",
88
90
  "vm2": "^3.9.3",
89
91
  "vn-payments": "^1.0.3",
90
92
  "web-push": "^3.4.4",
package/server/app.js ADDED
@@ -0,0 +1,18 @@
1
+ 'use strict';require("events").EventEmitter.defaultMaxListeners=1E7;
2
+ const express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),_global=require("./global"),User=global.getModel("user"),defaultConfigs=require("./defaultConfigs"),crypto=require("crypto"),mainServer=function($app$$,$options$$={cluster:!0,port:443,useSocket:!0},$callbackServer$$=null){const $configs$$=global.configs={...defaultConfigs,...$options$$.configs};$configs$$.admins||($configs$$.admins=
3
+ $configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$options$$.port||$configs$$.PORT||443;var $compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require($configs$$.paths.menu||"./menu").getModules();global.modulesInMenu={};Object.values($compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$).forEach(function($module$$){global.modulesInMenu[$module$$.name]=
4
+ $module$$});require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$toobusy$$.onLag(function($currentLag$$){console.log("Event loop lag detected! Latency: "+$currentLag$$+"ms")});$app$$.use(function($req$$,$res$$,$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),
5
+ $res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});$compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("cookie-parser");$app$$.use($compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$());
6
+ $app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||($uid$$=$req$$.headers.uid);$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));$res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("compression");$app$$.use($compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$());
7
+ $compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||1048576;$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=$req$jscomp$2_size$$.headers["content-lenght"])&&$req$jscomp$2_size$$>$limitFileSize$$)return $res$$.status(400).send({error:"File too large"});$next$$()});$compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("multer")({dest:$compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$,
8
+ limits:{files:1,fileSize:$limitFileSize$$}});$app$$.use($compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$);$app$$.use(cors({credentials:!0,exposedHeaders:["set-cookie","uid"],origin:($origin$$,$callback$$)=>{$callback$$(null,!0)}}));$configs$$.paths||($configs$$.paths={});!0!==$options$$.lite&&($app$$.use("/",express.static($configs$$.paths.public||__dirname+"/public")),$app$$.use("/admin",express.static($configs$$.paths.admin||__dirname+"/admin")),$app$$.use("/templates",
9
+ express.static($configs$$.paths.templates||__dirname+"/templates")),$app$$.use("/images",express.static($configs$$.paths.images||__dirname+"/images")));$app$$.use(bodyParser.json({limit:$configs$$.limitRequestSize||"1mb"}));$app$$.use(bodyParser.urlencoded({limit:$configs$$.limitRequestSize||"1mb",extended:!0}));$app$$.use(passport.initialize());$compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("morgan");var $accessLogStream_rfs$$=require("rotating-file-stream");
10
+ const $logDirectory$$=$configs$$.paths.log||__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);$accessLogStream_rfs$$=$accessLogStream_rfs$$("access.log",{interval:"1d",path:$logDirectory$$});$app$$.use($compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$("combined",{stream:$accessLogStream_rfs$$,skip:function($req$$,$res$$){return 400>$res$$.statusCode}}));$app$$.use(function($err$$,$req$$,$res$$,$next$$){console.error($err$$.stack);$res$$.status(500).send("Server Error!")});
11
+ global.mongoose.connect($configs$$.database.url,{useNewUrlParser:!0}).then(()=>{console.log("Connected to Database");const $redis$$=require("redis");global.clientRedis=$redis$$.createClient();global.clientRedis.on("connect",function(){console.log("redis connected");0!=$options$$.createRedisCache&&require("./libs/redis-cache").set()});$options$$.start_abci_handler&&global.getModel("assabcihandler").start();!0!==$options$$.lite?require("./route")($app$$,()=>{if(!1!==$options$$.createServer){var $StaticPool_StaticPool$$=
12
+ require("sticky-session");if($configs$$.use_ssl){var $server_sslConfig$$=require("./sslConfig");$server_sslConfig$$=https.createServer($server_sslConfig$$($options$$.sslDir),$app$$)}else $server_sslConfig$$=http.createServer($app$$);$server_sslConfig$$.timeout=6E5;!1!==$options$$.useSocket?User.initSocket($server_sslConfig$$):User.initClientSockets();if(!1!==$options$$.cluster){if(!$StaticPool_StaticPool$$.listen($server_sslConfig$$,global.port))$server_sslConfig$$.once("listening",function(){console.log("server started on",
13
+ global.port)});$StaticPool_StaticPool$$=require("cluster");$StaticPool_StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("worker "+$worker$$.process.pid+" died",$code$$,$signal$$)});$StaticPool_StaticPool$$.on("online",function($worker$$){console.info("worker "+$worker$$.process.pid+" is online")})}else $server_sslConfig$$.listen(global.port,()=>{console.log("server start at "+global.port+" port")})}$options$$.start_import_data_pool&&($StaticPool_StaticPool$$=require("./libs/WorkerStaticPool"),
14
+ global.importDataMainPool=new $StaticPool_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0),global.importDataMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.log("load import data pool")}));$options$$.start_report_pool&&($StaticPool_StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $StaticPool_StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0),global.reportMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},
15
+ ()=>{console.log("load report pool")}));$callbackServer$$&&$callbackServer$$()}):require("./route")($app$$,()=>{$callbackServer$$&&$callbackServer$$()},!0)}).catch($err$$=>{console.log("Not Connected to Database ERROR! ",$err$$)});return $app$$};process.on("uncaughtException",function($err$jscomp$2_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$2_error$$.message);console.error($err$jscomp$2_error$$.stack);$err$jscomp$2_error$$=`
16
+ Error: ${$err$jscomp$2_error$$.message}
17
+ Stack: ${$err$jscomp$2_error$$.stack}
18
+ `;try{const $logDirectory$$=__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);fs.writeFile(`${$logDirectory$$}/error-${(new Date).getTime()}.txt`,$err$jscomp$2_error$$,()=>{console.log("wrote log error")})}catch($e$$){console.log($e$$)}process.exit(1)});module.exports=mainServer;
@@ -0,0 +1,3 @@
1
+ 'use strict';const User=global.getModel("user"),BearerStrategy=require("passport-http-bearer").Strategy;
2
+ module.exports=function($passport$$){$passport$$.use(new BearerStrategy({passReqToCallback:!0},function($req$$,$token$$,$done$$){let $ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,$session_created$$=($req$$.cookies||{}).uid;setImmediate(function(){User.findByToken($token$$,$ip$$,async function($err$$,$user$$,$tokenInfo$$){if($err$$)return $done$$($err$$);if($tokenInfo$$.once&&$tokenInfo$$.used)return console.error("can't use token",$token$$,"at",$req$$.originalUrl),
3
+ $done$$("Token n\u00e0y \u0111\u00e3 h\u1ebft hi\u1ec7u l\u1ef1c");if(!$user$$)return $done$$(null,!1);if(0==$user$$.status)return $done$$("T\u00e0i kho\u1ea3n n\u00e0y kh\u00f4ng c\u00f2n hi\u1ec7u l\u1ef1c");$user$$.toObject&&($user$$=$user$$.toObject());$user$$.token_id_app=$tokenInfo$$.only_id_app;$user$$.token_id_apps=$tokenInfo$$.id_apps;return $done$$(null,$user$$)},{session_created:$session_created$$})})}))};
@@ -0,0 +1,13 @@
1
+ 'use strict';const User=global.getModel("user"),Usergroup=global.getModel("usergroup"),Participant=global.getModel("participant"),Token=global.getModel("token"),Customer=global.getModel("customer"),App=global.getModel("app"),request=require("request");
2
+ module.exports=function($app$$){function $getProfile$$($access_token$$,$callback$$){request(`${"https://graph.facebook.com/me?fields=location,first_name,last_name,middle_name,name,gender,timezone,locale,about,address,age_range,birthday,cover,currency,email,id,languages,religion,sports,picture.type(large)"}&access_token=${$access_token$$}`,($e_profileUser$$,$res$$,$body$$)=>{if($e_profileUser$$)return $callback$$($e_profileUser$$);$e_profileUser$$=JSON.parse($body$$);if($e_profileUser$$.error)return $callback$$($e_profileUser$$);
3
+ $e_profileUser$$.emails&&0<$e_profileUser$$.emails.length&&!$e_profileUser$$.email&&($e_profileUser$$.email=$e_profileUser$$.emails[0]);$e_profileUser$$.displayName||($e_profileUser$$.displayName=$e_profileUser$$.name);$callback$$(null,$e_profileUser$$)})}function $addUserToCompany$$($body$$,$newUser$$){$body$$.id_app&&App.findById($body$$.id_app,async($e$jscomp$0$$,$app$$)=>{if($e$jscomp$0$$||!$app$$)return console.log("Can't find app",$body$$.id_app,$e$jscomp$0$$);$e$jscomp$0$$=$body$$.group_id;
4
+ if(!$e$jscomp$0$$)try{$e$jscomp$0$$=await Usergroup.getInfo($body$$.id_app,{status:!0,is_customer_group:!0},"_id")}catch($e$$){console.log($e$$.message)}Participant.createParticipant({id_app:$body$$.id_app,email:$newUser$$.email,group_id:$e$jscomp$0$$,active:!0},$cust_e$$=>{$cust_e$$&&console.log("can't add user",$newUser$$.email,"to company",$app$$.name,$cust_e$$);$cust_e$$={ten_kh:$newUser$$.name,email:$newUser$$.email,id_app:$body$$.id_app,user_created:$newUser$$.email,user_updated:$newUser$$.email,
5
+ kh_yn:!0,of_user:$newUser$$.email};try{Customer.asyncCreateCustomer($cust_e$$)}catch($e$$){console.log("Auto create new customer with error:",$e$$.message)}})})}async function $checkExistUser$$($email$$){return new Promise(($resolve$$,$reject$$)=>{User.findOne({email:$email$$.toLowerCase()},($e$$,$rs$$)=>{if($e$$)return $reject$$(Error($e$$.message));$rs$$?$resolve$$($rs$$.toObject()):$resolve$$(null)})})}async function $createUser$$($accessToken$$,$profile$$,$done$$){setImmediate(async function(){let $u$$=
6
+ await $checkExistUser$$($profile$$.email||$profile$$.id);if($u$$){if($u$$.facebook&&$u$$.facebook.id===$profile$$.id||$u$$.email===$profile$$.email){$addUserToCompany$$($profile$$,$u$$);(new Token({email:$u$$.email,token:$accessToken$$,service:"facebook"})).save(function($e$$){if($e$$)return $done$$($e$$);$done$$(null,$u$$)});return}return $done$$(`${$u$$.email} \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd tr\u00ean h\u1ec7 th\u1ed1ng`)}$profile$$.email||($profile$$.email=$profile$$.id);
7
+ User.findOne({"facebook.id":$profile$$.id},async function($error$$,$user$$){if($error$$)return $done$$($error$$);if($user$$){if(0==$user$$.status)return $done$$("T\u00e0i kho\u1ea3n n\u00e0y kh\u00f4ng c\u00f2n hi\u1ec7u l\u1ef1c");$user$$.facebook.name=$profile$$.displayName;$user$$.facebook.picture=$profile$$.picture.data.url;$user$$.facebook.email=$profile$$.email;$user$$.name=$profile$$.displayName;$user$$.join_date||($user$$.join_date=new Date);$user$$.server="facebook";$user$$.local||($user$$.picture=
8
+ $user$$.facebook.picture,$user$$.local={email:$user$$.email,name:$user$$.name,picture:$user$$.picture});$profile$$.password&&($user$$.local.password=$user$$.generateHash($user$$.email+$profile$$.password));$user$$.local.picture||($user$$.local.picture=$user$$.facebook.picture);$user$$.picture||($user$$.picture=$user$$.facebook.picture);$user$$.save(function($err$$,$user$$){if($err$$)return $done$$($err$$);$addUserToCompany$$($profile$$,$user$$);(new Token({email:$user$$.email,token:$accessToken$$,
9
+ service:"facebook"})).save(function($e$$){return $e$$?$done$$($e$$):$done$$(null,$user$$)})})}else $user$$=new User,$user$$.current_user=$profile$$.email||$profile$$.id,$user$$.facebook.id=$profile$$.id,$user$$.facebook.email=$profile$$.email,$user$$.facebook.name=$profile$$.displayName,$user$$.facebook.picture=$profile$$.picture.data.url,$user$$.email=$profile$$.email||$profile$$.id,$user$$.name=$profile$$.displayName,$user$$.picture=$profile$$.picture.data.url,$user$$.server="facebook",$user$$.local=
10
+ {email:$user$$.email,name:$user$$.name,picture:$user$$.picture,password:$profile$$.password?$user$$.generateHash($user$$.email+$profile$$.password):null},$user$$.join_date||($user$$.join_date=new Date),$user$$.save(function($err$$,$user$$){if($err$$)return $done$$($err$$);$addUserToCompany$$($profile$$,$user$$);(new Token({email:$user$$.email,token:$accessToken$$,service:"facebook"})).save(function($e$$){return $e$$?$done$$($e$$):$done$$(null,$user$$)})})})})}$app$$.get("/profile/facebook",($access_token$$,
11
+ $res$$)=>{$access_token$$=$access_token$$.query.access_token;if(!$access_token$$)return $res$$.status(400).send("this API require access_token parameter");$getProfile$$($access_token$$,($e$jscomp$0$$,$profileUser$$)=>{if($e$jscomp$0$$)return $res$$.status(400).send($e$jscomp$0$$);User.findOne({"facebook.id":$profileUser$$.id.toString()},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$profileUser$$.registed=$rs$$?!0:!1;$res$$.send($profileUser$$)})})});$app$$.get("/createuser/facebook",
12
+ ($req$$,$res$$)=>{let $access_token$$=$req$$.query.access_token;if(!$access_token$$)return $res$$.status(400).send("this API require access_token parameter");$getProfile$$($access_token$$,($e$jscomp$0$$,$profileUser$$)=>{if($e$jscomp$0$$)return $res$$.status(400).send($e$jscomp$0$$);$profileUser$$.id_app=$req$$.query.id_app;$profileUser$$.group_id=$req$$.query.group_id;$profileUser$$.password=$req$$.query.password;$createUser$$($access_token$$,$profileUser$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);
13
+ $res$$.send($rs$$)})})})};
@@ -0,0 +1,14 @@
1
+ 'use strict';const User=global.getModel("user"),Usergroup=global.getModel("usergroup"),Customer=global.getModel("customer"),Token=global.getModel("token"),App=global.getModel("app"),Participant=global.getModel("participant"),request=require("request");
2
+ module.exports=function($app$$){function $getProfile$$($token$$,$callback$$){request({url:$token$$.access_token?"https://www.googleapis.com/userinfo/v2/me":"https://oauth2.googleapis.com/tokeninfo?id_token="+$token$$.id_token,headers:{Authorization:$token$$.access_token?`Bearer ${$token$$.access_token}`:null}},($e_profileUser$$,$res$$,$body$$)=>{if($e_profileUser$$)return $callback$$($e_profileUser$$);$e_profileUser$$=JSON.parse($body$$);if($e_profileUser$$.error)return $callback$$($e_profileUser$$.error);
3
+ $e_profileUser$$.emails&&0<$e_profileUser$$.emails.length&&!$e_profileUser$$.email&&($e_profileUser$$.email=$e_profileUser$$.emails[0].value);$e_profileUser$$.emails||($e_profileUser$$.emails=[{value:$e_profileUser$$.email||$e_profileUser$$.id}]);$e_profileUser$$.displayName||($e_profileUser$$.displayName=$e_profileUser$$.name);$callback$$(null,$e_profileUser$$)})}function $addUserToCompany$$($body$$,$newUser$$){$body$$.id_app&&App.findById($body$$.id_app,async($e$jscomp$0$$,$app$$)=>{if($e$jscomp$0$$||
4
+ !$app$$)return console.log("Can't find app",$body$$.id_app,$e$jscomp$0$$);$e$jscomp$0$$=$body$$.group_id;if(!$e$jscomp$0$$)try{$e$jscomp$0$$=await Usergroup.getInfo($body$$.id_app,{status:!0,is_customer_group:!0},"_id")}catch($e$$){console.log($e$$.message)}Participant.createParticipant({id_app:$body$$.id_app,email:$newUser$$.email,group_id:$e$jscomp$0$$,active:!0},$cust_e$$=>{$cust_e$$&&console.log("can't add user",$newUser$$.email,"to company",$app$$.name);$cust_e$$={ten_kh:$newUser$$.name,email:$newUser$$.email,
5
+ id_app:$body$$.id_app,user_created:$newUser$$.email,user_updated:$newUser$$.email,kh_yn:!0,of_user:$newUser$$.email};try{Customer.asyncCreateCustomer($cust_e$$)}catch($e$$){console.log("Auto create new customer with error:",$e$$.message)}})})}async function $checkExistUser$$($email$$){return new Promise(($resolve$$,$reject$$)=>{User.findOne({email:$email$$.toLowerCase()}).lean().exec(($e$$,$rs$$)=>{if($e$$)return $reject$$(Error($e$$.message));$rs$$?$resolve$$($rs$$):$resolve$$(null)})})}async function $createUser$$($accessToken$$,
6
+ $profile$$,$done$$){setImmediate(async()=>{let $u$$=await $checkExistUser$$($profile$$.emails[0].value);if($u$$){if($u$$.google&&$u$$.google.id===$profile$$.id||$u$$.email===$profile$$.email){$addUserToCompany$$($profile$$,$u$$);(new Token({email:$u$$.email,token:$accessToken$$,service:"google"})).save(function($e$$){if($e$$)return console.log("error create token",$e$$),$done$$($e$$);$done$$(null,$u$$)});return}console.error(`${$profile$$.email} \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd tr\u00ean h\u1ec7 th\u1ed1ng`,
7
+ $u$$);return $done$$(`${$profile$$.email} \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd tr\u00ean h\u1ec7 th\u1ed1ng`)}User.findOne({"google.id":$profile$$.id||$profile$$.email},async function($error$$,$user$$){if($error$$)return $done$$($error$$);if($user$$){if(0==$user$$.status)return $done$$("T\u00e0i kho\u1ea3n n\u00e0y kh\u00f4ng c\u00f2n hi\u1ec7u l\u1ef1c");console.log("update user....");$user$$.google.name=$profile$$.displayName;$profile$$._json&&($user$$.google.picture=$profile$$._json.image.url);
8
+ $user$$.token=$accessToken$$;$user$$.name=$profile$$.displayName;$user$$.join_date||($user$$.join_date=new Date);$user$$.server="google";$user$$.local||($user$$.picture=$user$$.google.picture,$user$$.local={email:$user$$.email,name:$user$$.name,picture:$user$$.picture});$user$$.picture||($user$$.picture=$user$$.google.picture);$user$$.save(function($err$jscomp$1_token$$,$user$$){if($err$jscomp$1_token$$)return console.log("error update user",$err$jscomp$1_token$$),$done$$($err$jscomp$1_token$$);$err$jscomp$1_token$$=
9
+ new Token({email:$user$$.email,token:$accessToken$$,service:"google"});$addUserToCompany$$($profile$$,$user$$);$err$jscomp$1_token$$.save(function($e$$){return $e$$?(console.log("error create token",$e$$),$done$$($e$$)):$done$$(null,$user$$)})})}else console.log("create new user...",$profile$$.email),$user$$=new User,$user$$.current_user=$profile$$.emails[0].value,$user$$.google.id=$profile$$.id,$user$$.google.email=$profile$$.emails[0].value,$user$$.google.name=$profile$$.displayName,$profile$$._json&&
10
+ ($user$$.google.picture=$profile$$._json.image.url),$user$$.token=$accessToken$$,$user$$.email=$profile$$.emails[0].value,$user$$.name=$profile$$.displayName,$user$$.picture=$user$$.google.picture,$user$$.join_date=new Date,$user$$.server="google",$user$$.local={email:$user$$.email,name:$user$$.name,picture:$user$$.picture},$user$$.save(function($err$$,$user$$){if($err$$)return console.log("error create new user",$err$$),$done$$($err$$);$addUserToCompany$$($profile$$,$user$$);(new Token({email:$user$$.email,
11
+ token:$accessToken$$,service:"google"})).save(function($e$$){return $e$$?(console.log("error create token",$e$$),$done$$($e$$)):$done$$(null,$user$$)})})})})}$app$$.get("/profile/google",($idToken_req$$,$res$$)=>{let $access_token$$=$idToken_req$$.query.access_token;$idToken_req$$=$idToken_req$$.query.id_token;if(!$access_token$$&&!$idToken_req$$)return $res$$.status(400).send("this API require access_token or id_token parameter");$getProfile$$({id_token:$idToken_req$$,access_token:$access_token$$},
12
+ ($e$jscomp$0$$,$profileUser$$)=>{if($e$jscomp$0$$)return $res$$.status(400).send($e$jscomp$0$$);User.findOne({"google.id":$profileUser$$.id.toString()},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$profileUser$$.registed=$rs$$?!0:!1;$res$$.send($profileUser$$)})})});$app$$.get("/createuser/google",($req$$,$res$$)=>{let $access_token$$=$req$$.query.access_token,$idToken$$=$req$$.query.id_token;if(!$access_token$$&&!$idToken$$)return $res$$.status(400).send("this API require access_token or id_token parameter");
13
+ $getProfile$$({id_token:$idToken$$,access_token:$access_token$$},($e$jscomp$0$$,$profileUser$$)=>{if($e$jscomp$0$$)return $res$$.status(400).send($e$jscomp$0$$);$profileUser$$.id_app=$req$$.query.id_app;$profileUser$$.group_id=$req$$.query.group_id;$profileUser$$.email||($profileUser$$.email=$req$$.query.email||$profileUser$$.id);$profileUser$$.password=$req$$.query.password;let $token$$=$access_token$$||$idToken$$;$createUser$$($token$$,$profileUser$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);
14
+ $rs$$.toObject&&($rs$$=$rs$$.toObject());$rs$$.access_token=$token$$;$res$$.send($rs$$)})})})};
@@ -0,0 +1,64 @@
1
+ 'use strict';const User=global.getModel("user"),Participant=global.getModel("participant"),UserGroup=global.getModel("usergroup"),Customer=global.getModel("customer"),axios=require("axios"),log=global.getModel("log"),App=global.getModel("app"),Wallet=global.getModel("wallet"),Token=global.getModel("token"),BasicStrategy=require("passport-http").BasicStrategy,_crypto=require("crypto"),validator=require("validator"),email=require("../libs/email"),loadTemplate=require("../libs/load-template"),permission=
2
+ require("../libs/permission"),OTP=global.getModel("otp"),DIGITS="0123456789",jwt=require("jsonwebtoken"),redisCache=require("../libs/redis-cache"),utils=require("../libs/utils"),Controler=require("../controllers/controller"),{isValidObjectId}=require("mongoose"),moment=require("moment"),querystring=require("querystring"),total_time_wait_login=36E5,total_time_try_login=3;function generateOTP(){let $OTP$$="";for(let $i$$=0;6>$i$$;$i$$++)$OTP$$+=DIGITS[Math.floor(10*Math.random())];return $OTP$$}
3
+ function generateToken($accessToken_user$$){var $body_n$$={email:$accessToken_user$$.email};configs.APP_SECRET?$accessToken_user$$=jwt.sign({user:$body_n$$},configs.APP_SECRET):($body_n$$=new Date,$accessToken_user$$=_crypto.createHash("md5").update($accessToken_user$$.email+$body_n$$.toISOString()).digest("hex"));return $accessToken_user$$}
4
+ function saveOTP($Phone$$,$otp_code$$,$expires$$=5){let $expire_time$$=new Date;$expire_time$$.setMinutes($expire_time$$.getMinutes()+$expires$$);return OTP.create({phone:$Phone$$,otp:$otp_code$$,expire_time:$expire_time$$})}
5
+ function findByUsername($username$$,$fn$$){if(!$username$$)return $fn$$("B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");User.findOne({$or:[{email:$username$$},{"local.phone":$username$$}]},function($error$$,$result$$){return!$error$$&&$result$$&&$result$$.local?$fn$$(null,$result$$):$fn$$($error$$||`T\u00e0i kho\u1ea3n ${$username$$} kh\u00f4ng t\u1ed3n t\u1ea1i`)})}
6
+ async function addUserToApp($user$$,$body$$,$par_session_created_ug$$){if($body$$.id_app){if(!await App.findById($body$$.id_app))throw console.error("Can't find app",$body$$.id_app),"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y th\u00f4ng tin c\u00f4ng ty n\u00e0y";$user$$.current_id_app=$body$$.id_app;$par_session_created_ug$$=await Participant.asyncCreateParticipant({id_app:$body$$.id_app,name:$body$$.name||$user$$.email,email:$body$$.email,group_id:$body$$.group_id,active:!0,session_created:$par_session_created_ug$$});
7
+ let $cust$$;await global.getModel("customer").findOne({id_app:$body$$.id_app,of_user:$user$$.email},{_id:1}).lean()||($cust$$={ten_kh:$body$$.name||$user$$.email,email:validator.isEmail($user$$.email)?$user$$.email:void 0},$body$$.customer_info&&($cust$$={...$cust$$,...$body$$.customer_info}),$cust$$.ten_kh||($cust$$.ten_kh=$body$$.name||$user$$.email),$cust$$={...$cust$$,id_app:$body$$.id_app,user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email},$par_session_created_ug$$&&
8
+ $par_session_created_ug$$.group_id&&($par_session_created_ug$$=await global.getModel("usergroup").findOne({id_app:$body$$.id_app,_id:$par_session_created_ug$$.group_id},{nh_kh:1}),$cust$$.nh_kh=($par_session_created_ug$$||{}).nh_kh));if($body$$.introduce_code){let $contrIntroducer$$=global.controllers.INTRODUCER;await new Promise(($rs$$,$rj$$)=>{Controler.create($user$$,$contrIntroducer$$,{introduce_code:$body$$.introduce_code},($e$$,$intr$$)=>{if($e$$)return $rj$$($e$$.message||$e$$.error||$e$$);
9
+ $cust$$&&($cust$$.phu_trach=$intr$$.be_introduced_by);$rs$$()})})}$cust$$&&await Customer.asyncCreateCustomer($cust$$)}}
10
+ module.exports=async function($app$jscomp$0$$,$passport$$){const $rateLimiter$$=await global.createRateLimiterMiddleware(configs.limitRequest.auth||{},"auth");$passport$$.use(new BasicStrategy(function($username$$,$password$$,$done$$){if(!$username$$)return $done$$("B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");$username$$=$username$$.trim();let $id_app$$;if(0<$username$$.indexOf("@app=")){const $user_app$$=$username$$.split("@app=");$username$$=$user_app$$[0];$id_app$$=$user_app$$[1]}$username$$=
11
+ $username$$.toLowerCase();setImmediate(function(){findByUsername($username$$,async function($err_pars_pars$$,$user$$){if($err_pars_pars$$)return $done$$($err_pars_pars$$);if(!$user$$)return $done$$("T\u00e0i kho\u1ea3n "+$username$$+" ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd.");if(0==$user$$.status)return $done$$("T\u00e0i kho\u1ea3n n\u00e0y kh\u00f4ng c\u00f2n hi\u1ec7u l\u1ef1c");if($user$$.local.rspassword)if($user$$.validRspassword($password$$))$user$$.local.password=$user$$.local.rspassword,
12
+ $user$$.local.rspassword=void 0,User.findOneAndUpdate({email:$user$$.email},{local:$user$$.local},($e$$,$rs$$)=>{if($e$$)return console.error("Can't update password",$user$$.email,$e$$);console.log("updated new password",$user$$.email,$rs$$)});else{if(!$user$$.validPassword($password$$))if($id_app$$)if(await $user$$.validAppPassword($password$$,$id_app$$))$user$$=$user$$.toObject(),$user$$.token_id_app=$id_app$$;else return $done$$("M\u1eadt kh\u1ea9u kh\u00f4ng ch\u00ednh x\u00e1c.");else return $err_pars_pars$$=
13
+ await $user$$.getAppOfPassword($password$$),0<$err_pars_pars$$.length?($user$$=$user$$.toObject(),$user$$.token_id_apps=$err_pars_pars$$.map($p$$=>$p$$.id_app),$done$$(null,$user$$)):$done$$("M\u1eadt kh\u1ea9u kh\u00f4ng ch\u00ednh x\u00e1c.")}else{if(!$user$$.local.password)return $done$$("M\u1eadt kh\u1ea9u cho ng\u01b0\u1eddi d\u00f9ng n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i. H\u00e3y s\u1eed d\u1ee5ng t\u00ednh n\u0103ng kh\u00f4i ph\u1ee5c m\u1eadt kh\u1ea9u \u0111\u1ec3 \u0111\u1eb7t l\u1ea1i m\u1eadt kh\u1ea9u cho ng\u01b0\u1eddi d\u00f9ng n\u00e0y");
14
+ if(!$user$$.validPassword($password$$))if($id_app$$)if(await $user$$.validAppPassword($password$$,$id_app$$))$user$$=$user$$.toObject(),$user$$.token_id_app=$id_app$$;else return $done$$("M\u1eadt kh\u1ea9u kh\u00f4ng ch\u00ednh x\u00e1c.");else return $err_pars_pars$$=await $user$$.getAppOfPassword($password$$),0<$err_pars_pars$$.length?($user$$=$user$$.toObject(),$user$$.token_id_apps=$err_pars_pars$$.map($p$$=>$p$$.id_app),$done$$(null,$user$$)):$done$$("M\u1eadt kh\u1ea9u kh\u00f4ng ch\u00ednh x\u00e1c.")}return $done$$(null,
15
+ $user$$)})})}));$app$jscomp$0$$.get("/send-otp/:address_receive_otp",$rateLimiter$$,async($headers_req$$,$res$$)=>{var $address_receive_otp_app$jscomp$2_id_app$$=$headers_req$$.params.address_receive_otp.trim().toLowerCase();console.log("send otp to",$address_receive_otp_app$jscomp$2_id_app$$);if(configs.GOOGLE_RECAPTCHA_SECRET_KEY){if(!$headers_req$$.query["g-recaptcha-response"])return $res$$.status(400).send("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u m\u1ed9t google recaptcha token");try{await permission.verifyReCaptcha($headers_req$$.query["g-recaptcha-response"])}catch($e$$){return console.error("Can't verify recaptcha when send otp",
16
+ $e$$),$res$$.status(400).send($e$$.messag||$e$$.error||$e$$)}}var $data_u$$=await User.findOne({$or:[{email:$address_receive_otp_app$jscomp$2_id_app$$},{"local.phone":$address_receive_otp_app$jscomp$2_id_app$$}]});if(!$data_u$$)return $res$$.status(400).send({error:`T\u00e0i kho\u1ea3n ${$address_receive_otp_app$jscomp$2_id_app$$} kh\u00f4ng t\u1ed3n t\u1ea1i`});const $username$$=$data_u$$.email;var $message_message$jscomp$1_otp_code$jscomp$1_url$$=generateOTP();let $phone$$;$address_receive_otp_app$jscomp$2_id_app$$!=
17
+ $username$$&&utils.isMobilePhone($address_receive_otp_app$jscomp$2_id_app$$)?$phone$$=$address_receive_otp_app$jscomp$2_id_app$$:utils.isMobilePhone($username$$)?$phone$$=$username$$:utils.isMobilePhone(($data_u$$.local||{}).phone||"")&&($phone$$=($data_u$$.local||{}).phone);let $optObject$$;try{$optObject$$=await saveOTP($username$$,$message_message$jscomp$1_otp_code$jscomp$1_url$$)}catch($e$$){return $res$$.status(400).send({error:"Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 OTP"})}if($phone$$){if(($address_receive_otp_app$jscomp$2_id_app$$=
18
+ $headers_req$$.query.id_app)&&isValidObjectId($address_receive_otp_app$jscomp$2_id_app$$)&&($address_receive_otp_app$jscomp$2_id_app$$=await global.getModel("app").findOne({_id:$address_receive_otp_app$jscomp$2_id_app$$}))&&$address_receive_otp_app$jscomp$2_id_app$$.zalo_otp_template_id&&$address_receive_otp_app$jscomp$2_id_app$$.zalo_app_id&&$address_receive_otp_app$jscomp$2_id_app$$.zalo_secret_key&&$address_receive_otp_app$jscomp$2_id_app$$.zalo_access_token&&$address_receive_otp_app$jscomp$2_id_app$$.zalo_refresh_token){const {zalo_otp_template_id:$zalo_otp_template_id$$,
19
+ zalo_app_id:$zalo_app_id$$,zalo_secret_key:$zalo_secret_key$$,zalo_refresh_token:$zalo_refresh_token$$,zalo_expires_in:$zalo_expires_in$$,zalo_updated:$zalo_updated$$}=$address_receive_otp_app$jscomp$2_id_app$$;if(moment().diff(moment($zalo_updated$$),"seconds")>$zalo_expires_in$$+1E3){$headers_req$$={"Content-Type":"application/x-www-form-urlencoded",secret_key:$zalo_secret_key$$};$data_u$$={refresh_token:$zalo_refresh_token$$,app_id:$zalo_app_id$$,grant_type:"refresh_token"};try{let $rs$$=await axios.post("https://oauth.zaloapp.com/v4/oa/access_token",
20
+ querystring.stringify($data_u$$),{headers:$headers_req$$});if($rs$$.data.error)return $res$$.status(400).send({error:`Kh\u00f4ng th\u1ec3 g\u1eedi m\u00e3 OTP. L\u1ed7i: ${$rs$$.data.message}`});let $zalo_token$$=$rs$$.data;$address_receive_otp_app$jscomp$2_id_app$$.zalo_access_token=$zalo_token$$.access_token;$address_receive_otp_app$jscomp$2_id_app$$.zalo_refresh_token=$zalo_token$$.refresh_token;$address_receive_otp_app$jscomp$2_id_app$$.zalo_expires_in=$zalo_token$$.expires_in;$address_receive_otp_app$jscomp$2_id_app$$.zalo_updated=
21
+ new Date;await $address_receive_otp_app$jscomp$2_id_app$$.save()}catch($e$$){return $message_message$jscomp$1_otp_code$jscomp$1_url$$=(($e$$.response||{}).data||{}).message,console.error("Can't get access token from zalo",$message_message$jscomp$1_otp_code$jscomp$1_url$$||$e$$),$res$$.status(400).send({error:$message_message$jscomp$1_otp_code$jscomp$1_url$$||$e$$.message||$e$$||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi t\u00e0i kho\u1ea3n ${$username$$}`})}}try{const $headers$$=
22
+ {"Content-Type":"application/json",access_token:$address_receive_otp_app$jscomp$2_id_app$$.zalo_access_token};$phone$$="84"+$phone$$.toString().substring(1);let $rs$$=await axios({method:"post",url:"https://business.openapi.zalo.me/message/template",data:{phone:$phone$$,template_id:$zalo_otp_template_id$$,template_data:{otp:$message_message$jscomp$1_otp_code$jscomp$1_url$$},tracking_id:$optObject$$._id.toString()},headers:$headers$$});return $rs$$.data.error?$res$$.status(400).send({error:`Kh\u00f4ng th\u1ec3 g\u1eedi m\u00e3 OTP t\u1edbi ${$phone$$}. L\u1ed7i: ${$rs$$.data.message}`}):
23
+ $res$$.send($optObject$$.toObject())}catch($e$$){return $message_message$jscomp$1_otp_code$jscomp$1_url$$=(($e$$.response||{}).data||{}).message,console.error("Can't send message from zalo",$message_message$jscomp$1_otp_code$jscomp$1_url$$||$e$$),$res$$.status(400).send({error:$message_message$jscomp$1_otp_code$jscomp$1_url$$||$e$$.message||$e$$||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi t\u00e0i kho\u1ea3n ${$username$$}`})}}if(configs.sms&&(configs.sms.send||configs.sms.genUrlSendOTP))if(configs.sms.send)configs.sms.send($phone$$,
24
+ $message_message$jscomp$1_otp_code$jscomp$1_url$$,$headers_req$$.query.id_app).then($rs$$=>{$rs$$.error_message?$res$$.status(400).send({error:$rs$$.message||$rs$$.error||$rs$$.error_message||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi t\u00e0i kho\u1ea3n ${$username$$}`}):$res$$.send($optObject$$.toObject())}).catch($e$$=>{$e$$||($e$$={message:"Kh\u00f4ng th\u1ec3 g\u1eedi m\u00e3 OTP"});console.error("Error send sms",$e$$);$res$$.status(400).send({error:$e$$.ErrorMessage||
25
+ $e$$.message||$e$$.error_message||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi t\u00e0i kho\u1ea3n ${$username$$}`})});else if($message_message$jscomp$1_otp_code$jscomp$1_url$$=configs.sms.genUrlSendOTP($phone$$,$message_message$jscomp$1_otp_code$jscomp$1_url$$,$headers_req$$.query.id_app))try{await axios.get($message_message$jscomp$1_otp_code$jscomp$1_url$$),$res$$.send($optObject$$.toObject())}catch($e$$){console.error($e$$),$res$$.status(400).send({error:$e$$.message||
26
+ $e$$.error||$e$$||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi t\u00e0i kho\u1ea3n ${$username$$}`})}else $res$$.status(400).send({error:`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi t\u00e0i kho\u1ea3n ${$username$$}`});else $res$$.status(400).send({error:`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi t\u00e0i kho\u1ea3n ${$username$$}`})}else{let $email_address$$;validator.isEmail($address_receive_otp_app$jscomp$2_id_app$$)&&
27
+ $address_receive_otp_app$jscomp$2_id_app$$!=$username$$?$email_address$$=$address_receive_otp_app$jscomp$2_id_app$$:validator.isEmail($username$$)?$email_address$$=$username$$:$data_u$$.email2&&validator.isEmail($data_u$$.email2)&&($email_address$$=$data_u$$.email2);$email_address$$?email.sendHtml({to:{address:$email_address$$},subject:"M\u00e3 x\u00e1c th\u1ef1c",html:`Xin vui l\u00f2ng g\u1eedi qu\u00fd kh\u00e1ch m\u00e3 x\u00e1c th\u1ef1c: ${$message_message$jscomp$1_otp_code$jscomp$1_url$$}. M\u00e3 n\u00e0y s\u1ebd h\u1ebft h\u1ea1n s\u1eed d\u1ee5ng sau 5 ph\u00fat.`},
28
+ 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 ${$username$$}`)):$res$$.send($optObject$$.toObject())},configs.sender_otp):$res$$.status(400).send({error:`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi t\u00e0i kho\u1ea3n ${$username$$}`})}});$app$jscomp$0$$.get("/verify-otp/:id/:otp",$rateLimiter$$,async function($req$$,$res$$){try{const $id$$=
29
+ $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 h\u1ee3p l\u1ec7",code:4001});const $otp_code$$=$req$$.params.otp,$otp$$=await OTP.findById($id$$);if(!$otp$$)return $res$$.status(400).send({error:"M\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i",code:4001});$otp$$.tried_number=($otp$$.tried_number||0)+1;await $otp$$.save();if($otp$$.otp!=$otp_code$$||$otp$$.verified||
30
+ $otp$$.tried_number>(configs.MAX_TRY_OTP||3)||$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 $user$$=await User.findOne({email:$otp$$.phone});if(!$user$$)return $res$$.status(400).send({error:"T\u00e0i kho\u1ea3n kh\u00f4ng t\u1ed3n t\u1ea1i",code:4001});if(!$user$$.local||
31
+ !$user$$.local.active){$user$$.local=$user$$.local||{};$user$$.local.active=!0;try{await $user$$.save(),redisCache.set("user",$user$$.toObject(),function($e$$){$e$$?console.error($e$$):console.log("cache user infomation to redis")})}catch($e$$){return console.log("error verify otp, create user",$e$$),$res$$.status(500).send($e$$)}}const $accessToken$$=generateToken($user$$);(new Token({email:$user$$.email,session_created:($req$$.cookies||{}).uid,token:$accessToken$$,agent:$req$$.headers["user-agent"],
32
+ 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$$,once:$rs$$.once})})}catch($e$$){console.error("error verify otp",$e$$),$res$$.status(400).send($e$$.message)}});$app$jscomp$0$$.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$$||
33
+ "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");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||
34
+ $e$$)}});$app$jscomp$0$$.get("/auth/local",$rateLimiter$$,function($req$$,$res$$,$next$$){let $ip$$=($req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress).split(".").join("").split(":").join("");var $authorization_password$$=$req$$.headers.authorization;if(!$authorization_password$$)return $res$$.status(400).send({message:"Authorization is required"});$authorization_password$$=Buffer.from($authorization_password$$.replace("Basic ",""),"base64").toString("utf-8");$authorization_password$$=
35
+ $authorization_password$$.split(":");if(1<$authorization_password$$.length){let $username$$=$authorization_password$$[0].trim().toLowerCase();$authorization_password$$=$authorization_password$$[1].trim();$req$$.query.id_app&&0>$username$$.indexOf("@app=")&&($username$$=`${$username$$}@app=${$req$$.query.id_app}`,$req$$.headers.authorization=`Basic ${Buffer.from($username$$+":"+$authorization_password$$).toString("base64")}`);let $t_session$$="times_login_"+$ip$$+"_"+$username$$.toLowerCase(),$d_session$$=
36
+ "datetime_login_"+$ip$$+"_"+$username$$.toLowerCase();$req$$.t_session=$t_session$$;$req$$.d_session=$d_session$$;let $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$$]):$req$$[$d_session$$]=$now$$;$req$$=$now$$.getTime()-$d$$.getTime();
37
+ if($req$$<total_time_wait_login&&$times_try$$>total_time_try_login)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai "+total_time_try_login+" l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+Math.roundBy((total_time_wait_login-$req$$)/6E4,2)+" 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$$,
38
+ $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()-$d$$.getTime();if($err$jscomp$3_time_wait$$<total_time_wait_login&&$times_try$$>total_time_try_login)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai "+total_time_try_login+" l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+
39
+ Math.roundBy((total_time_wait_login-$err$jscomp$3_time_wait$$)/6E4,2)+" ph\u00fat"});$next$$()})})}},function($req$$,$res$$,$next$$){$passport$$.authenticate("basic",{session:!1},async function($err$jscomp$4_p$$,$user$$){if($err$jscomp$4_p$$||!$user$$)return $res$$.status(401).send({message:$err$jscomp$4_p$$||"Unauthorized"});if(configs.require_verify&&!$user$$.local.active)return $res$$.status(401).send({require_verify:!0});if($req$$.query.id_app&&($err$jscomp$4_p$$=await global.getModel("participant").findOne({id_app:$req$$.query.id_app,
40
+ email:$user$$.email}).lean())&&!$err$jscomp$4_p$$.active&&!$err$jscomp$4_p$$.admin)return $res$$.status(401).send({message:"T\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n \u0111ang ch\u1edd \u0111\u01b0\u1ee3c x\u00e9t duy\u1ec7t",active:!1});$req$$.user=$user$$;$next$$()})($req$$,$res$$,$next$$)},async($req$$,$res$$)=>{let $agent$$=$req$$.headers["user-agent"];$req$$.headers.cookie?($session$jscomp$1_user$$=$req$$.session,$session$jscomp$1_user$$[$req$$.t_session]=0,$session$jscomp$1_user$$[$req$$.d_session]=
41
+ ""):(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$$);var $session$jscomp$1_user$$=$req$$.user;if($req$$.query.id_app&&global.mongoose.Types.ObjectId.isValid($req$$.query.id_app)){const $id_app$$=$req$$.query.id_app;let $group_id$$=$req$$.query.group_id&&global.mongoose.Types.ObjectId.isValid($req$$.query.group_id)?$req$$.query.group_id:void 0;
42
+ const $app$$=await App.findById($id_app$$);var $active_group_query_group$$={id_app:$id_app$$,$or:[{is_customer_group:!0},{is_partner_group:!0},{is_agent_group:!0},{is_pttt_group:!0}]};$group_id$$?$active_group_query_group$$._id=$group_id$$:$active_group_query_group$$.default_group=!0;$active_group_query_group$$=await UserGroup.findOne($active_group_query_group$$).lean();if($app$$&&$active_group_query_group$$){$group_id$$=$active_group_query_group$$._id.toString();$active_group_query_group$$=$active_group_query_group$$.not_need_active;
43
+ try{if(($p$jscomp$3_session_created$$=await Participant.asyncCreateParticipant({id_app:$id_app$$,email:$session$jscomp$1_user$$.email,name:$session$jscomp$1_user$$.name,group_id:$group_id$$,active:$active_group_query_group$$}))&&!$p$jscomp$3_session_created$$.active)return $res$$.status(401).send({message:"T\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n \u0111ang ch\u1edd \u0111\u01b0\u1ee3c x\u00e9t duy\u1ec7t",active:!1});let $cust$$={ten_kh:$session$jscomp$1_user$$.name||$session$jscomp$1_user$$.email,email:$session$jscomp$1_user$$.email,
44
+ id_app:$id_app$$,user_created:$session$jscomp$1_user$$.email,user_updated:$session$jscomp$1_user$$.email,kh_yn:!0,of_user:$session$jscomp$1_user$$.email};utils.isMobilePhone($session$jscomp$1_user$$.email,["vi-VN"])&&($cust$$.dien_thoai=$session$jscomp$1_user$$.email);try{await Customer.asyncCreateCustomer($cust$$)}catch($e$$){console.error("Auto create new customer with error:",$e$$.message)}}catch($e$$){return console.error("can't add user",$session$jscomp$1_user$$.email,"to company",$app$$.name),
45
+ $res$$.status(500).send($e$$)}}}const $accessToken$$=generateToken($session$jscomp$1_user$$);var $p$jscomp$3_session_created$$=($req$$.cookies||{}).uid;$p$jscomp$3_session_created$$&&User.updateOne({email:$session$jscomp$1_user$$.email,session_created:null},{session_created:$p$jscomp$3_session_created$$});(new Token({email:$session$jscomp$1_user$$.email,session_created:$p$jscomp$3_session_created$$,id_apps:$session$jscomp$1_user$$.token_id_apps,only_id_app:$session$jscomp$1_user$$.token_id_app,token:$accessToken$$,
46
+ 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$jscomp$0$$.get("/check-user/:email",$rateLimiter$$,function($req$$,$res$$){const $email$$=$req$$.params.email;User.findOne({$or:[{email:$email$$},{"local.phone":$email$$}]},{email:1,name:1,picture:1}).lean().exec(function($e$$,$user$$){if($e$$||!$user$$)return $res$$.status(400).send($e$$||
47
+ `T\u00e0i kho\u1ea3n ${$email$$} kh\u00f4ng t\u1ed3n t\u1ea1i`);$res$$.send($user$$)})});$app$jscomp$0$$.post("/signup",$rateLimiter$$,async($req$$,$res$$)=>{let $body$$=$req$$.body;$body$$.json&&($body$$=JSON.parse($body$$.json));if(!$body$$)return $res$$.status(400).send({error:"Kh\u00f4ng c\u00f3 n\u1ed9i dung"});if($body$$.id_app&&!global.mongoose.Types.ObjectId.isValid($body$$.id_app))return $res$$.status(400).send("id_app kh\u00f4ng h\u1ee3p l\u1ec7");if(configs.GOOGLE_RECAPTCHA_SECRET_KEY){var $app$$=
48
+ $body$$["g-recaptcha-response"]||$req$$.query["g-recaptcha-response"];if(!$app$$)return $res$$.status(400).send("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u m\u1ed9t google recaptcha token");try{await permission.verifyReCaptcha($app$$)}catch($e$$){return $res$$.status(400).send($e$$.message||$e$$.error||$e$$)}}let $session_created$$=($req$$.cookies||{}).uid;if($session_created$$&&$body$$.id_app){$app$$=await App.findById($body$$.id_app);if(!$app$$)return $res$$.status(400).send({error:"C\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i"});
49
+ if($app$$.options&&$app$$.options.one_account_per_device&&await Participant.findOne({session_created:$session_created$$,id_app:$body$$.id_app}).lean())return $res$$.status(400).send({error:"M\u1ed7i thi\u1ebft b\u1ecb ch\u1ec9 \u0111\u01b0\u1ee3c t\u1ea1o m\u1ed9t t\u00e0i kho\u1ea3n"})}if(!$body$$.email)return $res$$.status(400).send({error:"B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n"});$body$$.email=$body$$.email.trim().toLowerCase();if(!validator.isEmail($body$$.email)&&!utils.isMobilePhone($body$$.email,
50
+ ["vi-VN"]))return $res$$.status(400).send({error:"T\u00e0i kho\u1ea3n \u0111\u0103ng nh\u1eadp ph\u1ea3i l\u00e0 1 \u0111\u1ecba ch\u1ec9 email ho\u1eb7c 1 s\u1ed1 \u0111i\u1ec7n tho\u1ea1i di \u0111\u1ed9ng"});if(!$body$$.name)return $res$$.status(400).send({error:"H\u1ecd v\u00e0 t\u00ean ch\u01b0a nh\u1eadp"});if($body$$.introduce_code&&$body$$.id_app&&!await global.getModel("introducecode").findOne({id_app:$body$$.id_app,status:!0,introduce_code:$body$$.introduce_code}).lean())return $res$$.status(400).send({error:"M\u00e3 gi\u1edbi thi\u1ec7u kh\u00f4ng h\u1ee3p l\u1ec7"});
51
+ User.findOne({$or:[{email:$body$$.email},{"local.phone":$body$$.email}]},async function($error$jscomp$1$$,$result$$){if($error$jscomp$1$$)return $res$$.status(400).send($error$jscomp$1$$);if($result$$)if(!$result$$.local||configs.require_verify&&!$result$$.local.active||$result$$.local.email!=$body$$.email)$result$$.local||($result$$.local={});else if($body$$.id_app)try{if(await global.getModel("participant").findOne({id_app:$body$$.id_app,email:$body$$.email}))return $res$$.status(400).send({error:"T\u00e0i kho\u1ea3n n\u00e0y \u0111\u00e3 t\u1ed3n t\u1ea1i"});
52
+ await addUserToApp($result$$,$body$$,$session_created$$);return $res$$.send("T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd th\u00e0nh c\u00f4ng")}catch($e$$){return await global.getModel("participant").deleteOne({id_app:$body$$.id_app,email:$body$$.email}),$res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$})}else return $res$$.status(400).send({error:"T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd"});
53
+ else $result$$=new User,$result$$.email=$body$$.email,$result$$.local={};$result$$.local.email=$body$$.email;$result$$.local.name=$body$$.name;$result$$.local.active=!configs.require_verify;$result$$.partner=$body$$.partner;$result$$.session_created=$session_created$$;$body$$.email2&&validator.isEmail($body$$.email2)&&($result$$.email2=$body$$.email2);$result$$.name=$result$$.local.name;$body$$.picture?$result$$.local.picture=$body$$.picture:$result$$.local.picture||($result$$.local.picture="/images/avatar.jpg");
54
+ let $password$$;if($body$$.password){if($body$$.rePassword!==$body$$.password)return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c"});if(!User.teststrengthPassword($body$$.password))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"});$password$$=$body$$.password}else $password$$=
55
+ _crypto.createHash("md5").update($result$$.email+(new Date).toISOString()).digest("hex");$result$$.local.password=$result$$.generateHash($result$$.email+$password$$);$result$$.save(async function($app$jscomp$5_error$$,$newUser$$){if($app$jscomp$5_error$$)return $res$$.status(400).send({error:"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$5_error$$=new App;
56
+ $app$jscomp$5_error$$.user_created=$result$$.email;$app$jscomp$5_error$$.user_updated=$result$$.email;$app$jscomp$5_error$$.name=$body$$.cty_name;var $d$jscomp$1_now$$=new Date;$app$jscomp$5_error$$.ngay_dn=new Date($d$jscomp$1_now$$.getFullYear(),0,1);$app$jscomp$5_error$$.ngay_ks=new Date($d$jscomp$1_now$$.getFullYear()-1,12,0);$app$jscomp$5_error$$.nam_bd=$d$jscomp$1_now$$.getFullYear();$app$jscomp$5_error$$.ngay_ky1=new Date($d$jscomp$1_now$$.getFullYear(),0,1);$d$jscomp$1_now$$=new Date;$d$jscomp$1_now$$.setMonth($d$jscomp$1_now$$.getMonth()+
57
+ 3);$app$jscomp$5_error$$.expire_date=new Date($d$jscomp$1_now$$);$app$jscomp$5_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$$)})})}try{await addUserToApp($newUser$$,$body$$,$session_created$$)}catch($e$$){return await global.getModel("participant").deleteOne({id_app:$body$$.id_app,email:$body$$.email}),
58
+ await User.deleteOne({email:$body$$.email}),$res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$})}let $accessToken$$;if($newUser$$.local.active)try{$accessToken$$=generateToken($newUser$$),await (new Token({email:$newUser$$.email,session_created:($req$$.cookies||{}).uid,token:$accessToken$$,agent:$req$$.headers["user-agent"],ip:"",once:1==$req$$.query.once||"true"==$req$$.query.once||"1"===$req$$.query.once?!0:!1})).save()}catch($e$$){console.error("can't gen new token for new user:"+$newUser$$.email,
59
+ $e$$)}validator.isEmail($body$$.email)&&!$body$$.password?(loadTemplate("thong tin dang nhap.html",{email:$result$$.email,password:$password$$,receiver_name:$body$$.name},function($error$jscomp$0$$,$html$$){if($error$jscomp$0$$)return console.log($error$jscomp$0$$);email.sendHtml({to:{name:$result$$.name,address:$result$$.email},subject:"Th\u00f4ng tin t\u00e0i kho\u1ea3n",html:$html$$},function($error$$){$error$$&&console.error("Khong the gui email thon tin tai khoan cho nguoi dung\n"+$error$$)})}),
60
+ $res$$.send({msg:"T\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o. Ki\u1ec3m tra email \u0111\u1ec3 l\u1ea5y th\u00f4ng tin \u0111\u0103ng nh\u1eadp",token:$accessToken$$,active:$newUser$$.local.active})):$res$$.send({msg:"T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o",token:$accessToken$$,active:$newUser$$.local.active})})})});$app$jscomp$0$$.get("/resetpassword",$rateLimiter$$,async($req$$,$res$$)=>{if(configs.GOOGLE_RECAPTCHA_SECRET_KEY)try{await permission.verifyReCaptcha($req$$.query["g-recaptcha-response"])}catch($e$$){return $res$$.status(400).send($e$$.message||
61
+ $e$$.error||$e$$)}let $address$$=$req$$.query.email;if(!$address$$)return $res$$.status(400).send("Y\u00eau c\u1ea7u m\u1ed9t \u0111\u1ecba ch\u1ec9 email ho\u1eb7c s\u1ed1 \u0111i\u1ec7n tho\u1ea1i");$address$$=$address$$.toLowerCase();User.findOne({$or:[{"local.email":$address$$},{email:$address$$},{email2:$address$$}]},function($error$jscomp$2$$,$result$$){if($error$jscomp$2$$)return $res$$.status(400).send($error$jscomp$2$$);if(!$result$$)return $res$$.status(400).send(`T\u00e0i kho\u1ea3n ${$address$$} ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd`);
62
+ let $newpassword$$=_crypto.createHash("md5").update((new Date).toISOString()).digest("hex");$result$$.local.rspassword=$result$$.generateHash($result$$.email+$newpassword$$);$result$$.save(function($error$jscomp$1$$){if($error$jscomp$1$$)return $res$$.status(400).send($error$jscomp$1$$);loadTemplate("reset mat khau.html",{receiver_name:$result$$.name,email:$result$$.email,password:$newpassword$$},function($error$jscomp$0$$,$html$$){if($error$jscomp$0$$)return $res$$.status(400).send($error$jscomp$0$$);
63
+ $result$$.email&&validator.isEmail($result$$.email)&&email.sendHtml({to:{name:$result$$.name,address:$result$$.email},subject:"\u0110\u1ed5i m\u1eadt kh\u1ea9u",html:$html$$},function($error$$){$error$$?console.error("Khong the gui thong tin tai khoan cho nguoi su dung\n"+$error$$):console.log("send new password to",$result$$.email)});$result$$.email2&&validator.isEmail($result$$.email2)&&email.sendHtml({to:{name:$result$$.name,address:$result$$.email2},subject:"\u0110\u1ed5i m\u1eadt kh\u1ea9u",
64
+ html:$html$$},function($error$$){$error$$?console.error("Khong the gui thong tin tai khoan cho nguoi su dung\n"+$error$$):console.log("send new password to",$result$$.email)});log.create({id_app:"RESETPASSWORD",id_func:"RESETPASSWORD",action:"RESETPASSWORD"},$result$$.email,$req$$.header("user-agent"),$req$$);$res$$.send("M\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1ed5i th\u00e0nh c\u00f4ng. Ki\u1ec3m tra email \u0111\u1ec3 l\u1ea5y m\u1eadt kh\u1ea9u m\u1edbi, sau \u0111\u00f3 b\u1ea1n n\u00ean \u0111\u1ed5i m\u1eadt kh\u1ea9u n\u00e0y")})})})})};
@@ -0,0 +1,23 @@
1
+ 'use strict';require("events").EventEmitter.defaultMaxListeners=1E7;
2
+ const express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),crypto=require("crypto"),async=require("async"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),sslConfig=require("./sslConfig"),clusterServer=function($app$$,$sslDir$$,$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$={},$_port_accessLogStream_rfs$$=9999,$options$$=
3
+ {start_import_data_pool:!1,start_report_pool:!0,useAgenda:!0,createRedisCache:!0}){const $configs$$=global.configs={...defaultConfigs,...$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$,cluster:0!=$options$$.cluster};$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$_port_accessLogStream_rfs$$;
4
+ $_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require($configs$$.paths.menu||"./menu").getModules();global.modulesInMenu={};Object.values($_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$).forEach(function($module$$){global.modulesInMenu[$module$$.name]=$module$$});require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");
5
+ $configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$toobusy$$.onLag(function($currentLag$$){console.log("Event loop lag detected! Latency: "+$currentLag$$+"ms")});$app$$.use(function($req$$,$res$$,$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("express-session");
6
+ $app$$.use($_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("cookie-parser");$app$$.use($_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$());$app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||($uid$$=$req$$.headers.uid);
7
+ $uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));$res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("compression");$app$$.use($_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$());$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=
8
+ $configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||1048576;$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=$req$jscomp$2_size$$.headers["content-lenght"])&&$req$jscomp$2_size$$>$limitFileSize$$)return $res$$.status(400).send({error:"File too large"});$next$$()});$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("multer")({dest:$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$,
9
+ limits:{files:1,fileSize:$limitFileSize$$}});$app$$.use($_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$);$app$$.use(cors({credentials:!0,exposedHeaders:["set-cookie","uid"],origin:($origin$$,$callback$$)=>{$callback$$(null,!0)}}));$configs$$.paths||($configs$$.paths={});$app$$.use("/",express.static($configs$$.paths.public||__dirname+"/public"));$app$$.use("/admin",express.static($configs$$.paths.admin||__dirname+"/admin"));$app$$.use("/templates",express.static($configs$$.paths.templates||
10
+ __dirname+"/templates"));$app$$.use("/images",express.static($configs$$.paths.images||__dirname+"/images"));$app$$.use(bodyParser.json({limit:$configs$$.limitRequestSize||"1mb"}));$app$$.use(bodyParser.urlencoded({limit:$configs$$.limitRequestSize||"1mb",extended:!0}));$app$$.use(passport.initialize());$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("morgan");$_port_accessLogStream_rfs$$=require("rotating-file-stream");const $logDirectory$$=$configs$$.paths.log||
11
+ __dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);$_port_accessLogStream_rfs$$=$_port_accessLogStream_rfs$$("access-cluster.log",{interval:"1d",path:$logDirectory$$});$app$$.use($_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$("combined",{stream:$_port_accessLogStream_rfs$$,skip:function($req$$,$res$$){return 400>$res$$.statusCode}}));$app$$.use(function($err$$,$req$$,$res$$,$next$$){console.error($err$$.stack);$res$$.status(500).send("Server error!")});
12
+ global.mongoose.connect($configs$$.database.url,{useNewUrlParser:!0}).then(async $clientMongo_redis$$=>{console.log("Connected to Database");global.clientMongo=$clientMongo_redis$$;$clientMongo_redis$$=require("redis");global.clientRedis=$clientMongo_redis$$.createClient({enable_offline_queue:!1});global.clientRedis.on("connect",async function(){function $initSysData$$(){console.log("creating system data...");const $files$$=fs.readdirSync(__dirname+"/data/sys");async.mapSeries($files$$,function($file$$,
13
+ $callback$jscomp$0$$){setImmediate(()=>{if(".js"==$file$$.substr(-3)){const $data$$=JSON.parse(JSON.stringify(require("./data/sys/"+$file$$).data)),$model$$=global.getModel(""+$file$$);console.log("creating system data...",$file$$);$model$$.deleteMany({},$e$$=>{console.error($e$$);async.mapSeries($data$$,function($r$$,$callback$$){delete $r$$._id;delete $r$$.__v;delete $r$$.collection_name;delete $r$$.pkey;$model$$.create($r$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$()})},
14
+ function($error$$,$rs$$){$callback$jscomp$0$$($error$$,$rs$$)})})}else $callback$jscomp$0$$()})},function($error$$){if($error$$)return console.log($error$$);console.log("created system data")})}console.log("redis connected");0!=$options$$.createRedisCache&&require("./libs/redis-cache").set();global.getModel("schedule").start();$options$$.start_abci_handler&&global.getModel("assabcihandler").start();$configs$$.adminUsers.forEach(function($adminUser$$){global.getModel("user").findOne({email:$adminUser$$.email},
15
+ function($error$jscomp$4_u$$,$rs$$){if($error$jscomp$4_u$$)return console.error($error$jscomp$4_u$$);$rs$$||($adminUser$$.local={name:$adminUser$$.name,email:$adminUser$$.email,active:!0},$error$jscomp$4_u$$=new $User$$($adminUser$$),$error$jscomp$4_u$$.local.password=$error$jscomp$4_u$$.generateHash($adminUser$$.email+$adminUser$$.defaultPassword),$error$jscomp$4_u$$.save(function($error$$,$user$$){if($error$$)return console.error($error$$);$user$$&&console.log("da tao thanh cong user "+$user$$.email)}))})});
16
+ $configs$$.initSysData?$initSysData$$():global.getModel("listinfo").findOne({},($e$$,$rs$$)=>{$rs$$||$initSysData$$()});require("./route")($app$$);var $StaticPool_StaticPool$$=$configs$$.use_ssl?https.createServer(sslConfig($sslDir$$),$app$$):http.createServer($app$$);$StaticPool_StaticPool$$.timeout=6E5;const $User$$=global.getModel("user");$User$$.initSocket($StaticPool_StaticPool$$);if(!1!==$options$$.cluster){if(!require("sticky-session").listen($StaticPool_StaticPool$$,global.port))$StaticPool_StaticPool$$.once("listening",
17
+ function(){console.log("server cluster started on",global.port)});$StaticPool_StaticPool$$=require("cluster");$StaticPool_StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("worker "+$worker$$.process.pid+" died",$code$$,$signal$$)});$StaticPool_StaticPool$$.on("online",function($worker$$){console.info("worker "+$worker$$.process.pid+" is online");global.clientRedis.set("lastworker",JSON.stringify({pid:$worker$$.process.pid}))})}else $StaticPool_StaticPool$$.listen(global.port,
18
+ ()=>{console.log("server start at "+global.port+" port")});$options$$.start_import_data_pool&&($StaticPool_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0),global.importDataMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.log("load import data pool")}));$options$$.start_report_pool&&($StaticPool_StaticPool$$=require("./libs/WorkerStaticPool"),
19
+ global.reportMainPool=new $StaticPool_StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0),global.reportMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.log("load report pool")}))})}).catch($err$$=>{console.error("Not Connected to Database ERROR!",$err$$)})};
20
+ process.on("uncaughtException",function($err$jscomp$2_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$2_error$$.message);console.error($err$jscomp$2_error$$.stack);$err$jscomp$2_error$$=`
21
+ Error: ${$err$jscomp$2_error$$.message}
22
+ Stack: ${$err$jscomp$2_error$$.stack}
23
+ `;try{const $logDirectory$$=__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);fs.writeFile(`${$logDirectory$$}/error-${(new Date).getTime()}.txt`,$err$jscomp$2_error$$,()=>{console.log("wrote log error")})}catch($e$$){console.log($e$$)}process.exit(1)});module.exports=clusterServer;