flexbiz-server 12.1.16 → 12.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/package.json +1 -1
  2. package/server/app.js +1 -1
  3. package/server/auths/bearer.js +2 -2
  4. package/server/auths/local.js +41 -37
  5. package/server/cluster.js +2 -2
  6. package/server/controllers/controller.js +77 -76
  7. package/server/global.js +4 -3
  8. package/server/libs/BlockchainTransactionPool.js +3 -2
  9. package/server/libs/blockchainconnect.js +15 -14
  10. package/server/libs/cdpsdiem.js +1 -1
  11. package/server/libs/cdpsdt.js +6 -6
  12. package/server/libs/cdpskh.js +7 -7
  13. package/server/libs/cdpsnphep.js +6 -0
  14. package/server/libs/cdpstk.js +10 -10
  15. package/server/libs/ckcn.js +7 -7
  16. package/server/libs/ckdiem.js +5 -6
  17. package/server/libs/ckdt.js +1 -1
  18. package/server/libs/cknphep.js +6 -0
  19. package/server/libs/cktk.js +1 -1
  20. package/server/libs/cktt.js +5 -5
  21. package/server/libs/ckvt.js +9 -9
  22. package/server/libs/ckvtcapphat.js +1 -1
  23. package/server/libs/ckvttt.js +9 -9
  24. package/server/libs/ctdiem.js +2 -2
  25. package/server/libs/ctvt.js +6 -6
  26. package/server/libs/ctvttt.js +6 -6
  27. package/server/libs/databanle.js +14 -13
  28. package/server/libs/dkcn.js +1 -1
  29. package/server/libs/dkdiem.js +5 -6
  30. package/server/libs/dkdt.js +1 -1
  31. package/server/libs/dknphep.js +6 -0
  32. package/server/libs/dktk.js +1 -1
  33. package/server/libs/dktt.js +4 -4
  34. package/server/libs/dkvt.js +5 -5
  35. package/server/libs/dkvttt.js +5 -5
  36. package/server/libs/dncn.js +3 -3
  37. package/server/libs/dntk.js +3 -3
  38. package/server/libs/dntt.js +4 -4
  39. package/server/libs/getGiaban.js +20 -19
  40. package/server/libs/initDatabase.js +3 -3
  41. package/server/libs/mailmanagement.js +4 -4
  42. package/server/libs/onepay-payment.js +1 -1
  43. package/server/libs/permission.js +3 -3
  44. package/server/libs/post-book.js +2 -2
  45. package/server/libs/post-socai.js +3 -3
  46. package/server/libs/prototypes.js +7 -7
  47. package/server/libs/psdt.js +1 -1
  48. package/server/libs/redis-cache.js +1 -1
  49. package/server/libs/schedule.js +1 -1
  50. package/server/libs/thnxt.js +6 -6
  51. package/server/libs/thnxttt.js +6 -6
  52. package/server/libs/tinhGtPhanboSltp.js +1 -1
  53. package/server/libs/tinhGtPhanboYtcp.js +5 -5
  54. package/server/libs/tinhGtSltk.js +8 -7
  55. package/server/libs/tinhGtThcppstk.js +1 -1
  56. package/server/libs/tinhGtTrucTiep.js +1 -1
  57. package/server/libs/tinhGtXoa.js +1 -1
  58. package/server/libs/tinhgiatb.js +32 -31
  59. package/server/libs/tinhgiatb1vt.js +1 -1
  60. package/server/libs/tinhkhauhao1ts.js +2 -2
  61. package/server/libs/tinhkhauhaots.js +2 -2
  62. package/server/libs/utils.js +3 -3
  63. package/server/libs/validate.js +1 -1
  64. package/server/libs/vsocai.js +6 -5
  65. package/server/models/approve.js +7 -6
  66. package/server/models/asskey.js +10 -9
  67. package/server/models/assrequest.js +11 -4
  68. package/server/models/cddiem.js +1 -1
  69. package/server/models/cddt.js +3 -3
  70. package/server/models/cdnphep.js +2 -0
  71. package/server/models/customer.js +2 -2
  72. package/server/models/dknphep.js +2 -0
  73. package/server/models/introducer.js +1 -1
  74. package/server/models/listinfo.js +69 -62
  75. package/server/models/notification.js +2 -3
  76. package/server/models/otp.js +1 -1
  77. package/server/models/participant.js +4 -3
  78. package/server/models/ptthanhtoan.js +3 -3
  79. package/server/models/qts.js +2 -2
  80. package/server/models/user.js +4 -4
  81. package/server/modules/lists/bg-cddiem.js +1 -1
  82. package/server/modules/lists/bg-cddt.js +1 -1
  83. package/server/modules/lists/bg-cdkh.js +1 -1
  84. package/server/modules/lists/bg-cdnphep.js +7 -0
  85. package/server/modules/lists/bg-cdtk.js +1 -1
  86. package/server/modules/lists/bg-cdvt.js +1 -1
  87. package/server/modules/lists/ls-area.js +1 -1
  88. package/server/modules/lists/ls-asscashwithdraw.js +12 -11
  89. package/server/modules/lists/ls-assinvestment.js +20 -20
  90. package/server/modules/lists/ls-asskey.js +33 -31
  91. package/server/modules/lists/ls-assneedtobuy.js +3 -3
  92. package/server/modules/lists/ls-assperiod.js +19 -19
  93. package/server/modules/lists/ls-assproduct.js +12 -12
  94. package/server/modules/lists/ls-assprofitsharing.js +4 -4
  95. package/server/modules/lists/ls-asssell.js +9 -9
  96. package/server/modules/lists/ls-asswithdraw.js +7 -6
  97. package/server/modules/lists/ls-building.js +1 -1
  98. package/server/modules/lists/ls-cart.js +11 -11
  99. package/server/modules/lists/ls-chitieukpi.js +1 -1
  100. package/server/modules/lists/ls-congdoansx.js +1 -1
  101. package/server/modules/lists/ls-congtacvien.js +1 -1
  102. package/server/modules/lists/ls-consultant.js +1 -1
  103. package/server/modules/lists/ls-contract.js +1 -1
  104. package/server/modules/lists/ls-ctds.js +1 -1
  105. package/server/modules/lists/ls-customer.js +1 -1
  106. package/server/modules/lists/ls-datlich.js +1 -1
  107. package/server/modules/lists/ls-dckhauhaots.js +1 -1
  108. package/server/modules/lists/ls-department.js +1 -1
  109. package/server/modules/lists/ls-dkhoc.js +1 -1
  110. package/server/modules/lists/ls-dknphep.js +1 -0
  111. package/server/modules/lists/ls-dmban.js +1 -1
  112. package/server/modules/lists/ls-dmbp.js +1 -1
  113. package/server/modules/lists/ls-dmchietkhau.js +1 -1
  114. package/server/modules/lists/ls-dmdiemthuong.js +1 -1
  115. package/server/modules/lists/ls-dmdoi.js +2 -2
  116. package/server/modules/lists/ls-dmdt.js +2 -2
  117. package/server/modules/lists/ls-dmgiaban.js +1 -1
  118. package/server/modules/lists/ls-dmgiamua.js +1 -1
  119. package/server/modules/lists/ls-dmkc.js +2 -2
  120. package/server/modules/lists/ls-dmkho.js +1 -1
  121. package/server/modules/lists/ls-dmkhuyenmai.js +1 -1
  122. package/server/modules/lists/ls-dmnhnv.js +2 -2
  123. package/server/modules/lists/ls-dmnhtask.js +4 -4
  124. package/server/modules/lists/ls-dmnv.js +3 -3
  125. package/server/modules/lists/ls-dmphatdichvu.js +1 -1
  126. package/server/modules/lists/ls-dmto.js +2 -2
  127. package/server/modules/lists/ls-dmvt.js +4 -4
  128. package/server/modules/lists/ls-floor.js +1 -1
  129. package/server/modules/lists/ls-floordetail.js +4 -4
  130. package/server/modules/lists/ls-hmcn.js +1 -1
  131. package/server/modules/lists/ls-hspbts.js +1 -1
  132. package/server/modules/lists/ls-introducer.js +16 -15
  133. package/server/modules/lists/ls-invpackage.js +1 -1
  134. package/server/modules/lists/ls-invproject.js +1 -1
  135. package/server/modules/lists/ls-invround.js +2 -2
  136. package/server/modules/lists/ls-invuser.js +1 -1
  137. package/server/modules/lists/ls-kbm-bcqt.js +1 -1
  138. package/server/modules/lists/ls-kbm-pttct.js +1 -1
  139. package/server/modules/lists/ls-kbm-tmbctc.js +1 -1
  140. package/server/modules/lists/ls-kehoachdtcp.js +1 -1
  141. package/server/modules/lists/ls-kygui.js +10 -10
  142. package/server/modules/lists/ls-lesson.js +1 -1
  143. package/server/modules/lists/ls-lienhe.js +1 -1
  144. package/server/modules/lists/ls-newsfeed.js +1 -1
  145. package/server/modules/lists/ls-nhadat.js +2 -2
  146. package/server/modules/lists/ls-opportunity.js +1 -1
  147. package/server/modules/lists/ls-participant.js +3 -3
  148. package/server/modules/lists/ls-phieudanhgia.js +3 -3
  149. package/server/modules/lists/ls-ptthanhtoan.js +1 -1
  150. package/server/modules/lists/ls-qts-dieuchinh.js +1 -1
  151. package/server/modules/lists/ls-service.js +1 -1
  152. package/server/modules/lists/ls-session.js +1 -1
  153. package/server/modules/lists/ls-sosanxuat.js +1 -1
  154. package/server/modules/lists/ls-support.js +1 -1
  155. package/server/modules/lists/ls-task.js +3 -3
  156. package/server/modules/lists/ls-taskreg.js +2 -2
  157. package/server/modules/lists/ls-tontucthoi.js +1 -1
  158. package/server/modules/lists/ls-training.js +1 -1
  159. package/server/modules/lists/ls-warranty.js +1 -1
  160. package/server/modules/lists/ls_hanmucton.js +2 -2
  161. package/server/modules/lists/ls_spdd_ck.js +2 -2
  162. package/server/modules/lists/ls_spdd_dk.js +2 -2
  163. package/server/modules/lists/ls_ytdd_ck.js +1 -1
  164. package/server/modules/lists/ls_ytdd_dk.js +1 -1
  165. package/server/modules/reports/calc-tinhluong.js +22 -22
  166. package/server/modules/reports/rp-assbonus.js +8 -7
  167. package/server/modules/reports/rp-assinterest.js +7 -6
  168. package/server/modules/reports/rp-asstransferlog.js +7 -0
  169. package/server/modules/reports/rp-bangtinhkhauhao.js +2 -2
  170. package/server/modules/reports/rp-baocaokhachhang.js +1 -1
  171. package/server/modules/reports/rp-bcdkt.js +4 -4
  172. package/server/modules/reports/rp-bcqt.js +7 -7
  173. package/server/modules/reports/rp-bkct.js +4 -4
  174. package/server/modules/reports/rp-bkshipbook.js +1 -1
  175. package/server/modules/reports/rp-bkvanchuyen.js +1 -1
  176. package/server/modules/reports/rp-bkvatra.js +5 -5
  177. package/server/modules/reports/rp-bkvatvao.js +5 -5
  178. package/server/modules/reports/rp-cdpsdiem.js +1 -1
  179. package/server/modules/reports/rp-cdpskh.js +1 -1
  180. package/server/modules/reports/rp-cdpsnphep.js +3 -0
  181. package/server/modules/reports/rp-chitietchitientheohoadon.js +4 -4
  182. package/server/modules/reports/rp-chitiettaisan.js +2 -2
  183. package/server/modules/reports/rp-chitietthutientheohoadon.js +4 -4
  184. package/server/modules/reports/rp-ckcn.js +1 -1
  185. package/server/modules/reports/rp-ckdiem.js +1 -1
  186. package/server/modules/reports/rp-ckvt.js +2 -2
  187. package/server/modules/reports/rp-ckvttheokho.js +2 -2
  188. package/server/modules/reports/rp-ckvttheotg.js +2 -2
  189. package/server/modules/reports/rp-ckvttt.js +1 -1
  190. package/server/modules/reports/rp-congviectheobp.js +6 -6
  191. package/server/modules/reports/rp-congviectheodt.js +1 -1
  192. package/server/modules/reports/rp-congviectheokh.js +1 -1
  193. package/server/modules/reports/rp-congviectheonv.js +1 -1
  194. package/server/modules/reports/rp-ctbanle.js +2 -2
  195. package/server/modules/reports/rp-ctdanhgianhanvien.js +1 -1
  196. package/server/modules/reports/rp-ctmuahang.js +2 -2
  197. package/server/modules/reports/rp-databanle.js +1 -1
  198. package/server/modules/reports/rp-dkcn.js +1 -1
  199. package/server/modules/reports/rp-dsnhanviencm.js +1 -1
  200. package/server/modules/reports/rp-dsnhanvientb.js +1 -1
  201. package/server/modules/reports/rp-dtbanletheoct.js +5 -5
  202. package/server/modules/reports/rp-dtbanletheokh.js +1 -1
  203. package/server/modules/reports/rp-dtbanletheokho.js +1 -1
  204. package/server/modules/reports/rp-dtbanletheonam.js +1 -1
  205. package/server/modules/reports/rp-dtbanletheongay.js +4 -4
  206. package/server/modules/reports/rp-dtbanletheonv.js +5 -5
  207. package/server/modules/reports/rp-dtbanletheoquy.js +1 -1
  208. package/server/modules/reports/rp-dtbanletheothang.js +1 -1
  209. package/server/modules/reports/rp-dtbanletheothungan.js +6 -6
  210. package/server/modules/reports/rp-dtbanletheovt.js +2 -2
  211. package/server/modules/reports/rp-dutoanthuchitheodt.js +2 -2
  212. package/server/modules/reports/rp-getPXC2PNC.js +6 -6
  213. package/server/modules/reports/rp-getbtpb.js +1 -1
  214. package/server/modules/reports/rp-getcashbycashier.js +6 -6
  215. package/server/modules/reports/rp-getdk4pht.js +2 -2
  216. package/server/modules/reports/rp-getdk4pkc.js +1 -1
  217. package/server/modules/reports/rp-getdttheoca.js +1 -1
  218. package/server/modules/reports/rp-getinvoice2pay.js +5 -5
  219. package/server/modules/reports/rp-getinvoice2receive.js +5 -5
  220. package/server/modules/reports/rp-getinvoice2return.js +2 -2
  221. package/server/modules/reports/rp-getinvoice2return_bl.js +3 -3
  222. package/server/modules/reports/rp-getkehoachmh4lenhcp.js +2 -2
  223. package/server/modules/reports/rp-getkhauhao.js +2 -2
  224. package/server/modules/reports/rp-getluong.js +1 -1
  225. package/server/modules/reports/rp-getluongchuyen.js +1 -1
  226. package/server/modules/reports/rp-getpn2fee.js +4 -5
  227. package/server/modules/reports/rp-getpn2return.js +3 -3
  228. package/server/modules/reports/rp-getvc2xhd.js +3 -3
  229. package/server/modules/reports/rp-hoadonbanhangtheohantt.js +2 -2
  230. package/server/modules/reports/rp-hoadonmuahangtheohantt.js +2 -2
  231. package/server/modules/reports/rp-kcsns.js +16 -13
  232. package/server/modules/reports/rp-kqdanhgianhanvien.js +1 -1
  233. package/server/modules/reports/rp-kqhdkd.js +4 -4
  234. package/server/modules/reports/rp-lcttgt.js +15 -15
  235. package/server/modules/reports/rp-lctttt.js +5 -5
  236. package/server/modules/reports/rp-linkslist.js +1 -1
  237. package/server/modules/reports/rp-phanbochitienchohoadon.js +4 -4
  238. package/server/modules/reports/rp-phanbothutienchohoadon.js +6 -6
  239. package/server/modules/reports/rp-ptbitralai.js +1 -1
  240. package/server/modules/reports/rp-ptcttct.js +10 -10
  241. package/server/modules/reports/rp-ptdonhang.js +2 -2
  242. package/server/modules/reports/rp-pttct.js +17 -17
  243. package/server/modules/reports/rp-pttctkho.js +12 -12
  244. package/server/modules/reports/rp-pttctkho2.js +15 -15
  245. package/server/modules/reports/rp-sctbhxh.js +1 -1
  246. package/server/modules/reports/rp-sctcnkh.js +1 -1
  247. package/server/modules/reports/rp-sctdiem.js +1 -1
  248. package/server/modules/reports/rp-sctdt.js +1 -1
  249. package/server/modules/reports/rp-sctdtcp.js +1 -1
  250. package/server/modules/reports/rp-sctluong.js +1 -1
  251. package/server/modules/reports/rp-sctthuetncn.js +1 -1
  252. package/server/modules/reports/rp-scttk.js +1 -1
  253. package/server/modules/reports/rp-sctvt.js +1 -1
  254. package/server/modules/reports/rp-sctvt_sl.js +1 -1
  255. package/server/modules/reports/rp-sctvttt.js +1 -1
  256. package/server/modules/reports/rp-search.js +1 -1
  257. package/server/modules/reports/rp-socai.js +1 -1
  258. package/server/modules/reports/rp-socaitk.js +1 -1
  259. package/server/modules/reports/rp-sochut.js +1 -1
  260. package/server/modules/reports/rp-sokho.js +1 -1
  261. package/server/modules/reports/rp-sokhott.js +1 -1
  262. package/server/modules/reports/rp-sonkbh.js +1 -1
  263. package/server/modules/reports/rp-sonkc.js +1 -1
  264. package/server/modules/reports/rp-sonkct.js +1 -1
  265. package/server/modules/reports/rp-sonkmh.js +1 -1
  266. package/server/modules/reports/rp-sonktt.js +1 -1
  267. package/server/modules/reports/rp-soquy.js +1 -1
  268. package/server/modules/reports/rp-sosanhkhvatt.js +2 -2
  269. package/server/modules/reports/rp-sotaisan.js +2 -2
  270. package/server/modules/reports/rp-sotiengui.js +1 -1
  271. package/server/modules/reports/rp-thdanhgianhanvien.js +1 -1
  272. package/server/modules/reports/rp-thgt.js +1 -1
  273. package/server/modules/reports/rp-thnxt.js +1 -1
  274. package/server/modules/reports/rp-thnxt_sl.js +1 -1
  275. package/server/modules/reports/rp-thnxttt.js +1 -1
  276. package/server/modules/reports/rp-tkbanhangtheogioithieu.js +2 -2
  277. package/server/modules/reports/rp-tkgtgt.js +1 -1
  278. package/server/modules/reports/rp-tmbctc.js +1 -1
  279. package/server/modules/reports/rp-uoctinhnvl.js +3 -3
  280. package/server/modules/reports/rpt-tkdiemtichluy.js +1 -1
  281. package/server/modules/vouchers/vo-bc1.js +1 -1
  282. package/server/modules/vouchers/vo-bc5.js +2 -2
  283. package/server/modules/vouchers/vo-bg1.js +1 -1
  284. package/server/modules/vouchers/vo-bg2.js +1 -1
  285. package/server/modules/vouchers/vo-bn1.js +16 -16
  286. package/server/modules/vouchers/vo-bn5.js +2 -2
  287. package/server/modules/vouchers/vo-dh2.js +1 -1
  288. package/server/modules/vouchers/vo-dinhmucsx.js +1 -1
  289. package/server/modules/vouchers/vo-dn0.js +1 -1
  290. package/server/modules/vouchers/vo-dnm.js +12 -12
  291. package/server/modules/vouchers/vo-hd1.js +2 -2
  292. package/server/modules/vouchers/vo-hd2.js +5 -5
  293. package/server/modules/vouchers/vo-hd3.js +2 -2
  294. package/server/modules/vouchers/vo-hd7.js +3 -3
  295. package/server/modules/vouchers/vo-hde.js +2 -2
  296. package/server/modules/vouchers/vo-htl.js +2 -2
  297. package/server/modules/vouchers/vo-kbbtpb.js +5 -5
  298. package/server/modules/vouchers/vo-kehoachmh.js +3 -3
  299. package/server/modules/vouchers/vo-lenhcapphat.js +2 -2
  300. package/server/modules/vouchers/vo-lenhsx.js +3 -3
  301. package/server/modules/vouchers/vo-pbl.js +43 -44
  302. package/server/modules/vouchers/vo-pc0.js +1 -1
  303. package/server/modules/vouchers/vo-pc1.js +2 -2
  304. package/server/modules/vouchers/vo-pc2.js +2 -2
  305. package/server/modules/vouchers/vo-pc3.js +1 -1
  306. package/server/modules/vouchers/vo-pc5.js +2 -2
  307. package/server/modules/vouchers/vo-pdn.js +1 -1
  308. package/server/modules/vouchers/vo-pdx.js +1 -1
  309. package/server/modules/vouchers/vo-pht.js +2 -2
  310. package/server/modules/vouchers/vo-pkc.js +2 -2
  311. package/server/modules/vouchers/vo-pkh.js +2 -2
  312. package/server/modules/vouchers/vo-pkk.js +2 -2
  313. package/server/modules/vouchers/vo-pkt.js +2 -2
  314. package/server/modules/vouchers/vo-pn1.js +2 -2
  315. package/server/modules/vouchers/vo-pn2.js +2 -2
  316. package/server/modules/vouchers/vo-pn3.js +2 -2
  317. package/server/modules/vouchers/vo-pn5.js +2 -2
  318. package/server/modules/vouchers/vo-pn6.js +2 -2
  319. package/server/modules/vouchers/vo-pn9.js +2 -2
  320. package/server/modules/vouchers/vo-pnc.js +8 -8
  321. package/server/modules/vouchers/vo-pnh.js +2 -2
  322. package/server/modules/vouchers/vo-pnk.js +2 -2
  323. package/server/modules/vouchers/vo-po1.js +1 -1
  324. package/server/modules/vouchers/vo-ppb.js +2 -2
  325. package/server/modules/vouchers/vo-pt1.js +3 -3
  326. package/server/modules/vouchers/vo-pt5.js +5 -5
  327. package/server/modules/vouchers/vo-ptl.js +2 -2
  328. package/server/modules/vouchers/vo-purchase_contract.js +1 -1
  329. package/server/modules/vouchers/vo-pxc.js +10 -10
  330. package/server/modules/vouchers/vo-pxh.js +2 -2
  331. package/server/modules/vouchers/vo-pxk.js +2 -2
  332. package/server/modules/vouchers/vo-qts.js +1 -1
  333. package/server/modules/vouchers/vo-sale_contract.js +2 -2
  334. package/server/modules/vouchers/vo-shipbook.js +2 -2
  335. package/server/modules/vouchers/vo-so1.js +30 -29
  336. package/server/modules/vouchers/vo-so2.js +2 -2
  337. package/server/modules/vouchers/vo-so3.js +2 -2
  338. package/server/modules/vouchers/vo-so4.js +2 -2
  339. package/server/modules/vouchers/vo-so5.js +2 -2
  340. package/server/modules/vouchers/vo-vanchuyen.js +2 -2
  341. package/server/modules/vouchers/vo-xhd.js +2 -2
  342. package/server/workers/calcGrid.js +5 -4
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.1.16",
5
+ "version": "12.1.18",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
package/server/app.js CHANGED
@@ -2,7 +2,7 @@
2
2
  const express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),async=require("async"),_global=require("./global"),User=global.getModel("user"),defaultConfigs=require("./defaultConfigs"),crypto=require("crypto"),mainServer=function($app$$,$options$$={cluster:!0,port:443,useSocket:!0},$callback$jscomp$1$$=null){const $configs$$=global.configs={...defaultConfigs,...$options$$.configs};$configs$$.admins||
3
3
  ($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=$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
4
  $module$$});require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);$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$$=
