midway-fatcms 0.0.1-beta.2 → 0.0.1-beta.22

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 (265) hide show
  1. package/.eslintrc.json +12 -0
  2. package/.prettierrc.js +4 -0
  3. package/README.md +7 -0
  4. package/dist/config/config.default.js +52 -15
  5. package/dist/configuration.d.ts +1 -0
  6. package/dist/configuration.js +33 -8
  7. package/dist/controller/base/BaseApiController.d.ts +1 -1
  8. package/dist/controller/base/BaseApiController.js +14 -6
  9. package/dist/controller/gateway/AsyncTaskController.d.ts +14 -0
  10. package/dist/controller/gateway/AsyncTaskController.js +108 -0
  11. package/dist/controller/gateway/CrudMtdGatewayController.d.ts +3 -3
  12. package/dist/controller/gateway/CrudMtdGatewayController.js +9 -6
  13. package/dist/controller/gateway/CrudStdGatewayController.d.ts +5 -5
  14. package/dist/controller/gateway/DocGatewayController.js +14 -9
  15. package/dist/controller/gateway/PublicApiController.js +4 -6
  16. package/dist/controller/gateway/StaticController.d.ts +2 -0
  17. package/dist/controller/gateway/StaticController.js +59 -40
  18. package/dist/controller/helpers.controller.d.ts +1 -1
  19. package/dist/controller/home.controller.js +2 -2
  20. package/dist/controller/manage/AnyApiMangeApi.js +2 -2
  21. package/dist/controller/manage/AppLogMangeApi.js +2 -2
  22. package/dist/controller/manage/AppMangeApi.js +2 -2
  23. package/dist/controller/manage/AppPageMangeApi.js +2 -2
  24. package/dist/controller/manage/AppSchemaHistoryApi.js +2 -2
  25. package/dist/controller/manage/CrudMethodsMangeApi.js +2 -2
  26. package/dist/controller/manage/CrudStandardDesignApi.d.ts +1 -1
  27. package/dist/controller/manage/CrudStandardDesignApi.js +78 -75
  28. package/dist/controller/manage/DataDictManageApi.d.ts +1 -1
  29. package/dist/controller/manage/DataDictManageApi.js +1 -1
  30. package/dist/controller/manage/DeployManageApi.d.ts +1 -1
  31. package/dist/controller/manage/DeployManageApi.js +38 -34
  32. package/dist/controller/manage/DocLibManageApi.js +2 -2
  33. package/dist/controller/manage/DocManageApi.js +2 -2
  34. package/dist/controller/manage/FileManageApi.js +1 -1
  35. package/dist/controller/manage/LowCodeTplManageApi.js +2 -2
  36. package/dist/controller/manage/MenuManageApi.js +2 -2
  37. package/dist/controller/manage/ProxyApiMangeApi.js +2 -2
  38. package/dist/controller/manage/SuperAdminManageApi.d.ts +2 -2
  39. package/dist/controller/manage/SuperAdminManageApi.js +12 -8
  40. package/dist/controller/manage/SysConfigMangeApi.d.ts +1 -1
  41. package/dist/controller/manage/SysConfigMangeApi.js +8 -6
  42. package/dist/controller/manage/SystemInfoManageApi.d.ts +1 -1
  43. package/dist/controller/manage/SystemInfoManageApi.js +7 -1
  44. package/dist/controller/manage/UserAccountManageApi.d.ts +2 -2
  45. package/dist/controller/manage/UserAccountManageApi.js +7 -2
  46. package/dist/controller/manage/WorkbenchMangeApi.js +3 -3
  47. package/dist/controller/myinfo/AuthController.d.ts +0 -4
  48. package/dist/controller/myinfo/AuthController.js +1 -54
  49. package/dist/controller/render/AppRenderController.js +10 -4
  50. package/dist/controller/test.controller.d.ts +1 -1
  51. package/dist/controller/test.controller.js +5 -5
  52. package/dist/index.d.ts +34 -4
  53. package/dist/index.js +34 -4
  54. package/dist/libs/crud-pro/CrudPro.d.ts +1 -0
  55. package/dist/libs/crud-pro/CrudPro.js +5 -0
  56. package/dist/libs/crud-pro/defaultConfigs.js +2 -0
  57. package/dist/libs/crud-pro/interfaces.d.ts +7 -1
  58. package/dist/libs/crud-pro/models/ExecuteContext.d.ts +2 -1
  59. package/dist/libs/crud-pro/models/ExecuteContextFunc.d.ts +8 -1
  60. package/dist/libs/crud-pro/models/ExecuteContextFunc.js +8 -0
  61. package/dist/libs/crud-pro/models/RequestCfgModel.d.ts +1 -1
  62. package/dist/libs/crud-pro/models/ResModel.d.ts +16 -0
  63. package/dist/libs/crud-pro/models/ResModel.js +2 -0
  64. package/dist/libs/crud-pro/models/SqlCfgModel.d.ts +1 -1
  65. package/dist/libs/crud-pro/models/TransactionSqlServer.js +1 -1
  66. package/dist/libs/crud-pro/services/CrudProCachedCfgService.d.ts +1 -0
  67. package/dist/libs/crud-pro/services/CrudProCachedCfgService.js +27 -15
  68. package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +13 -17
  69. package/dist/libs/crud-pro/services/CrudProGenSqlCondition.d.ts +1 -1
  70. package/dist/libs/crud-pro/services/CrudProGenSqlCondition.js +10 -12
  71. package/dist/libs/crud-pro/services/CrudProGenSqlService.js +14 -23
  72. package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.js +7 -6
  73. package/dist/libs/crud-pro/services/CrudProServiceBase.d.ts +2 -6
  74. package/dist/libs/crud-pro/services/CrudProServiceBase.js +3 -2
  75. package/dist/libs/crud-pro/services/CrudProTableMetaService.d.ts +1 -0
  76. package/dist/libs/crud-pro/services/CrudProTableMetaService.js +32 -7
  77. package/dist/libs/crud-pro/utils/DatabaseName.js +24 -3
  78. package/dist/libs/crud-pro/utils/MixinUtils.js +1 -1
  79. package/dist/libs/crud-pro/utils/ValidateUtils.js +1 -1
  80. package/dist/libs/crud-pro/utils/sqlConvert/convertColumnName.js +2 -2
  81. package/dist/libs/crud-pro/utils/sqlConvert/convertMix.d.ts +3 -0
  82. package/dist/libs/crud-pro/utils/sqlConvert/convertMix.js +22 -0
  83. package/dist/libs/global-config/global-config.d.ts +45 -0
  84. package/dist/libs/global-config/global-config.js +33 -0
  85. package/dist/libs/utils/errorToString.d.ts +2 -0
  86. package/dist/libs/utils/errorToString.js +57 -0
  87. package/dist/libs/utils/fatcms-request.js +2 -2
  88. package/dist/middleware/forbidden.middleware.js +4 -20
  89. package/dist/middleware/global.middleware.js +8 -1
  90. package/dist/models/AsyncTaskModel.d.ts +69 -0
  91. package/dist/models/AsyncTaskModel.js +26 -0
  92. package/dist/models/RedisKeys.d.ts +8 -0
  93. package/dist/models/RedisKeys.js +11 -0
  94. package/dist/models/SystemTables.d.ts +1 -3
  95. package/dist/models/SystemTables.js +2 -4
  96. package/dist/schedule/anonymousContext.d.ts +13 -0
  97. package/dist/schedule/anonymousContext.js +59 -0
  98. package/dist/schedule/index.d.ts +4 -3
  99. package/dist/schedule/index.js +8 -67
  100. package/dist/schedule/runSchedule.d.ts +15 -0
  101. package/dist/schedule/runSchedule.js +68 -0
  102. package/dist/schedule/scheduleNames.d.ts +13 -0
  103. package/dist/schedule/scheduleNames.js +17 -0
  104. package/dist/service/AuthService.js +8 -5
  105. package/dist/service/EnumInfoService.js +7 -4
  106. package/dist/service/FileCenterService.js +13 -9
  107. package/dist/service/SysConfigService.js +4 -2
  108. package/dist/service/UserAccountService.js +10 -6
  109. package/dist/service/UserSessionService.js +2 -1
  110. package/dist/service/VisitStatService.d.ts +1 -1
  111. package/dist/service/VisitStatService.js +20 -27
  112. package/dist/service/WorkbenchService.js +4 -2
  113. package/dist/service/anyapi/AnyApiService.js +4 -2
  114. package/dist/service/asyncTask/AsyncTaskRunnerService.d.ts +37 -0
  115. package/dist/service/asyncTask/AsyncTaskRunnerService.js +232 -0
  116. package/dist/service/asyncTask/AsyncTaskService.d.ts +7 -0
  117. package/dist/service/asyncTask/AsyncTaskService.js +34 -0
  118. package/dist/service/crudstd/CrudStdService.d.ts +2 -1
  119. package/dist/service/crudstd/CrudStdService.js +48 -3
  120. package/dist/service/curd/CrudProQuick.d.ts +24 -0
  121. package/dist/service/curd/CrudProQuick.js +105 -0
  122. package/dist/service/curd/CurdMixByAccountService.js +12 -6
  123. package/dist/service/curd/CurdMixByDictService.js +4 -2
  124. package/dist/service/curd/CurdMixByLinkToCustomService.d.ts +10 -1
  125. package/dist/service/curd/CurdMixByLinkToCustomService.js +72 -24
  126. package/dist/service/curd/CurdMixBySysConfigService.js +4 -2
  127. package/dist/service/curd/CurdMixByWorkbenchService.js +4 -2
  128. package/dist/service/curd/CurdMixService.d.ts +1 -1
  129. package/dist/service/curd/CurdMixService.js +2 -2
  130. package/dist/service/curd/CurdMixUtils.d.ts +7 -0
  131. package/dist/service/curd/CurdMixUtils.js +65 -28
  132. package/dist/service/curd/CurdProService.d.ts +2 -10
  133. package/dist/service/curd/CurdProService.js +31 -146
  134. package/dist/service/curd/fixCfgModel.d.ts +3 -0
  135. package/dist/service/curd/fixCfgModel.js +107 -0
  136. package/dist/service/proxyapi/ProxyApiLoadService.js +7 -4
  137. package/dist/views/404_app.html +31 -0
  138. package/dist/views/404_workbench.html +34 -0
  139. package/dist/views/static/favicon.ico +0 -0
  140. package/package.json +9 -2
  141. package/src/config/config.default.ts +58 -27
  142. package/src/configuration.ts +42 -9
  143. package/src/controller/base/BaseApiController.ts +26 -19
  144. package/src/controller/gateway/AnyApiGatewayController.ts +1 -1
  145. package/src/controller/gateway/AsyncTaskController.ts +83 -0
  146. package/src/controller/gateway/CrudMtdGatewayController.ts +17 -13
  147. package/src/controller/gateway/CrudStdGatewayController.ts +4 -4
  148. package/src/controller/gateway/DocGatewayController.ts +25 -17
  149. package/src/controller/gateway/FileController.ts +8 -9
  150. package/src/controller/gateway/ProxyApiGatewayController.ts +4 -4
  151. package/src/controller/gateway/PublicApiController.ts +19 -22
  152. package/src/controller/gateway/StaticController.ts +234 -242
  153. package/src/controller/helpers.controller.ts +1 -1
  154. package/src/controller/home.controller.ts +8 -15
  155. package/src/controller/manage/AnyApiMangeApi.ts +11 -11
  156. package/src/controller/manage/AppLogMangeApi.ts +5 -5
  157. package/src/controller/manage/AppMangeApi.ts +7 -7
  158. package/src/controller/manage/AppPageMangeApi.ts +5 -5
  159. package/src/controller/manage/AppSchemaHistoryApi.ts +3 -3
  160. package/src/controller/manage/CrudMethodsMangeApi.ts +5 -5
  161. package/src/controller/manage/CrudStandardDesignApi.ts +106 -113
  162. package/src/controller/manage/DataDictManageApi.ts +5 -5
  163. package/src/controller/manage/DeployManageApi.ts +85 -89
  164. package/src/controller/manage/DocLibManageApi.ts +5 -5
  165. package/src/controller/manage/DocManageApi.ts +10 -10
  166. package/src/controller/manage/FileManageApi.ts +1 -1
  167. package/src/controller/manage/LowCodeTplManageApi.ts +2 -2
  168. package/src/controller/manage/MenuManageApi.ts +10 -15
  169. package/src/controller/manage/ProxyApiMangeApi.ts +2 -2
  170. package/src/controller/manage/SuperAdminManageApi.ts +14 -13
  171. package/src/controller/manage/SysConfigMangeApi.ts +11 -11
  172. package/src/controller/manage/SystemInfoManageApi.ts +11 -6
  173. package/src/controller/manage/UserAccountManageApi.ts +10 -4
  174. package/src/controller/manage/WorkbenchMangeApi.ts +8 -8
  175. package/src/controller/myinfo/AuthController.ts +6 -72
  176. package/src/controller/render/AppRenderController.ts +24 -21
  177. package/src/controller/test.controller.ts +18 -18
  178. package/src/index.ts +38 -4
  179. package/src/libs/crud-pro/CrudPro.ts +7 -0
  180. package/src/libs/crud-pro/defaultConfigs.ts +2 -0
  181. package/src/libs/crud-pro/interfaces.ts +10 -3
  182. package/src/libs/crud-pro/models/ExecuteContext.ts +3 -3
  183. package/src/libs/crud-pro/models/ExecuteContextFunc.ts +11 -1
  184. package/src/libs/crud-pro/models/RequestCfgModel.ts +1 -1
  185. package/src/libs/crud-pro/models/RequestModel.ts +1 -1
  186. package/src/libs/crud-pro/models/ResModel.ts +19 -0
  187. package/src/libs/crud-pro/models/SqlCfgModel.ts +2 -2
  188. package/src/libs/crud-pro/models/Transaction.ts +8 -9
  189. package/src/libs/crud-pro/models/TransactionPostgres.ts +1 -1
  190. package/src/libs/crud-pro/models/TransactionSqlServer.ts +8 -13
  191. package/src/libs/crud-pro/services/CrudProCachedCfgService.ts +32 -23
  192. package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +38 -54
  193. package/src/libs/crud-pro/services/CrudProGenSqlCondition.ts +26 -45
  194. package/src/libs/crud-pro/services/CrudProGenSqlService.ts +23 -40
  195. package/src/libs/crud-pro/services/CrudProOriginToExecuteSql.ts +25 -29
  196. package/src/libs/crud-pro/services/CrudProServiceBase.ts +5 -9
  197. package/src/libs/crud-pro/services/CrudProTableMetaService.ts +36 -9
  198. package/src/libs/crud-pro/utils/DatabaseName.ts +35 -15
  199. package/src/libs/crud-pro/utils/DateTimeUtils.ts +2 -2
  200. package/src/libs/crud-pro/utils/MixinUtils.ts +1 -1
  201. package/src/libs/crud-pro/utils/ValidateUtils.ts +1 -3
  202. package/src/libs/crud-pro/utils/pool/MySQLUtils.ts +1 -1
  203. package/src/libs/crud-pro/utils/pool/PostgresUtils.ts +3 -3
  204. package/src/libs/crud-pro/utils/pool/SqlServerUtils.ts +3 -3
  205. package/src/libs/crud-pro/utils/sqlConvert/convertColumnName.ts +2 -2
  206. package/src/libs/crud-pro/utils/sqlConvert/convertMix.ts +26 -0
  207. package/src/libs/global-config/global-config.ts +78 -0
  208. package/src/libs/utils/crypto-utils.ts +2 -4
  209. package/src/libs/utils/errorToString.ts +61 -0
  210. package/src/libs/utils/fatcms-request.ts +9 -21
  211. package/src/libs/utils/ordernum-utils.ts +2 -6
  212. package/src/libs/utils/parseConfig.ts +7 -15
  213. package/src/middleware/forbidden.middleware.ts +6 -25
  214. package/src/middleware/global.middleware.ts +18 -16
  215. package/src/models/AsyncTaskModel.ts +79 -0
  216. package/src/models/RedisKeys.ts +13 -0
  217. package/src/models/SystemTables.ts +1 -4
  218. package/src/models/bizmodels.ts +1 -2
  219. package/src/schedule/anonymousContext.ts +79 -0
  220. package/src/schedule/index.ts +11 -72
  221. package/src/schedule/runSchedule.ts +83 -0
  222. package/src/schedule/scheduleNames.ts +21 -0
  223. package/src/service/AuthService.ts +13 -8
  224. package/src/service/EnumInfoService.ts +8 -3
  225. package/src/service/FileCenterService.ts +12 -6
  226. package/src/service/SysConfigService.ts +10 -6
  227. package/src/service/UserAccountService.ts +14 -4
  228. package/src/service/UserSessionService.ts +5 -4
  229. package/src/service/VisitStatService.ts +57 -70
  230. package/src/service/WorkbenchService.ts +7 -2
  231. package/src/service/anyapi/AnyApiService.ts +11 -8
  232. package/src/service/asyncTask/AsyncTaskRunnerService.ts +255 -0
  233. package/src/service/asyncTask/AsyncTaskService.ts +21 -0
  234. package/src/service/base/BaseService.ts +2 -2
  235. package/src/service/crudstd/CrudStdService.ts +60 -5
  236. package/src/service/curd/CrudProQuick.ts +137 -0
  237. package/src/service/curd/CurdMixByAccountService.ts +14 -6
  238. package/src/service/curd/CurdMixByDictService.ts +8 -2
  239. package/src/service/curd/CurdMixByLinkToCustomService.ts +101 -50
  240. package/src/service/curd/CurdMixBySysConfigService.ts +7 -2
  241. package/src/service/curd/CurdMixByWorkbenchService.ts +6 -2
  242. package/src/service/curd/CurdMixService.ts +3 -3
  243. package/src/service/curd/CurdMixUtils.ts +82 -39
  244. package/src/service/curd/CurdProService.ts +45 -189
  245. package/src/service/curd/fixCfgModel.ts +139 -0
  246. package/src/service/proxyapi/ProxyApiLoadService.ts +12 -3
  247. package/src/views/404_app.html +31 -0
  248. package/src/views/404_workbench.html +34 -0
  249. package/src/views/static/favicon.ico +0 -0
  250. package/tsconfig.json +32 -0
  251. package/dist/controller/medstatistic/MedAdminController.d.ts +0 -35
  252. package/dist/controller/medstatistic/MedAdminController.js +0 -205
  253. package/dist/controller/medstatistic/MedClientController.d.ts +0 -28
  254. package/dist/controller/medstatistic/MedClientController.js +0 -188
  255. package/dist/controller/medstatistic/MedMessageService.d.ts +0 -19
  256. package/dist/controller/medstatistic/MedMessageService.js +0 -95
  257. package/dist/controller/medstatistic/MedScoreService.d.ts +0 -21
  258. package/dist/controller/medstatistic/MedScoreService.js +0 -107
  259. package/dist/controller/medstatistic/constants.d.ts +0 -32
  260. package/dist/controller/medstatistic/constants.js +0 -43
  261. package/src/controller/medstatistic/MedAdminController.ts +0 -221
  262. package/src/controller/medstatistic/MedClientController.ts +0 -188
  263. package/src/controller/medstatistic/MedMessageService.ts +0 -89
  264. package/src/controller/medstatistic/MedScoreService.ts +0 -108
  265. package/src/controller/medstatistic/constants.ts +0 -63
@@ -1,21 +1,20 @@
1
- import {CrudProServiceBase} from './CrudProServiceBase';
2
- import {SqlCfgModel} from '../models/SqlCfgModel';
3
- import {MixinUtils} from '../utils/MixinUtils';
4
- import {SqlSegArg} from '../models/SqlSegArg';
5
- import {KeysOfCustomSQL, SqlDbType} from '../models/keys';
6
- import {RequestModel} from '../models/RequestModel';
7
- import {CommonException, Exceptions} from '../exceptions';
8
- import {RequestCfgModel} from '../models/RequestCfgModel';
9
- import {ModelUtils} from '../utils/ModelUtils';
10
- import {FuncContext} from '../models/FuncContext';
11
- import {TypeUtils} from '../utils/TypeUtils';
12
- import {sqlFuncUtils} from '../utils/SqlFuncUtils';
13
- import {toSqlColumnName, toSqlColumnNamesJoin} from '../utils/sqlConvert/convertColumnName';
14
- import {CrudProGenSqlCondition} from "./CrudProGenSqlCondition";
1
+ import { CrudProServiceBase } from './CrudProServiceBase';
2
+ import { SqlCfgModel } from '../models/SqlCfgModel';
3
+ import { MixinUtils } from '../utils/MixinUtils';
4
+ import { SqlSegArg } from '../models/SqlSegArg';
5
+ import { KeysOfCustomSQL, SqlDbType } from '../models/keys';
6
+ import { RequestModel } from '../models/RequestModel';
7
+ import { CommonException, Exceptions } from '../exceptions';
8
+ import { RequestCfgModel } from '../models/RequestCfgModel';
9
+ import { ModelUtils } from '../utils/ModelUtils';
10
+ import { FuncContext } from '../models/FuncContext';
11
+ import { TypeUtils } from '../utils/TypeUtils';
12
+ import { sqlFuncUtils } from '../utils/SqlFuncUtils';
13
+ import { toSqlColumnName, toSqlColumnNamesJoin } from '../utils/sqlConvert/convertColumnName';
14
+ import { CrudProGenSqlCondition } from './CrudProGenSqlCondition';
15
15
 