5
- require("cookie-parser");$app$$.use($compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$());$app$$.use(function($req_uid$$,$res$$,$next$$){($req_uid$$=$req_uid$$.cookies.uid)||($req_uid$$="uid:"+crypto.randomBytes(20).toString("hex"));$res$$.cookie("uid",$req_uid$$,{expires:new Date(Date.now()+864E5),sameSite:"none",secure:!0});$next$$()});$compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("compression");$app$$.use($compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$());
5
+ require("cookie-parser");$app$$.use($compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$());$app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}),$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$$());
6
6
  $compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";$compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("multer")({dest:$compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$,limits:{fileSize:$configs$$.limitFileSize||1048576}});$app$$.use($compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$);$app$$.use(cors({credentials:!0,exposedHeaders:["set-cookie"],
7
7
  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||__dirname+"/templates"));$app$$.use("/images",express.static($configs$$.paths.images||__dirname+"/images"));$app$$.use(bodyParser.json({limit:$configs$$.limitRequestSize||"1mb"}));
8
8
  $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");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",
@@ -1,3 +1,3 @@
1
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;setImmediate(function(){User.findByToken($token$$,$ip$$,async function($err$$,$user$$,$tokenInfo$$){return $err$$?$done$$($err$$):$tokenInfo$$.once&&$tokenInfo$$.used?(console.error("can't use token",$token$$,"at",$req$$.originalUrl),$done$$("This token can only be used once")):$user$$?
3
- $done$$(null,$user$$):$done$$(null,!1)})})}))};
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$$){return $err$$?$done$$($err$$):$tokenInfo$$.once&&$tokenInfo$$.used?(console.error("can't use token",$token$$,"at",$req$$.originalUrl),$done$$("This token can only be used once")):
3
+ $user$$?$done$$(null,$user$$):$done$$(null,!1)},{session_created:$session_created$$})})}))};
@@ -1,42 +1,46 @@
1
- 'use strict';const User=global.getModel("user"),Participant=global.getModel("participant"),UserGroup=global.getModel("usergroup"),Customer=global.getModel("customer"),request=require("request"),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"),OTP=
2
- global.getModel("otp"),DIGITS="0123456789",jwt=require("jsonwebtoken");function generateOTP(){let $OTP$$="";for(let $i$$=0;6>$i$$;$i$$++)$OTP$$+=DIGITS[Math.floor(10*Math.random())];return $OTP$$}
1
+ 'use strict';const User=global.getModel("user"),Participant=global.getModel("participant"),UserGroup=global.getModel("usergroup"),Customer=global.getModel("customer"),request=require("request"),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");function generateOTP(){let $OTP$$="";for(let $i$$=0;6>$i$$;$i$$++)$OTP$$+=DIGITS[Math.floor(10*Math.random())];return $OTP$$}
3
3
  function generateToken($user$$){var $body_n_n$$={email:$user$$.email};configs.APP_SECRET?jwt.sign({user:$body_n_n$$},configs.APP_SECRET):($body_n_n$$=new Date,_crypto.createHash("md5").update($user$$.email+$body_n_n$$.toISOString()).digest("hex"));$body_n_n$$=new Date;return _crypto.createHash("md5").update($user$$.email+$body_n_n$$.toISOString()).digest("hex")}