16
16
  const KEYS_CUSTOM_PATTERN = /@@[0-9a-zA-Z:._]+/gm;
17
17
 
18
-
19
18
  /**
20
19
  * 存在任何需要排除的
21
20
  * @param columns
@@ -52,10 +51,9 @@ class CrudProOriginToExecuteSql extends CrudProServiceBase {
52
51
  const argList = [];
53
52
  let executeSql = originSql;
54
53
 
55
-
56
54
  // 发现有需要被替换的变量。
57
55
  if (sqlArgModelMap) {
58
- executeSql = originSql.replace(KEYS_CUSTOM_PATTERN, word => {
56
+ executeSql = originSql.replace(KEYS_CUSTOM_PATTERN, word => {
59
57
  if (!word) {
60
58
  return '';
61
59
  }
@@ -73,7 +71,6 @@ class CrudProOriginToExecuteSql extends CrudProServiceBase {
73
71
  });
74
72
  }
75
73
 
76
-
77
74
  sqlCfgModel.executeSqlArgs = argList;
78
75
  sqlCfgModel.executeSql = executeSql;
79
76
  }
@@ -115,12 +112,10 @@ class CrudProOriginToExecuteSql extends CrudProServiceBase {
115
112
  return this.generateOffsetLimit(reqCfg, sqlCfg, reqModel);
116
113
  } else if (word === KeysOfCustomSQL.SQL_ORDER_BYS) {
117
114
  return this.generateOrderBys(reqModel, sqlCfg);
118
- } else if ((
119
- word.startsWith(KeysOfCustomSQL.SQL_GET_DATA_ATTR_START) ||
120
- word.startsWith(KeysOfCustomSQL.SQL_GET_CONDITION_ATTR_START)) && word.indexOf('.') > 0) {
115
+ } else if ((word.startsWith(KeysOfCustomSQL.SQL_GET_DATA_ATTR_START) || word.startsWith(KeysOfCustomSQL.SQL_GET_CONDITION_ATTR_START)) && word.indexOf('.') > 0) {
121
116
  return this.generateGetAttr(reqModel, word); //// data.xxx, condition.xxx
122
117
  } else if (word.startsWith(KeysOfCustomSQL.SQL_PICK_RES_AS_NUMBER) || word.startsWith(KeysOfCustomSQL.SQL_PICK_RES_AS_STRING)) {
123
- return this.generatePickResAs(reqModel, word); // @@pickResAsNumber:replies_count
118
+ return this.generatePickResAs(reqModel, word); // @@pickResAsNumber:replies_count
124
119
  } else if (word.startsWith(KeysOfCustomSQL.SQL_AS_UPDATE)) {
125
120
  return this.generateDataUpdate(reqModel, sqlCfg, MixinUtils.removeStringPrefix(word, KeysOfCustomSQL.SQL_AS_UPDATE));
126
121
  } else if (word.startsWith(KeysOfCustomSQL.SQL_AS_INSERT_KEYS)) {
@@ -200,7 +195,7 @@ class CrudProOriginToExecuteSql extends CrudProServiceBase {
200
195
  result.push(reqColumn);
201
196
  }
202
197
  }
203
- return new SqlSegArg(toSqlColumnNamesJoin(result,sqlCfgModel));
198
+ return new SqlSegArg(toSqlColumnNamesJoin(result, sqlCfgModel));
204
199
  }
205
200
 
206
201
  /**
@@ -226,12 +221,12 @@ class CrudProOriginToExecuteSql extends CrudProServiceBase {
226
221
  const reqLimit = req.limit;
227
222
  const limit = Math.min(maxLimit, reqLimit);
228
223
 
229
- if (sqlCfg.sqlDdType === SqlDbType.postgres) {
224
+ if (sqlCfg.sqlDbType === SqlDbType.postgres) {
230
225
  return new SqlSegArg(' LIMIT ? OFFSET ? ', [limit, req.offset]);
231
226
  }
232
227
 
233
- if (sqlCfg.sqlDdType === SqlDbType.sqlserver) {
234
- return new SqlSegArg(' OFFSET ? ROWS FETCH NEXT ? ROWS ONLY ', [ req.offset, limit]);
228
+ if (sqlCfg.sqlDbType === SqlDbType.sqlserver) {
229
+ return new SqlSegArg(' OFFSET ? ROWS FETCH NEXT ? ROWS ONLY ', [req.offset, limit]);
235
230
  }
236
231
 
237
232
  return new SqlSegArg(' limit ?,? ', [req.offset, limit]);
@@ -250,11 +245,12 @@ class CrudProOriginToExecuteSql extends CrudProServiceBase {
250
245
  return new SqlSegArg(sql);
251
246
  }
252
247
 
253
-
254
248
  private generatePickResAs(req: RequestModel, world: string): SqlSegArg {
255
- return new SqlSegArg(' ? ', [{
249
+ return new SqlSegArg(' ? ', [
250
+ {
256
251
  ___GENERATE_GET_RES_ATTR___: world,
257
- }]);
252
+ },
253
+ ]);
258
254
  }
259
255
 
260
256
  private generateGetAttr(req: RequestModel, word: string): SqlSegArg {
@@ -1,6 +1,6 @@
1
1
  import * as _ from 'lodash';
2
2
  import { ICurdProServiceHub } from '../models/ServiceHub';
3
- import {ICrudProCfg, ILogger, IPoolConnectionClient} from '../interfaces';
3
+ import { ICrudProCfg, IExecuteUnsafeQueryCtx, ILogger, IPoolConnectionClient } from '../interfaces';
4
4
  import { SqlCfgModel } from '../models/SqlCfgModel';
5
5
  import { ExecuteContext } from '../models/ExecuteContext';
6
6
  import { MixinUtils } from '../utils/MixinUtils';
@@ -19,11 +19,6 @@ function createBuildInExecuteFuncMap() {
19
19
  };
20
20
  }
21
21
 
22
- interface ExecuteUnsafeQueryCtx {
23
- tableName: string;
24
- dbName: string;
25
- }
26
-
27
22
  const buildInExecuteFuncMap = createBuildInExecuteFuncMap();
28
23
 
29
24
  class CrudProServiceBase {
@@ -60,10 +55,11 @@ class CrudProServiceBase {
60
55
  * @param values
61
56
  * @protected
62
57
  */