4
4
  function saveOTP($Phone$$,$otp_code$$,$callback$$,$expires$$=5){let $expire_time$$=new Date;$expire_time$$.setMinutes($expire_time$$.getMinutes()+$expires$$);OTP.create({phone:$Phone$$,otp:$otp_code$$,expire_time:$expire_time$$},($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);$callback$$(null,$rs$$.toObject())})}
5
5
  function findByUsername($username$$,$fn$$){if(!$username$$)return $fn$$("B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");User.findOne({$or:[{email:$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$$){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";await Participant.asyncCreateParticipant({id_app:$body$$.id_app,email:$body$$.email,group_id:$body$$.group_id,active:!0});await global.getModel("customer").findOne({id_app:$body$$.id_app,of_user:$user$$.email}).lean()||await Customer.asyncCreateCustomer({ten_kh:$body$$.name,
7
- email:$user$$.email,id_app:$body$$.id_app,user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email})}}
6
+ async function addUserToApp($user$$,$body$$,$session_created$$){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";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:$session_created$$});await global.getModel("customer").findOne({id_app:$body$$.id_app,
7
+ of_user:$user$$.email}).lean()||await Customer.asyncCreateCustomer({ten_kh:$body$$.name||$user$$.email,email:$user$$.email,id_app:$body$$.id_app,user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email})}}
8
8
  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().toLowerCase();setImmediate(function(){findByUsername($username$$,function($err$$,$user$$){if($err$$)return $done$$($err$$);if(!$user$$)return $done$$("T\u00e0i kho\u1ea3n "+
9
9
  $username$$+" ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd.");if($user$$.local.rspassword)if($user$$.validRspassword($password$$))$user$$.local.password=$user$$.local.rspassword,$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$$))return $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");
10
- if(!$user$$.validPassword($password$$))return $done$$("M\u1eadt kh\u1ea9u kh\u00f4ng ch\u00ednh x\u00e1c.")}return $done$$(null,$user$$)})})}));$app$jscomp$0$$.get("/send-otp/:phone",$rateLimiter$$,async($req_url$$,$res$$)=>{const $Phone$$=$req_url$$.params.phone.trim();if(!await User.findOne({email:$Phone$$}))return $res$$.status(400).send({error:`T\u00e0i kho\u1ea3n ${$Phone$$} kh\u00f4ng t\u1ed3n t\u1ea1i`});const $otp_code$$=generateOTP();validator.isEmail($Phone$$)?email.sendHtml({to:{address:$Phone$$},
11
- subject:"M\u00e3 x\u00e1c th\u1ef1c",html:`Xin vui l\u00f2ng g\u1eedi qu\u00fd kh\u00e1ch m\u00e3 x\u00e1c th\u1ef1c: ${$otp_code$$}. M\u00e3 n\u00e0y s\u1ebd h\u1ebft h\u1ea1n s\u1eed d\u1ee5ng sau 5 ph\u00fat.`},function($error$$){$error$$?(console.error("Error send otp to email",$error$$),$res$$.status(400).send(`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi email ${$Phone$$}`)):saveOTP($Phone$$,$otp_code$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)},
12
- 5)},configs.sender_otp):validator.isMobilePhone($Phone$$)?configs.sms.send?configs.sms.send($Phone$$,$otp_code$$,$req_url$$.query.id_app).then($rs$jscomp$0$$=>{$rs$jscomp$0$$.error_message?$res$$.status(400).send({error:$rs$jscomp$0$$.message||$rs$jscomp$0$$.error||$rs$jscomp$0$$.error_message||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`}):saveOTP($Phone$$,$otp_code$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)})}).catch($e$$=>
13
- {console.error("Error send sms",$e$$);$res$$.status(400).send({error:$e$$.message||$e$$.error_message||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`})}):($req_url$$=configs.sms.genUrlSendOTP($Phone$$,$otp_code$$,$req_url$$.query.id_app),request({url:$req_url$$},($error$$,$response$$,$body$$)=>{if($error$$||200!=$response$$.statusCode)$res$$.status(400).send({error:$error$$||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`});
14
- else try{const $info$$=JSON.parse($body$$);"100"==$info$$.CodeResult?saveOTP($Phone$$,$otp_code$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)}):(console.error("Error send sms",$info$$),$res$$.status(400).send({error:`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`}))}catch($e$$){$res$$.status(400).send({error:$body$$})}})):$res$$.status(400).send({error:`T\u00e0i kho\u1ea3n ${$Phone$$} kh\u00f4ng c\u00f3 gi\u00e1 tr\u1ecb`})});
15
- $app$jscomp$0$$.get("/verify-otp/:id/:otp",$rateLimiter$$,async function($req$$,$res$$){try{const $id$$=$req$$.params.id;if(!global.mongoose.Types.ObjectId.isValid($id$$))return $res$$.status(400).send({error:"ID c\u1ee7a m\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i",code:4001});const $otp_code$$=$req$$.params.otp,$otp$$=await OTP.findById($id$$);if(!$otp$$||$otp$$.otp!=$otp_code$$||$otp$$.verified||$otp$$.expire_time.getTime()<(new Date).getTime())return $res$$.status(400).send({error:"M\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c \u0111\u00e3 h\u1ebft hi\u1ec7u l\u1ef1c",
16
- code:4001});await OTP.findOneAndUpdate({_id:$id$$},{verified:!0});let $is_new$$=!1;const $username$$=$otp$$.phone;let $user$$=await User.findOne({email:$username$$});if(!$user$$){$user$$=new User;$user$$.email=$username$$;$user$$.local={active:!0};$user$$.local.email=$otp$$.email;$user$$.local.phone=$otp$$.phone;$user$$.local.name=$otp$$.phone;$user$$.name=$otp$$.phone;$is_new$$=!0;try{await $user$$.save()}catch($e$$){return console.log("error verify otp, create user",$e$$),$res$$.status(500).send($e$$)}}else if(!$user$$.local||
17
- !$user$$.local.active){$user$$.local=$user$$.local||{};$user$$.local.active=!0;try{await $user$$.save()}catch($e$$){return console.log("error verify otp, create user",$e$$),$res$$.status(500).send($e$$)}}if($req$$.query.id_app&&$req$$.query.group_id){const $id_app$$=$req$$.query.id_app,$group_id$$=$req$$.query.group_id,$app$$=await App.findById($id_app$$);$app$$&&Participant.createParticipant({id_app:$id_app$$,email:$user$$.email,name:$user$$.name,group_id:$group_id$$,active:!0},$cust$jscomp$1_e$$=>
18
- {if($cust$jscomp$1_e$$)return console.log("can't add user",$user$$.email,"to company",$app$$.name);$cust$jscomp$1_e$$={ten_kh:$user$$.name,email:$user$$.email,dien_thoai:$otp$$.phone,id_app:$id_app$$,user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email};try{Customer.asyncCreateCustomer($cust$jscomp$1_e$$)}catch($e$$){console.log("Auto create new customer with error:",$e$$.message)}})}const $accessToken$$=generateToken($user$$),$agent$$=$req$$.headers["user-agent"];
19
- let $session_created$$;$req$$.cookies&&($session_created$$=$req$$.cookies.uid);(new Token({email:$user$$.email,session_created:$session_created$$,token:$accessToken$$,agent:$agent$$,ip:"",once:1==$req$$.query.once||"true"==$req$$.query.once||"1"===$req$$.query.once?!0:!1})).save(function($e$$,$rs$$){return $e$$?$res$$.status(500).send($e$$):$res$$.send({token:$accessToken$$,is_new:$is_new$$,once:$rs$$.once})})}catch($e$$){console.error("error verify otp",$e$$),$res$$.status(400).send($e$$.message)}});
20
- $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$$||"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");
21
- try{let $signature$$=await Wallet.sign($data$$.id_app,$req$jscomp$3_user$$.email,$data$$);$res$$.send($signature$$)}catch($e$$){return $res$$.status(400).send($e$$.message||$e$$)}});$app$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(""),$authorization$$=$req$$.headers.authorization;if(!$authorization$$)return $res$$.status(400).send({message:"Authorization is required"});
22
- $authorization$$=Buffer.from($authorization$$.replace("Basic ",""),"base64").toString("utf-8");$authorization$$=$authorization$$.split(":");if(1<$authorization$$.length){let $t_session$$="times_login_"+$ip$$+"_"+$authorization$$[0].trim().toLowerCase(),$d_session$$="datetime_login_"+$ip$$+"_"+$authorization$$[0].trim().toLowerCase();$req$$.t_session=$t_session$$;$req$$.d_session=$d_session$$;let $now$$=new Date,$d$$=$now$$,$times_try$$=1;if($req$$.headers.cookie&&$req$$.session){$req$$=$req$$.session;
23
- $req$$[$t_session$$]?($times_try$$=$req$$[$t_session$$]+1,$req$$[$t_session$$]=$times_try$$):($req$$[$t_session$$]=$times_try$$,$req$$[$d_session$$]=$now$$);$req$$[$d_session$$]?$d$$=new Date($req$$[$d_session$$]):$req$$[$d_session$$]=$now$$;$req$$=$now$$.getTime()-$d$$.getTime();if(18E6>$req$$&&10<$times_try$$)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai 10 l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+Math.roundBy((18E6-$req$$)/6E4,0)+" ph\u00fat"});
24
- $next$$()}else global.clientRedis.get($t_session$$,function($err$$,$reply$$){$reply$$?($times_try$$=Number($reply$$)+1,global.clientRedis.set($t_session$$,$times_try$$)):(global.clientRedis.set($t_session$$,$times_try$$),global.clientRedis.set($d_session$$,$now$$));global.clientRedis.get($d_session$$,function($err$jscomp$3_time_wait$$,$reply$$){$reply$$?$d$$=new Date($reply$$):global.clientRedis.set($d_session$$,$now$$);$err$jscomp$3_time_wait$$=$now$$.getTime()-$d$$.getTime();if(18E6>$err$jscomp$3_time_wait$$&&
25
- 10<$times_try$$)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai 10 l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+Math.roundBy((18E6-$err$jscomp$3_time_wait$$)/6E4,0)+" ph\u00fat"});$next$$()})})}},function($req$$,$res$$,$next$$){$passport$$.authenticate("basic",{session:!1},function($err$$,$user$$){if($err$$||!$user$$)return $res$$.status(401).send({message:$err$$||"Unauthorized"});if(configs.require_verify&&!$user$$.local.active)return $res$$.status(401).send({require_verify:!0});
26
- $req$$.user=$user$$;$next$$()})($req$$,$res$$,$next$$)},async($req$$,$res$$)=>{let $agent$$=$req$$.headers["user-agent"];if($req$$.headers.cookie){var $group_id$jscomp$1_session$$=$req$$.session;$group_id$jscomp$1_session$$[$req$$.t_session]=0;$group_id$jscomp$1_session$$[$req$$.d_session]=""}else global.clientRedis.set($req$$.t_session,0),global.clientRedis.set($req$$.d_session,"");log.create({id_app:"LOGIN",id_func:"LOGIN",action:"LOCALLOGIN"},$req$$.user.email,$req$$.header("user-agent"),$req$$);
27
- let $user$$=$req$$.user;if($req$$.query.id_app&&$req$$.query.group_id&&global.mongoose.Types.ObjectId.isValid($req$$.query.group_id)){const $id_app$$=$req$$.query.id_app;$group_id$jscomp$1_session$$=$req$$.query.group_id;const $app$$=await App.findById($id_app$$),$group$$=await UserGroup.findOne({_id:$group_id$jscomp$1_session$$,is_customer_group:!0});$app$$&&$group$$&&Participant.createParticipant({id_app:$id_app$$,email:$user$$.email,name:$user$$.name,group_id:$group_id$jscomp$1_session$$,active:!0},
28
- $cust$jscomp$2_e$$=>{if($cust$jscomp$2_e$$)return console.log("can't add user",$user$$.email,"to company",$app$$.name);$cust$jscomp$2_e$$={ten_kh:$user$$.name,email:$user$$.email,id_app:$id_app$$,user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email};validator.isMobilePhone($user$$.email,["vi-VN"])&&($cust$jscomp$2_e$$.dien_thoai=$user$$.email);try{Customer.asyncCreateCustomer($cust$jscomp$2_e$$)}catch($e$$){console.log("Auto create new customer with error:",$e$$.message)}})}const $accessToken$$=
29
- generateToken($user$$);let $session_created$$;$req$$.cookies&&($session_created$$=$req$$.cookies.uid);(new Token({email:$user$$.email,session_created:$session_created$$,token:$accessToken$$,agent:$agent$$,ip:"",once:1==$req$$.query.once||"true"==$req$$.query.once||"1"===$req$$.query.once?!0:!1})).save(function($e$$,$rs$$){if($e$$)return $res$$.status(500).send($e$$);$res$$.send({token:$accessToken$$,once:$rs$$.once})})});$app$jscomp$0$$.get("/check-user/:email",$rateLimiter$$,function($req$$,$res$$){User.findOne({email:$req$$.params.email},
30
- {email:1,name:1,picture:1}).lean().exec(function($e$$,$user$$){if($e$$)return $res$$.status(400).send($e$$);$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("Kh\u00f4ng c\u00f3 n\u1ed9i dung");if(!$body$$.email)return $res$$.status(400).send("L\u1ed7i: B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");$body$$.email=$body$$.email.trim().toLowerCase();
31
- if(!validator.isEmail($body$$.email)&&!validator.isMobilePhone($body$$.email,["vi-VN"]))return $res$$.status(400).send("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("L\u1ed7i: H\u1ecd v\u00e0 t\u00ean ch\u01b0a nh\u1eadp");User.findOne({email:$body$$.email},async function($error$jscomp$1$$,$result$$){if($error$jscomp$1$$)return $res$$.status(400).send($error$jscomp$1$$);
32
- if($result$$)if($result$$.local&&$result$$.local.email==$body$$.email||$result$$.email===$body$$.email)if($body$$.id_app)try{return await addUserToApp($result$$,$body$$),$res$$.send("T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd th\u00e0nh c\u00f4ng")}catch($e$$){return $res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$})}else return $res$$.status(400).send("L\u1ed7i: T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd");
33
- else $result$$.local||($result$$.local={});else $result$$=new User,$result$$.email=$body$$.email,$result$$.local={};$result$$.local.email=$body$$.email;$result$$.local.name=$body$$.name;$result$$.partner=$body$$.partner;$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");let $password$$;if($body$$.password){if($body$$.rePassword!==
34
- $body$$.password)return $res$$.status(400).send("L\u1ed7i: M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c");if(!User.teststrengthPassword($body$$.password))return $res$$.status(400).send("L\u1ed7i: M\u1eadt kh\u1ea9u ph\u1ea3i c\u00f3 \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1 v\u00e0 bao g\u1ed3m \u00edt nh\u1ea5t m\u1ed9t ch\u1eef s\u1ed1, m\u1ed9t ch\u1eef hoa v\u00e0 m\u1ed9t ch\u1eef th\u01b0\u1eddng");$password$$=$body$$.password}else $password$$=_crypto.createHash("md5").update($result$$.email+
35
- (new Date).toISOString()).digest("hex");$result$$.local.password=$result$$.generateHash($password$$);$result$$.save(async function($app$jscomp$4_error$$,$newUser$$){if($app$jscomp$4_error$$)return $res$$.status(400).send("L\u1ed7i: Kh\u00f4ng th\u1ec3 \u0111\u0103ng k\u00fd");log.create({id_app:"SIGNUP",id_func:"SIGNUP",action:"SIGNUP"},$result$$.email,$req$$.header("user-agent"),$req$$);if($body$$.cty_name){$app$jscomp$4_error$$=new App;$app$jscomp$4_error$$.user_created=$result$$.email;$app$jscomp$4_error$$.user_updated=
36
- $result$$.email;$app$jscomp$4_error$$.name=$body$$.cty_name;var $d$jscomp$1_now$$=new Date;$app$jscomp$4_error$$.ngay_dn=new Date($d$jscomp$1_now$$.getFullYear(),0,1);$app$jscomp$4_error$$.ngay_ks=new Date($d$jscomp$1_now$$.getFullYear()-1,12,0);$app$jscomp$4_error$$.nam_bd=$d$jscomp$1_now$$.getFullYear();$app$jscomp$4_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()+3);$app$jscomp$4_error$$.expire_date=
37
- new Date($d$jscomp$1_now$$);$app$jscomp$4_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$$)}catch($e$$){return await User.deleteOne({email:$body$$.email}),$res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$})}validator.isEmail($body$$.email)&&
38
- !$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$$)})}),$res$$.send("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")):
39
- $res$$.send("T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o")})})});$app$jscomp$0$$.get("/resetpassword",$rateLimiter$$,async($req$$,$res$$)=>{let $address$$=$req$$.query.email;if(!$address$$)return $res$$.status(400).send("Y\u00eau c\u1ea7u m\u1ed9t email");$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$$);
40
- if(!$result$$)return $res$$.status(400).send(`T\u00e0i kho\u1ea3n ${$address$$} ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd`);let $newpassword$$=_crypto.createHash("md5").update((new Date).toISOString()).digest("hex");$result$$.local.rspassword=$result$$.generateHash($newpassword$$);$result$$.save(function($error$jscomp$1$$){if($error$jscomp$1$$)return $res$$.status(400).send($error$jscomp$1$$);log.create({id_app:"RESETPASSWORD",id_func:"RESETPASSWORD",action:"RESETPASSWORD"},$result$$.email,
41
- $req$$.header("user-agent"),$req$$);loadTemplate("reset mat khau.html",{receiver_name:$result$$.name,email:$result$$.email,password:$newpassword$$},function($error$jscomp$0$$,$html$$){if($error$jscomp$0$$)return console.log($error$jscomp$0$$);$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"+
42
- $error$$)});$result$$.email2&&validator.isEmail($result$$.email2)&&email.sendHtml({to:{name:$result$$.name,address:$result$$.email2},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$$)})});$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")})})})};
10
+ if(!$user$$.validPassword($password$$))return $done$$("M\u1eadt kh\u1ea9u kh\u00f4ng ch\u00ednh x\u00e1c.")}return $done$$(null,$user$$)})})}));$app$jscomp$0$$.get("/send-otp/:phone",$rateLimiter$$,async($req_url$$,$res$$)=>{const $Phone$$=$req_url$$.params.phone.trim();if(!await User.findOne({email:$Phone$$}))return $res$$.status(400).send({error:`T\u00e0i kho\u1ea3n ${$Phone$$} kh\u00f4ng t\u1ed3n t\u1ea1i`});if(!$req_url$$.query["g-recaptcha-response"])return $res$$.status(400).send("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u m\u1ed9t google recaptcha token");
11
+ try{await permission.verifyReCaptcha($req_url$$.query["g-recaptcha-response"])}catch($e$$){return $res$$.status(400).send($e$$.messag||$e$$.error||$e$$)}const $otp_code$$=generateOTP();validator.isEmail($Phone$$)?email.sendHtml({to:{address:$Phone$$},subject:"M\u00e3 x\u00e1c th\u1ef1c",html:`Xin vui l\u00f2ng g\u1eedi qu\u00fd kh\u00e1ch m\u00e3 x\u00e1c th\u1ef1c: ${$otp_code$$}. M\u00e3 n\u00e0y s\u1ebd h\u1ebft h\u1ea1n s\u1eed d\u1ee5ng sau 5 ph\u00fat.`},function($error$$){$error$$?(console.error("Error send otp to email",
12
+ $error$$),$res$$.status(400).send(`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi email ${$Phone$$}`)):saveOTP($Phone$$,$otp_code$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)},5)},configs.sender_otp):validator.isMobilePhone($Phone$$)?configs.sms.send?configs.sms.send($Phone$$,$otp_code$$,$req_url$$.query.id_app).then($rs$jscomp$0$$=>{$rs$jscomp$0$$.error_message?$res$$.status(400).send({error:$rs$jscomp$0$$.message||$rs$jscomp$0$$.error||
13
+ $rs$jscomp$0$$.error_message||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`}):saveOTP($Phone$$,$otp_code$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)})}).catch($e$$=>{console.error("Error send sms",$e$$);$res$$.status(400).send({error:$e$$.message||$e$$.error_message||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`})}):($req_url$$=configs.sms.genUrlSendOTP($Phone$$,$otp_code$$,
14
+ $req_url$$.query.id_app),request({url:$req_url$$},($error$$,$response$$,$body$$)=>{if($error$$||200!=$response$$.statusCode)$res$$.status(400).send({error:$error$$||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`});else try{const $info$$=JSON.parse($body$$);"100"==$info$$.CodeResult?saveOTP($Phone$$,$otp_code$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)}):(console.error("Error send sms",$info$$),$res$$.status(400).send({error:`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`}))}catch($e$$){$res$$.status(400).send({error:$body$$})}})):
15
+ $res$$.status(400).send({error:`T\u00e0i kho\u1ea3n ${$Phone$$} kh\u00f4ng c\u00f3 gi\u00e1 tr\u1ecb`})});$app$jscomp$0$$.get("/verify-otp/:id/:otp",$rateLimiter$$,async function($req$$,$res$$){try{const $id$$=$req$$.params.id;if(!global.mongoose.Types.ObjectId.isValid($id$$))return $res$$.status(400).send({error:"ID c\u1ee7a m\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i",code:4001});const $otp_code$$=$req$$.params.otp,$otp$$=await OTP.findById($id$$);$otp$$.tried_number=($otp$$.tried_number||
16
+ 0)+1;await $otp$$.save();if(!$otp$$||$otp$$.otp!=$otp_code$$||$otp$$.verified||$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 $is_new$$=!1;const $username$$=$otp$$.phone;let $user$$=await User.findOne({email:$username$$});if(!$user$$){$user$$=
17
+ new User;$user$$.email=$username$$;$user$$.local={active:!0};$user$$.local.email=$otp$$.email;$user$$.local.phone=$otp$$.phone;$user$$.local.name=$otp$$.phone;$user$$.name=$otp$$.phone;$is_new$$=!0;try{await $user$$.save()}catch($e$$){return console.log("error verify otp, create user",$e$$),$res$$.status(500).send($e$$)}}else if(!$user$$.local||!$user$$.local.active){$user$$.local=$user$$.local||{};$user$$.local.active=!0;try{await $user$$.save()}catch($e$$){return console.log("error verify otp, create user",
18
+ $e$$),$res$$.status(500).send($e$$)}}if($req$$.query.id_app&&$req$$.query.group_id){const $id_app$$=$req$$.query.id_app,$group_id$$=$req$$.query.group_id,$app$$=await App.findById($id_app$$);$app$$&&Participant.createParticipant({id_app:$id_app$$,email:$user$$.email,name:$user$$.name,group_id:$group_id$$,active:!0},$cust$jscomp$1_e$$=>{if($cust$jscomp$1_e$$)return console.log("can't add user",$user$$.email,"to company",$app$$.name);$cust$jscomp$1_e$$={ten_kh:$user$$.name||$user$$.email,email:$user$$.email,
19
+ dien_thoai:$otp$$.phone,id_app:$id_app$$,user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email};try{Customer.asyncCreateCustomer($cust$jscomp$1_e$$)}catch($e$$){console.log("Auto create new customer with error:",$e$$.message)}})}const $accessToken$$=generateToken($user$$);(new Token({email:$user$$.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?
20
+ !0:!1})).save(function($e$$,$rs$$){return $e$$?$res$$.status(500).send($e$$):$res$$.send({token:$accessToken$$,is_new:$is_new$$,once:$rs$$.once})})}catch($e$$){console.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$$||"Unauthorized"});$req$$.user=$user$$;$next$$()})($req$$,
21
+ $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||$e$$)}});$app$jscomp$0$$.get("/auth/local",
22
+ $rateLimiter$$,function($req$$,$res$$,$next$$){let $ip$$=($req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress).split(".").join("").split(":").join(""),$authorization$$=$req$$.headers.authorization;if(!$authorization$$)return $res$$.status(400).send({message:"Authorization is required"});$authorization$$=Buffer.from($authorization$$.replace("Basic ",""),"base64").toString("utf-8");$authorization$$=$authorization$$.split(":");if(1<$authorization$$.length){let $t_session$$=
23
+ "times_login_"+$ip$$+"_"+$authorization$$[0].trim().toLowerCase(),$d_session$$="datetime_login_"+$ip$$+"_"+$authorization$$[0].trim().toLowerCase();$req$$.t_session=$t_session$$;$req$$.d_session=$d_session$$;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$$=
24
+ new Date($req$$[$d_session$$]):$req$$[$d_session$$]=$now$$;$req$$=$now$$.getTime()-$d$$.getTime();if(18E6>$req$$&&10<$times_try$$)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai 10 l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+Math.roundBy((18E6-$req$$)/6E4,0)+" ph\u00fat"});$next$$()}else global.clientRedis.get($t_session$$,function($err$$,$reply$$){$reply$$?($times_try$$=Number($reply$$)+1,global.clientRedis.set($t_session$$,$times_try$$)):(global.clientRedis.set($t_session$$,
25
+ $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(18E6>$err$jscomp$3_time_wait$$&&10<$times_try$$)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai 10 l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+Math.roundBy((18E6-$err$jscomp$3_time_wait$$)/
26
+ 6E4,0)+" ph\u00fat"});$next$$()})})}},function($req$$,$res$$,$next$$){$passport$$.authenticate("basic",{session:!1},function($err$$,$user$$){if($err$$||!$user$$)return $res$$.status(401).send({message:$err$$||"Unauthorized"});if(configs.require_verify&&!$user$$.local.active)return $res$$.status(401).send({require_verify:!0});$req$$.user=$user$$;$next$$()})($req$$,$res$$,$next$$)},async($req$$,$res$$)=>{let $agent$$=$req$$.headers["user-agent"];$req$$.headers.cookie?($group_id$jscomp$1_session$jscomp$1_session_created$$=
27
+ $req$$.session,$group_id$jscomp$1_session$jscomp$1_session_created$$[$req$$.t_session]=0,$group_id$jscomp$1_session$jscomp$1_session_created$$[$req$$.d_session]=""):(global.clientRedis.set($req$$.t_session,0),global.clientRedis.set($req$$.d_session,""));log.create({id_app:"LOGIN",id_func:"LOGIN",action:"LOCALLOGIN"},$req$$.user.email,$req$$.header("user-agent"),$req$$);let $user$$=$req$$.user;if($req$$.query.id_app&&$req$$.query.group_id&&global.mongoose.Types.ObjectId.isValid($req$$.query.group_id)&&
28
+ global.mongoose.Types.ObjectId.isValid($req$$.query.id_app)){const $id_app$$=$req$$.query.id_app;$group_id$jscomp$1_session$jscomp$1_session_created$$=$req$$.query.group_id;const $app$$=await App.findById($id_app$$),$group$$=await UserGroup.findOne({_id:$group_id$jscomp$1_session$jscomp$1_session_created$$,is_customer_group:!0});$app$$&&$group$$&&Participant.createParticipant({id_app:$id_app$$,email:$user$$.email,name:$user$$.name,group_id:$group_id$jscomp$1_session$jscomp$1_session_created$$,active:!0},
29
+ $cust$jscomp$2_e$$=>{if($cust$jscomp$2_e$$)return console.log("can't add user",$user$$.email,"to company",$app$$.name);$cust$jscomp$2_e$$={ten_kh:$user$$.name||$user$$.email,email:$user$$.email,id_app:$id_app$$,user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email};validator.isMobilePhone($user$$.email,["vi-VN"])&&($cust$jscomp$2_e$$.dien_thoai=$user$$.email);try{Customer.asyncCreateCustomer($cust$jscomp$2_e$$)}catch($e$$){console.log("Auto create new customer with error:",
30
+ $e$$.message)}})}const $accessToken$$=generateToken($user$$);var $group_id$jscomp$1_session$jscomp$1_session_created$$=($req$$.cookies||{}).uid;$group_id$jscomp$1_session$jscomp$1_session_created$$&&User.updateOne({email:$user$$.email,session_created:null},{session_created:$group_id$jscomp$1_session$jscomp$1_session_created$$});(new Token({email:$user$$.email,session_created:$group_id$jscomp$1_session$jscomp$1_session_created$$,token:$accessToken$$,agent:$agent$$,ip:"",once:1==$req$$.query.once||
31
+ "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({email:$email$$},{email:1,name:1,picture:1}).lean().exec(function($e$$,$user$$){if($e$$||!$user$$)return $res$$.status(400).send($e$$||`T\u00e0i kho\u1ea3n ${$email$$} kh\u00f4ng t\u1ed3n t\u1ea1i`);
32
+ $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("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");var $app$$=$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");
33
+ 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("C\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i");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("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("B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");
34
+ $body$$.email=$body$$.email.trim().toLowerCase();if(!validator.isEmail($body$$.email)&&!validator.isMobilePhone($body$$.email,["vi-VN"]))return $res$$.status(400).send("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("H\u1ecd v\u00e0 t\u00ean ch\u01b0a nh\u1eadp");User.findOne({email:$body$$.email},async function($error$jscomp$1$$,$result$$){if($error$jscomp$1$$)return $res$$.status(400).send($error$jscomp$1$$);
35
+ if($result$$)if($result$$.local&&$result$$.local.active&&$result$$.local.email==$body$$.email)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"});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 $res$$.status(400).send({error:$e$$.error||
36
+ $e$$.message||$e$$})}else return $res$$.status(400).send("T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd");else $result$$.local||($result$$.local={});else $result$$=new User,$result$$.email=$body$$.email,$result$$.local={};$result$$.local.email=$body$$.email;$result$$.local.name=$body$$.name;$result$$.partner=$body$$.partner;$result$$.session_created=$session_created$$;$body$$.email2&&validator.isEmail($body$$.email2)&&($result$$.email2=$body$$.email2);
37
+ $result$$.name=$result$$.local.name;$body$$.picture?$result$$.local.picture=$body$$.picture:$result$$.local.picture||($result$$.local.picture="/images/avatar.jpg");let $password$$;if($body$$.password){if($body$$.rePassword!==$body$$.password)return $res$$.status(400).send("M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c");if(!User.teststrengthPassword($body$$.password))return $res$$.status(400).send("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");
38
+ $password$$=$body$$.password}else $password$$=_crypto.createHash("md5").update($result$$.email+(new Date).toISOString()).digest("hex");$result$$.local.password=$result$$.generateHash($password$$);$result$$.save(async function($app$jscomp$5_error$$,$newUser$$){if($app$jscomp$5_error$$)return $res$$.status(400).send("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$$=
39
+ new App;$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;
40
+ $d$jscomp$1_now$$.setMonth($d$jscomp$1_now$$.getMonth()+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 User.deleteOne({email:$body$$.email}),
41
+ $res$$.status(400).send({error:$e$$.error||$e$$.message||$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"+
42
+ $error$$)})}),$res$$.send("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")):$res$$.send("T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o")})})});$app$jscomp$0$$.get("/resetpassword",$rateLimiter$$,async($req$$,$res$$)=>{try{await permission.verifyReCaptcha($req$$.query["g-recaptcha-response"])}catch($e$$){return $res$$.status(400).send($e$$.message||
43
+ $e$$.error||$e$$)}let $address$$=$req$$.query.email;if(!$address$$)return $res$$.status(400).send("Y\u00eau c\u1ea7u m\u1ed9t email");$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`);
44
+ let $newpassword$$=_crypto.createHash("md5").update((new Date).toISOString()).digest("hex");$result$$.local.rspassword=$result$$.generateHash($newpassword$$);$result$$.save(function($error$jscomp$1$$){if($error$jscomp$1$$)return $res$$.status(400).send($error$jscomp$1$$);log.create({id_app:"RESETPASSWORD",id_func:"RESETPASSWORD",action:"RESETPASSWORD"},$result$$.email,$req$$.header("user-agent"),$req$$);loadTemplate("reset mat khau.html",{receiver_name:$result$$.name,email:$result$$.email,password:$newpassword$$},
45
+ function($error$jscomp$0$$,$html$$){if($error$jscomp$0$$)return console.log($error$jscomp$0$$);$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$$)});$result$$.email2&&validator.isEmail($result$$.email2)&&email.sendHtml({to:{name:$result$$.name,address:$result$$.email2},
46
+ 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$$)})});$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")})})})};
package/server/cluster.js CHANGED
@@ -2,8 +2,8 @@
2
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"),_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$$={start_import_data_pool:!1,
3
3
  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$$;$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=
4
4
  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);$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=require("express-session");
5
- $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_uid$$,$res$$,$next$$){($req_uid$$=$req_uid$$.cookies.uid)||($req_uid$$="uid:"+crypto.randomBytes(20).toString("hex"));
6
- $res$$.cookie("uid",$req_uid$$,{expires:new Date(Date.now()+864E5),sameSite:"none",secure:!0});$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$$=$configs$$.paths.uploads||__dirname+"/uploads";$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=
5
+ $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$$="uid:"+crypto.randomBytes(20).toString("hex"),
6
+ $res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}),$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$$=$configs$$.paths.uploads||__dirname+"/uploads";$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=
7
7
  require("multer")({dest:$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$,limits:{fileSize:$configs$$.limitFileSize||1048576}});$app$$.use($_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$);$app$$.use(cors({credentials:!0,exposedHeaders:["set-cookie"],origin:($origin$$,$callback$$)=>{$callback$$(null,!0)}}));$configs$$.paths||($configs$$.paths={});$app$$.use("/",express.static($configs$$.paths.public||__dirname+"/public"));
8
8
  $app$$.use("/admin",express.static($configs$$.paths.admin||__dirname+"/admin"));$app$$.use("/templates",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());$_configs_compress_cookieParser_modulesVisible_morgan_multer_root_dir_uploads_session$$=
9
9
  require("morgan");$_port_accessLogStream_rfs$$=require("rotating-file-stream");const $logDirectory$$=$configs$$.paths.log||__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>