63
- protected async executeUnsafeQuery(obj: ExecuteUnsafeQueryCtx, sql: string, values?: any) {
58
+ protected async executeUnsafeQuery(obj: IExecuteUnsafeQueryCtx, sql: string, values?: any) {
64
59
  const sqlCfgModel: any = {
65
- sqlTable: obj.tableName,
66
- sqlDatabase: obj.dbName,
60
+ sqlTable: obj.sqlTable,
61
+ sqlDatabase: obj.sqlDatabase,
62
+ sqlDbType: obj.sqlDbType,
67
63
  columns: [],
68
64
  columnsRelation: [],
69
65
  maxLimit: DEFAULT_MAX_LIMIT,
@@ -1,6 +1,8 @@
1
1
  import { CrudProServiceBase } from './CrudProServiceBase';
2
2
  import { SqlCfgModel } from '../models/SqlCfgModel';
3
- import { ITableMeta } from '../interfaces';
3
+ import { IExecuteUnsafeQueryCtx, ITableMeta } from '../interfaces';
4
+ import { SqlDbType } from '../models/keys';
5
+ import { pickAndConvertRowsByMix } from '../utils/sqlConvert/convertMix';
4
6
 
5
7
  class CrudProTableMetaCache {
6
8
  private cacheMap: Record<string, ITableMeta> = {};
@@ -42,18 +44,43 @@ class CrudProTableMetaService extends CrudProServiceBase {
42
44
  tableColumns: [],
43
45
  };
44
46
 
45
- const baseInfo = {
46
- tableName: sqlCfgModel.sqlTable,
47
- dbName: sqlCfgModel.sqlDatabase,
47
+ const baseInfo: IExecuteUnsafeQueryCtx = {
48
+ sqlTable: sqlCfgModel.sqlTable,
49
+ sqlDatabase: sqlCfgModel.sqlDatabase,
50
+ sqlDbType: sqlCfgModel.sqlDbType,
48
51
  };
49
52
 
50
- const [tableDescribe] = await this.executeUnsafeQuery(baseInfo, 'describe ' + sqlCfgModel.sqlTable);
51
- const tableDescribe2 = JSON.parse(JSON.stringify(tableDescribe));
52
- obj.tableColumns = tableDescribe2.map(fieldObj => {
53
- return fieldObj['Field'];
54
- });
53
+ obj.tableColumns = await this.loadTableColumnInfo(baseInfo);
54
+
55
55
  return obj;
56
56
  }
57
+
58
+ private async loadTableColumnInfo(baseInfo: IExecuteUnsafeQueryCtx): Promise<string[]> {
59
+ if (baseInfo.sqlDbType === SqlDbType.mysql) {
60
+ const queryRes = await this.executeUnsafeQuery(baseInfo, 'describe ' + baseInfo.sqlTable);
61
+ const tableDescribe = pickAndConvertRowsByMix(queryRes, baseInfo.sqlDbType);
62
+ const tableDescribe2 = JSON.parse(JSON.stringify(tableDescribe));
63
+ return tableDescribe2.map(fieldObj => {
64
+ return fieldObj['Field'];
65
+ });
66
+ } else if (baseInfo.sqlDbType === SqlDbType.postgres) {
67
+ const schemaname = 'public';
68
+ const columnArraySql = `
69
+ SELECT
70
+ *
71
+ FROM information_schema.columns
72
+ WHERE table_schema = '${schemaname}' and table_name = '${baseInfo.sqlTable}'
73
+ ORDER BY ordinal_position;
74
+ `.trim();
75
+ const queryRes = await this.executeUnsafeQuery(baseInfo, columnArraySql);
76
+ const tableDescribe = pickAndConvertRowsByMix(queryRes, baseInfo.sqlDbType);
77
+ return tableDescribe.map(fieldObj => {
78
+ return fieldObj['column_name'];
79
+ });
80
+ }
81
+
82
+ throw new Error('暂不支持的数据库类型:' + baseInfo.sqlDbType);
83
+ }
57
84
  }
58
85
 
59
86
  export { CrudProTableMetaService };
@@ -1,19 +1,45 @@
1
- import { SqlDbType } from '../models/keys'
1
+ import { SqlDbType } from '../models/keys';
2
2
 
3
3
  interface IDbTypeAndName {
4
- dbType: SqlDbType,
4
+ dbType: SqlDbType;
5
5
  dbName: string;
6
6
  }
7
7
 
8
- const SPLIT_CONST = "_________"
8
+ const SPLIT_CONST = '_________';
9
+
10
+ const PREFIX_MYSQL = `${SqlDbType.mysql}${SPLIT_CONST}`;
11
+ const PREFIX_POSTGRES = `${SqlDbType.postgres}${SPLIT_CONST}`;
12
+ const PREFIX_SQLSERVER = `${SqlDbType.sqlserver}${SPLIT_CONST}`;
9
13
 
10
14
  function parseDatabaseName(databaseName: string): IDbTypeAndName {
11
15
  const dbNameArr = databaseName.split(SPLIT_CONST);
16
+
17
+ if (databaseName.startsWith(PREFIX_MYSQL)) {
18
+ return {
19
+ dbType: SqlDbType.mysql,
20
+ dbName: dbNameArr[1],
21
+ };
22
+ }
23
+
24
+ if (databaseName.startsWith(PREFIX_POSTGRES)) {
25
+ return {
26
+ dbType: SqlDbType.postgres,
27
+ dbName: dbNameArr[1],
28
+ };
29
+ }
30
+
31
+ if (databaseName.startsWith(PREFIX_SQLSERVER)) {
32
+ return {
33
+ dbType: SqlDbType.sqlserver,
34
+ dbName: dbNameArr[1],
35
+ };
36
+ }
37
+
12
38
  if (dbNameArr.length === 1) {
13
39
  return {
14
40
  dbType: SqlDbType.mysql, // 默认
15
- dbName: dbNameArr[0]
16
- }
41
+ dbName: dbNameArr[0],
42
+ };
17
43
  }
18
44
 
19
45
  if (dbNameArr.length > 1) {
@@ -21,20 +47,14 @@ function parseDatabaseName(databaseName: string): IDbTypeAndName {
21
47
  const dbType = dbType0 as any;
22
48
  return {
23
49
  dbType,
24
- dbName
25
- }
50
+ dbName,
51
+ };
26
52
  }
27
53
  return null;
28
54
  }
29
55
 
30
-
31
56
  function toDatabaseNameStr(dbType: SqlDbType, dbName: string): string {
32
- return [dbType, dbName].join(SPLIT_CONST)
57
+ return [dbType, dbName].join(SPLIT_CONST);
33
58
  }
34
59
 
35
-
36
- export {
37
- SPLIT_CONST,
38
- parseDatabaseName,
39
- toDatabaseNameStr
40
- }
60
+ export { SPLIT_CONST, parseDatabaseName, toDatabaseNameStr };
@@ -9,10 +9,10 @@ const DateTimeUtils = {
9
9
  getCurrentTimeStampSecond(): number {
10
10
  return Math.floor(Date.now() / 1000);
11
11
  },
12
- getCurrentDateFormat(format:string): string {
12
+ getCurrentDateFormat(format: string): string {
13
13
  return moment(Date.now()).format(format);
14
14
  },
15
- getYesterdayDateFormat(format:string): string {
15
+ getYesterdayDateFormat(format: string): string {
16
16
  return moment(Date.now()).add(-1, 'day').format(format);
17
17
  },
18
18
  };
@@ -50,7 +50,7 @@ const MixinUtils = {
50
50
  },
51
51
 
52
52
  startsWith(str1: string, str2: string): boolean {
53
- if (typeof str1 === "string" && typeof str2 === "string") {
53
+ if (typeof str1 === 'string' && typeof str2 === 'string') {
54
54
  return str1.startsWith(str2);
55
55
  }
56
56
  return false;
@@ -143,9 +143,8 @@ function validateByCfgString(validateCfg: KeysOfValidators | string, itemValue:
143
143
  return;
144
144
  }
145
145
 
146
-
147
146
  // 必填
148
- if ("required" === validateCfg) {
147
+ if ('required' === validateCfg) {
149
148
  if (isEmpty(itemValue)) {
150
149
  throw new CommonException(Exceptions.VALIDATE_ERR, "'参数校验错误,字段 " + errPath + ' 不满足校验配置:' + validateCfg);
151
150
  }
@@ -157,7 +156,6 @@ function validateByCfgString(validateCfg: KeysOfValidators | string, itemValue:
157
156
  return;
158
157
  }
159
158
 
160
-
161
159
  // 校验失败
162
160
  if (!validateByCfgStringInner(validateCfg, itemValue)) {
163
161
  throw new CommonException(Exceptions.VALIDATE_ERR, "'参数校验错误,字段 " + errPath + ' 不满足校验配置:' + validateCfg);
@@ -1,6 +1,6 @@
1
1
  import { createPool } from 'mysql2/promise';
2
2
  import { IConnectionPool } from '../../interfaces';
3
- import {SqlDbType} from "../../models/keys";
3
+ import { SqlDbType } from '../../models/keys';
4
4
 
5
5
  const POOL_CACHE_MAP: Record<string, IConnectionPool> = {};
6
6
 
@@ -1,6 +1,6 @@
1
- import {Pool} from 'pg';
2
- import {IConnectionPool} from '../../interfaces';
3
- import {SqlDbType} from "../../models/keys";
1
+ import { Pool } from 'pg';
2
+ import { IConnectionPool } from '../../interfaces';
3
+ import { SqlDbType } from '../../models/keys';
4
4
 
5
5
  const POOL_CACHE_MAP: Record<string, IConnectionPool> = {};
6
6
 
@@ -1,6 +1,6 @@
1
- import {ConnectionPool} from 'mssql';
2
- import {IConnectionPool} from '../../interfaces';
3
- import {SqlDbType} from "../../models/keys";
1
+ import { ConnectionPool } from 'mssql';
2
+ import { IConnectionPool } from '../../interfaces';
3
+ import { SqlDbType } from '../../models/keys';
4
4
 
5
5
  const POOL_CACHE_MAP: Record<string, IConnectionPool> = {};
6
6
 
@@ -3,10 +3,10 @@ import {SqlDbType} from "../../models/keys";
3
3
 
4
4
 
5
5
  function toSqlColumnName(columnName: string, sqlCfgModel: SqlCfgModel): string {
6
- if (sqlCfgModel.sqlDdType === SqlDbType.postgres) {
6
+ if (sqlCfgModel.sqlDbType === SqlDbType.postgres) {
7
7
  return '"' + columnName + '"';
8
8
  }
9
- if (sqlCfgModel.sqlDdType === SqlDbType.sqlserver) {
9
+ if (sqlCfgModel.sqlDbType === SqlDbType.sqlserver) {
10
10
  return '[' + columnName + ']';
11
11
  }
12
12
  return '`' + columnName + '`';
@@ -0,0 +1,26 @@
1
+ import { SqlDbType } from "../../models/keys";
2
+ import { pickAndConvertPgRows } from "./convertPgType";
3
+ import * as _ from 'lodash'
4
+
5
+ function pickAndConvertRowsByMix(connectionQueryRes: any, sqlDbType: SqlDbType): any[] | any {
6
+ if (!connectionQueryRes) {
7
+ throw new Error('[pickAndConvertRowsByMix] error, connectionQueryRes is null ')
8
+ }
9
+
10
+ if (sqlDbType === SqlDbType.postgres) {
11
+ return pickAndConvertPgRows(connectionQueryRes);
12
+ }
13
+
14
+ if (sqlDbType === SqlDbType.mysql) {
15
+ return connectionQueryRes[0];
16
+ }
17
+
18
+ if (sqlDbType === SqlDbType.sqlserver) {
19
+ return _.get(connectionQueryRes, 'recordsets[0]') || [];
20
+ }
21
+ throw new Error('[pickAndConvertRowsByMix] error sqlDbType, sqlDbType = ' + sqlDbType)
22
+ }
23
+
24
+ export {
25
+ pickAndConvertRowsByMix
26
+ }
@@ -0,0 +1,78 @@
1
+ import { SqlDbType } from '../crud-pro/models/keys';
2
+
3
+ interface IGlobalStaticConfig {
4
+ /**
5
+ * CrudStd: 业务系统自定义的修改cfgModel
6
+ * @param reqJson
7
+ * @param cfgModel
8
+ * @param appInfo
9
+ * @param ctx
10
+ */
11
+ bizUpdateCfgModelForCrudStd(reqJson: any, cfgModel: any, appInfo: any, ctx: any): Promise<any>;
12
+
13
+ /**
14
+ * CrudMtd: 业务系统自定义的修改cfgModel
15
+ * @param reqJson
16
+ * @param cfgModel
17
+ * @param methodInfo
18
+ * @param ctx
19
+ */
20
+ bizUpdateCfgModelForCrudMtd(reqJson: any, cfgModel: any, methodInfo: any, ctx: any): Promise<any>;
21
+
22
+ /**
23
+ * CrudPro: 业务系统自定义的修改cfgModel。这是最底层的!!全局的!!全局的!!全局的!!!
24
+ * @param reqJson
25
+ * @param cfgModel
26
+ */
27
+ bizUpdateCfgModelForCrudPro(reqJson: any, cfgModel: any): Promise<any>;
28
+
29
+ /**
30
+ * 生成用户的账号ID,业务系统可以生成类似工号的ID
31
+ * @param userSubmitData
32
+ */
33
+ generateUserAccountId(userSubmitData: any): Promise<string>;
34
+
35
+ /**
36
+ * 将业务系统表中的userId映射为fatcms的UserAccountId
37
+ * @param bizTableUserId 业余系统表中的UserId
38
+ */
39
+ toFatcmsUserAccountId(bizTableUserId: any): string;
40
+
41
+ SystemDbName: string;
42
+ SystemDbType: SqlDbType;
43
+ }
44
+
45
+ const noop = () => {
46
+ return Promise.resolve();
47
+ };
48
+
49
+ class GlobalStaticConfig {
50
+ private configObject: IGlobalStaticConfig;
51
+ constructor() {
52
+ this.configObject = {
53
+ bizUpdateCfgModelForCrudStd: noop,
54
+ bizUpdateCfgModelForCrudMtd: noop,
55
+ bizUpdateCfgModelForCrudPro: noop,
56
+ generateUserAccountId: null,
57
+ toFatcmsUserAccountId: (bizTableUserId: any) => {
58
+ return bizTableUserId;
59
+ },
60
+ SystemDbName: 'fatcms',
61
+ SystemDbType: SqlDbType.mysql,
62
+ };
63
+ }
64
+ public getConfig(): IGlobalStaticConfig {
65
+ return this.configObject as IGlobalStaticConfig;
66
+ }
67
+
68
+ public setConfig(configObject: any) {
69
+ if (!configObject || typeof configObject !== 'object') {
70
+ throw new Error('参数configObject不能为空');
71
+ }
72
+ Object.assign(this.configObject, configObject);
73
+ }
74
+ }
75
+
76
+ const GLOBAL_STATIC_CONFIG = new GlobalStaticConfig();
77
+
78
+ export { GLOBAL_STATIC_CONFIG };
@@ -15,7 +15,7 @@ function hashUtf8Hex(data: string): string {
15
15
  return hash.digest('hex');
16
16
  }
17
17
 
18
- function readSeed1() {
18
+ function readSeed1() {
19
19
  // 这个文件肯定存在
20
20
  const t = path.join(__dirname, '../../config/seed/aeskey.txt');
21
21
  return fs.readFileSync(t, 'utf-8');
@@ -29,8 +29,7 @@ function readSeed2(): string {
29
29
  return fs.readFileSync(filePath, 'utf-8');
30
30
  }
31
31
 
32
-
33
- function createAes128BySeedContent(seedContent:string){
32
+ function createAes128BySeedContent(seedContent: string) {
34
33
  const hash1 = hashUtf8Hex(seedContent.trim());
35
34
  const key = md5(hash1);
36
35
  const iv = md5(key + hash1);
@@ -46,7 +45,6 @@ function createAes128BySeedFile() {
46
45
  return createAes128BySeedContent(seed1);
47
46
  }
48
47
 
49
-
50
48
  const privateAES = createAes128BySeedFile();
51
49
 
52
50
  export { privateAES };
@@ -0,0 +1,61 @@
1
+ function errorToString(error: any): string {
2
+ // 处理非错误对象的情况
3
+ if (typeof error === 'undefined') {
4
+ return 'Error: undefined was thrown';
5
+ }
6
+
7
+ if (error === null) {
8
+ return 'Error: null was thrown';
9
+ }
10
+
11
+ // 处理原始值类型
12
+ const primitiveTypes = ['string', 'number', 'boolean', 'symbol'];
13
+ if (primitiveTypes.includes(typeof error)) {
14
+ return `Error: A primitive value was thrown\nValue: ${String(error)}`;
15
+ }
16
+
17
+ // 处理 Error 对象
18
+ if (error instanceof Error) {
19
+ const errorDetails = [];
20
+ errorDetails.push(`Error: ${error.name || 'Error'}`);
21
+ errorDetails.push(`Message: ${error.message || 'No error message'}`);
22
+
23
+ if (error.stack) {
24
+ errorDetails.push('Stack Trace:');
25
+ errorDetails.push(error.stack);
26
+ }
27
+
28
+ const extraProperties = ['code', 'fileName', 'lineNumber', 'columnNumber'];
29
+ extraProperties.forEach(prop => {
30
+ if (error[prop] !== undefined) {
31
+ errorDetails.push(`${prop}: ${error[prop]}`);
32
+ }
33
+ });
34
+
35
+ const customProps = Object.keys(error).filter(key => !['name', 'message', 'stack', ...extraProperties].includes(key));
36
+
37
+ if (customProps.length > 0) {
38
+ errorDetails.push('Custom Properties:');
39
+ customProps.forEach(prop => {
40
+ try {
41
+ const value = JSON.stringify(error[prop], null, 2) || String(error[prop]);
42
+ errorDetails.push(` ${prop}: ${value}`);
43
+ } catch (e) {
44
+ errorDetails.push(` ${prop}: [Object cannot be serialized]`);
45
+ }
46
+ });
47
+ }
48
+
49
+ return errorDetails.join('\n');
50
+ }
51
+
52
+ // 处理普通对象
53
+ try {
54
+ const objectDetails = JSON.stringify(error, null, 2);
55
+ return `Error: A plain object was thrown\nObject: ${objectDetails}`;
56
+ } catch (e) {
57
+ return `Error: An object was thrown but could not be serialized\nType: ${error.constructor?.name || 'Unknown'}`;
58
+ }
59
+ }
60
+
61
+ export { errorToString };
@@ -1,9 +1,9 @@
1
1
  import { Context } from '@midwayjs/koa';
2
2
  import * as _ from 'lodash';
3
- import {privateAES} from "./crypto-utils";
4
- import {CommonException} from "../crud-pro/exceptions";
3
+ import { privateAES } from './crypto-utils';
4
+ import { CommonException } from '../crud-pro/exceptions';
5
5
 
6
- function isEnableByHeaderKey(ctx: Context, configName: string){
6
+ function isEnableByHeaderKey(ctx: Context, configName: string) {
7
7
  const fatcmsDebug = ctx.app.getConfig(configName);
8
8
  const headerKey = _.get(fatcmsDebug, 'headerKey');
9
9
  const headerSecret = _.get(fatcmsDebug, 'headerSecret');
@@ -14,7 +14,6 @@ function isEnableByHeaderKey(ctx: Context, configName: string){
14
14
  return headers[headerKey] === headerSecret;
15
15
  }
16
16
 
17
-
18
17
  /**
19
18
  * 是否开启调试能力
20
19
  * @param ctx
@@ -23,7 +22,6 @@ export function isEnableDebug(ctx: Context): boolean {
23
22
  return isEnableByHeaderKey(ctx, 'fatcmsDebug');
24
23
  }
25
24
 
26
-
27
25
  /**
28
26
  * 是否开启SA账号。只有账号密码没有用,必须通过ModHeader插件设置如下字段
29
27
  * @param ctx
@@ -32,7 +30,6 @@ export function isEnableSuperAdmin(ctx: Context): boolean {
32
30
  return isEnableByHeaderKey(ctx, 'fatcmsSAEnable');
33
31
  }
34
32
 
35
-
36
33
  export function isLocalEnv(ctx: Context): boolean {
37
34
  // 系统内部调用。如定时任务,没有request对象。
38
35
  if (!ctx.request) {
@@ -42,8 +39,6 @@ export function isLocalEnv(ctx: Context): boolean {
42
39
  return host.startsWith('127.0.0.1') || host.startsWith('localhost:');
43
40
  }
44
41
 
45
-
46
-
47
42
  /**
48
43
  * 获取调试时专用的站点code
49
44
  * @param ctx
@@ -62,32 +57,26 @@ export function getDebugProxyTarget(ctx: Context): string {
62
57
  return headers['fatcmsdebugproxytarget'];
63
58
  }
64
59
 
65
-
66
- export function getCsrfToken(ctx: Context): string{
60
+ export function getCsrfToken(ctx: Context): string {
67
61
  const headers = _.get(ctx, 'request.headers') || {};
68
62
  return headers['fatcmscsrftoken'];
69
63
  }
70
64
 
71
-
72
65
  /**
73
66
  * 扩展的源码应用:本地开发调试时加载本地的js脚本
74
67
  * @param ctx
75
68
  */
76
- export function getExtLocalLoaderPort(ctx: Context) : string {
69
+ export function getExtLocalLoaderPort(ctx: Context): string {
77
70
  const headers = _.get(ctx, 'request.headers') || {};
78
71
  return headers['fatcmsextlocalloaderport'];
79
72
  }
80
73
 
81
-
82
-
83
74
  export async function isCsrfTokenValid(ctx: Context): Promise<boolean> {
84
-
85
75
  // 本地开发,不需要校验
86
76
  if (isLocalEnv(ctx) || isEnableDebug(ctx)) {
87
77
  return true;
88
78
  }
89
79
 
90
-
91
80
  const fatcmscsrftoken = getCsrfToken(ctx);
92
81
  if (!fatcmscsrftoken) {
93
82
  return false;
@@ -96,20 +85,19 @@ export async function isCsrfTokenValid(ctx: Context): Promise<boolean> {
96
85
  const depryptToken = await privateAES.time_decrypt_base64_utf8(fatcmscsrftoken);
97
86
  if (depryptToken) {
98
87
  const num = Number(depryptToken);
99
- if (num && ((num + 6 * 3600 * 1000) > Date.now())) {
88
+ if (num && num + 6 * 3600 * 1000 > Date.now()) {
100
89
  return true;
101
90
  }
102
91
  }
103
92
  } catch (e) {
104
- console.info('isCsrfTokenValid验证失败')
93
+ console.info('isCsrfTokenValid验证失败');
105
94
  }
106
95
  return false;
107
96
  }
108
97
 
109
-
110
98
  export async function assertCsrfToken(ctx: Context) {
111
- const isOK = await isCsrfTokenValid(ctx);
99
+ const isOK = await isCsrfTokenValid(ctx);
112
100
  if (!isOK) {
113
- throw new CommonException("ASSERT_CSRF_TOKEN_ERROR", "CSRF_TOKEN 验证失败")
101
+ throw new CommonException('ASSERT_CSRF_TOKEN_ERROR', 'CSRF_TOKEN 验证失败');
114
102
  }
115
103
  }