@ruiapp/rapid-core 0.1.62 → 0.1.65

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 (164) hide show
  1. package/dist/dataAccess/dataAccessTypes.d.ts +7 -7
  2. package/dist/dataAccess/entityManager.d.ts +15 -1
  3. package/dist/helpers/entityHelpers.d.ts +3 -1
  4. package/dist/{dataAccess → helpers}/metaHelper.d.ts +3 -0
  5. package/dist/index.js +225 -69
  6. package/dist/plugins/setting/SettingPlugin.d.ts +21 -0
  7. package/dist/plugins/setting/SettingPluginTypes.d.ts +31 -0
  8. package/dist/plugins/setting/SettingService.d.ts +10 -0
  9. package/dist/plugins/setting/actionHandlers/getSystemSettingValues.d.ts +7 -0
  10. package/dist/plugins/setting/actionHandlers/index.d.ts +3 -0
  11. package/dist/plugins/setting/models/SystemSettingGroupSetting.d.ts +3 -0
  12. package/dist/plugins/setting/models/SystemSettingItem.d.ts +3 -0
  13. package/dist/plugins/setting/models/SystemSettingItemSetting.d.ts +3 -0
  14. package/dist/plugins/setting/models/UserSettingGroupSetting.d.ts +3 -0
  15. package/dist/plugins/setting/models/UserSettingItem.d.ts +3 -0
  16. package/dist/plugins/setting/models/UserSettingItemSetting.d.ts +3 -0
  17. package/dist/plugins/setting/models/index.d.ts +2 -0
  18. package/dist/plugins/setting/routes/getSystemSettingValues.d.ts +12 -0
  19. package/dist/plugins/setting/routes/index.d.ts +12 -0
  20. package/dist/queryBuilder/queryBuilder.d.ts +2 -2
  21. package/dist/types.d.ts +12 -1
  22. package/package.json +1 -1
  23. package/rollup.config.js +16 -16
  24. package/src/bootstrapApplicationConfig.ts +552 -545
  25. package/src/core/actionHandler.ts +22 -22
  26. package/src/core/eventManager.ts +20 -20
  27. package/src/core/facility.ts +7 -7
  28. package/src/core/http/formDataParser.ts +89 -89
  29. package/src/core/http-types.ts +4 -4
  30. package/src/core/pluginManager.ts +175 -175
  31. package/src/core/providers/runtimeProvider.ts +5 -5
  32. package/src/core/request.ts +86 -86
  33. package/src/core/response.ts +76 -76
  34. package/src/core/routeContext.ts +43 -43
  35. package/src/core/routesBuilder.ts +88 -88
  36. package/src/core/server.ts +16 -1
  37. package/src/dataAccess/dataAccessTypes.ts +109 -86
  38. package/src/dataAccess/dataAccessor.ts +137 -137
  39. package/src/dataAccess/entityManager.ts +1298 -1187
  40. package/src/dataAccess/entityMapper.ts +4 -5
  41. package/src/dataAccess/propertyMapper.ts +27 -27
  42. package/src/deno-std/assert/assert.ts +9 -9
  43. package/src/deno-std/assert/assertion_error.ts +7 -7
  44. package/src/deno-std/datetime/to_imf.ts +32 -32
  45. package/src/deno-std/encoding/base64.ts +141 -141
  46. package/src/deno-std/http/cookie.ts +8 -1
  47. package/src/facilities/log/LogFacility.ts +35 -35
  48. package/src/helpers/entityHelpers.ts +76 -21
  49. package/src/{dataAccess → helpers}/filterHelper.ts +3 -1
  50. package/src/helpers/inputHelper.ts +11 -11
  51. package/src/{dataAccess → helpers}/metaHelper.ts +15 -6
  52. package/src/helpers/runCollectionEntityActionHandler.ts +6 -1
  53. package/src/index.ts +41 -41
  54. package/src/plugins/auth/AuthPlugin.ts +7 -1
  55. package/src/plugins/auth/actionHandlers/changePassword.ts +54 -54
  56. package/src/plugins/auth/actionHandlers/createSession.ts +63 -63
  57. package/src/plugins/auth/actionHandlers/deleteSession.ts +18 -18
  58. package/src/plugins/auth/actionHandlers/getMyProfile.ts +35 -35
  59. package/src/plugins/auth/actionHandlers/index.ts +8 -8
  60. package/src/plugins/auth/actionHandlers/resetPassword.ts +38 -38
  61. package/src/plugins/auth/models/AccessToken.ts +56 -56
  62. package/src/plugins/auth/models/index.ts +3 -3
  63. package/src/plugins/auth/routes/changePassword.ts +15 -15
  64. package/src/plugins/auth/routes/getMyProfile.ts +15 -15
  65. package/src/plugins/auth/routes/index.ts +7 -7
  66. package/src/plugins/auth/routes/resetPassword.ts +15 -15
  67. package/src/plugins/auth/routes/signin.ts +15 -15
  68. package/src/plugins/auth/routes/signout.ts +15 -15
  69. package/src/plugins/cronJob/CronJobPlugin.ts +7 -1
  70. package/src/plugins/cronJob/CronJobPluginTypes.ts +49 -49
  71. package/src/plugins/cronJob/actionHandlers/index.ts +4 -4
  72. package/src/plugins/cronJob/actionHandlers/runCronJob.ts +29 -29
  73. package/src/plugins/cronJob/routes/index.ts +3 -3
  74. package/src/plugins/cronJob/routes/runCronJob.ts +15 -15
  75. package/src/plugins/dataManage/DataManagePlugin.ts +7 -1
  76. package/src/plugins/dataManage/actionHandlers/addEntityRelations.ts +20 -20
  77. package/src/plugins/dataManage/actionHandlers/countCollectionEntities.ts +15 -15
  78. package/src/plugins/dataManage/actionHandlers/createCollectionEntitiesBatch.ts +42 -42
  79. package/src/plugins/dataManage/actionHandlers/createCollectionEntity.ts +24 -24
  80. package/src/plugins/dataManage/actionHandlers/deleteCollectionEntityById.ts +7 -4
  81. package/src/plugins/dataManage/actionHandlers/findCollectionEntities.ts +26 -26
  82. package/src/plugins/dataManage/actionHandlers/findCollectionEntityById.ts +21 -21
  83. package/src/plugins/dataManage/actionHandlers/queryDatabase.ts +22 -22
  84. package/src/plugins/dataManage/actionHandlers/removeEntityRelations.ts +20 -20
  85. package/src/plugins/dataManage/actionHandlers/updateCollectionEntityById.ts +35 -35
  86. package/src/plugins/entityAccessControl/EntityAccessControlPlugin.ts +146 -146
  87. package/src/plugins/fileManage/FileManagePlugin.ts +7 -1
  88. package/src/plugins/fileManage/actionHandlers/downloadDocument.ts +36 -36
  89. package/src/plugins/fileManage/actionHandlers/downloadFile.ts +28 -28
  90. package/src/plugins/fileManage/actionHandlers/uploadFile.ts +33 -33
  91. package/src/plugins/fileManage/routes/downloadDocument.ts +15 -15
  92. package/src/plugins/fileManage/routes/downloadFile.ts +15 -15
  93. package/src/plugins/fileManage/routes/index.ts +5 -5
  94. package/src/plugins/fileManage/routes/uploadFile.ts +15 -15
  95. package/src/plugins/metaManage/MetaManagePlugin.ts +37 -9
  96. package/src/plugins/metaManage/actionHandlers/getMetaModelDetail.ts +10 -10
  97. package/src/plugins/metaManage/actionHandlers/listMetaModels.ts +9 -9
  98. package/src/plugins/metaManage/actionHandlers/listMetaRoutes.ts +9 -9
  99. package/src/plugins/routeManage/RouteManagePlugin.ts +7 -1
  100. package/src/plugins/routeManage/actionHandlers/httpProxy.ts +13 -13
  101. package/src/plugins/sequence/SequencePlugin.ts +8 -2
  102. package/src/plugins/sequence/SequencePluginTypes.ts +9 -1
  103. package/src/plugins/sequence/SequenceService.ts +81 -81
  104. package/src/plugins/sequence/actionHandlers/generateSn.ts +32 -32
  105. package/src/plugins/sequence/actionHandlers/index.ts +4 -4
  106. package/src/plugins/sequence/models/SequenceAutoIncrementRecord.ts +49 -49
  107. package/src/plugins/sequence/models/SequenceRule.ts +42 -42
  108. package/src/plugins/sequence/models/index.ts +4 -4
  109. package/src/plugins/sequence/routes/generateSn.ts +15 -15
  110. package/src/plugins/sequence/routes/index.ts +3 -3
  111. package/src/plugins/sequence/segment-utility.ts +11 -11
  112. package/src/plugins/sequence/segments/autoIncrement.ts +6 -1
  113. package/src/plugins/sequence/segments/dayOfMonth.ts +6 -1
  114. package/src/plugins/sequence/segments/index.ts +9 -9
  115. package/src/plugins/sequence/segments/literal.ts +6 -1
  116. package/src/plugins/sequence/segments/month.ts +6 -1
  117. package/src/plugins/sequence/segments/parameter.ts +6 -1
  118. package/src/plugins/sequence/segments/year.ts +6 -1
  119. package/src/plugins/serverOperation/ServerOperationPlugin.ts +91 -91
  120. package/src/plugins/serverOperation/ServerOperationPluginTypes.ts +15 -15
  121. package/src/plugins/serverOperation/actionHandlers/index.ts +4 -4
  122. package/src/plugins/serverOperation/actionHandlers/runServerOperation.ts +15 -15
  123. package/src/plugins/setting/SettingPlugin.ts +71 -0
  124. package/src/plugins/setting/SettingPluginTypes.ts +35 -0
  125. package/src/plugins/setting/SettingService.ts +17 -0
  126. package/src/plugins/setting/actionHandlers/getSystemSettingValues.ts +30 -0
  127. package/src/plugins/setting/actionHandlers/index.ts +4 -0
  128. package/src/plugins/setting/models/SystemSettingGroupSetting.ts +56 -0
  129. package/src/plugins/setting/models/SystemSettingItem.ts +42 -0
  130. package/src/plugins/setting/models/SystemSettingItemSetting.ts +72 -0
  131. package/src/plugins/setting/models/UserSettingGroupSetting.ts +56 -0
  132. package/src/plugins/setting/models/UserSettingItem.ts +49 -0
  133. package/src/plugins/setting/models/UserSettingItemSetting.ts +72 -0
  134. package/src/plugins/setting/models/index.ts +8 -0
  135. package/src/plugins/setting/routes/getSystemSettingValues.ts +15 -0
  136. package/src/plugins/setting/routes/index.ts +3 -0
  137. package/src/plugins/stateMachine/StateMachinePlugin.ts +8 -2
  138. package/src/plugins/stateMachine/StateMachinePluginTypes.ts +9 -1
  139. package/src/plugins/stateMachine/actionHandlers/index.ts +4 -4
  140. package/src/plugins/stateMachine/actionHandlers/sendStateMachineEvent.ts +51 -51
  141. package/src/plugins/stateMachine/models/StateMachine.ts +42 -42
  142. package/src/plugins/stateMachine/models/index.ts +3 -3
  143. package/src/plugins/stateMachine/routes/index.ts +3 -3
  144. package/src/plugins/stateMachine/routes/sendStateMachineEvent.ts +15 -15
  145. package/src/plugins/stateMachine/stateMachineHelper.ts +36 -36
  146. package/src/plugins/webhooks/WebhooksPlugin.ts +13 -2
  147. package/src/plugins/webhooks/pluginConfig.ts +74 -74
  148. package/src/polyfill.ts +5 -5
  149. package/src/proxy/mod.ts +38 -38
  150. package/src/proxy/types.ts +21 -21
  151. package/src/queryBuilder/index.ts +1 -1
  152. package/src/queryBuilder/queryBuilder.ts +473 -473
  153. package/src/server.ts +23 -3
  154. package/src/types.ts +593 -535
  155. package/src/utilities/accessControlUtility.ts +33 -33
  156. package/src/utilities/errorUtility.ts +4 -6
  157. package/src/utilities/fsUtility.ts +61 -61
  158. package/src/utilities/httpUtility.ts +19 -19
  159. package/src/utilities/jwtUtility.ts +26 -26
  160. package/src/utilities/typeUtility.ts +11 -11
  161. package/tsconfig.json +19 -19
  162. package/dist/utilities/rapidUtility.d.ts +0 -2
  163. package/src/utilities/rapidUtility.ts +0 -5
  164. /package/dist/{dataAccess → helpers}/filterHelper.d.ts +0 -0
@@ -1,11 +1,11 @@
1
- import { isArray, mergeWith } from "lodash";
2
-
3
- export function mergeInput(defaultInput: any, input: any, fixedInput: any) {
4
- return mergeWith({}, defaultInput, input, fixedInput, doNotMergeArray);
5
- }
6
-
7
- function doNotMergeArray(objValue: any, srcValue: any) {
8
- if (isArray(srcValue)) {
9
- return srcValue;
10
- }
11
- }
1
+ import { isArray, mergeWith } from "lodash";
2
+
3
+ export function mergeInput(defaultInput: any, input: any, fixedInput: any) {
4
+ return mergeWith({}, defaultInput, input, fixedInput, doNotMergeArray);
5
+ }
6
+
7
+ function doNotMergeArray(objValue: any, srcValue: any) {
8
+ if (isArray(srcValue)) {
9
+ return srcValue;
10
+ }
11
+ }
@@ -2,6 +2,18 @@ import { cloneDeep } from "lodash";
2
2
  import { IRpdServer } from "~/core/server";
3
3
  import { RpdDataModel, RpdDataModelProperty } from "~/types";
4
4
 
5
+ export function isRelationProperty(property: RpdDataModelProperty) {
6
+ return property.type === "relation" || property.type === "relation[]";
7
+ }
8
+
9
+ export function isOneRelationProperty(property: RpdDataModelProperty) {
10
+ return isRelationProperty(property) && property.relation === "one";
11
+ }
12
+
13
+ export function isManyRelationProperty(property: RpdDataModelProperty) {
14
+ return isRelationProperty(property) && property.relation === "many";
15
+ }
16
+
5
17
  export function getEntityProperties(server: IRpdServer, model: RpdDataModel) {
6
18
  return model.properties;
7
19
  }
@@ -20,13 +32,10 @@ export function getEntityPropertiesIncludingBase(server: IRpdServer, model: RpdD
20
32
  property = cloneDeep(property);
21
33
  property.isBaseProperty = true;
22
34
  return property;
23
- })
35
+ });
24
36
  }
25
37
 
26
- return [
27
- ...baseProperties,
28
- ...model.properties,
29
- ]
38
+ return [...baseProperties, ...model.properties];
30
39
  }
31
40
 
32
41
  export function getEntityPropertyByCode(server: IRpdServer, model: RpdDataModel, propertyCode: string) {
@@ -51,4 +60,4 @@ export function getEntityProperty(server: IRpdServer, model: RpdDataModel, predi
51
60
  }
52
61
 
53
62
  return property;
54
- }
63
+ }
@@ -5,7 +5,12 @@ import EntityManager from "~/dataAccess/entityManager";
5
5
 
6
6
  type EntityActionHandler = (entityManager: EntityManager, input: any) => Promise<any>;
7
7
 
8
- export default async function runCollectionEntityActionHandler(ctx: ActionHandlerContext, options: RunEntityActionHandlerOptions, code: string, handleEntityAction: EntityActionHandler) {
8
+ export default async function runCollectionEntityActionHandler(
9
+ ctx: ActionHandlerContext,
10
+ options: RunEntityActionHandlerOptions,
11
+ code: string,
12
+ handleEntityAction: EntityActionHandler,
13
+ ) {
9
14
  const { logger, server, input } = ctx;
10
15
 
11
16
  const { defaultInput, fixedInput } = options;
package/src/index.ts CHANGED
@@ -1,41 +1,41 @@
1
- import { fixBigIntJSONSerialize } from "./polyfill";
2
- fixBigIntJSONSerialize();
3
-
4
- export * from "./types";
5
- export * from "./server";
6
-
7
- export * from "./core/request";
8
- export * from "./core/routeContext";
9
- export * from "./core/server";
10
- export * from "./core/http-types";
11
- export * from "./core/actionHandler";
12
-
13
- export * from "./utilities/jwtUtility";
14
-
15
- export * as bootstrapApplicationConfig from "./bootstrapApplicationConfig";
16
-
17
- export { default as MetaManagePlugin } from "./plugins/metaManage/MetaManagePlugin";
18
-
19
- export { default as DataManagePlugin } from "./plugins/dataManage/DataManagePlugin";
20
-
21
- export { default as RouteManagePlugin } from "./plugins/routeManage/RouteManagePlugin";
22
-
23
- export { default as SequencePlugin } from "./plugins/sequence/SequencePlugin";
24
- export * from "./plugins/sequence/SequencePluginTypes";
25
-
26
- export { default as WebhooksPlugin } from "./plugins/webhooks/WebhooksPlugin";
27
-
28
- export { default as AuthPlugin } from "./plugins/auth/AuthPlugin";
29
-
30
- export { default as FileManagePlugin } from "./plugins/fileManage/FileManagePlugin";
31
-
32
- export { default as ServerOperationPlugin } from "./plugins/serverOperation/ServerOperationPlugin";
33
- export * from "./plugins/serverOperation/ServerOperationPluginTypes";
34
-
35
- export { default as CronJobPlugin } from "./plugins/cronJob/CronJobPlugin";
36
- export * from "./plugins/cronJob/CronJobPluginTypes";
37
-
38
- export { default as StateMachinePlugin } from "./plugins/stateMachine/StateMachinePlugin";
39
- export * from "./plugins/stateMachine/StateMachinePluginTypes";
40
-
41
- export { default as EntityAccessControlPlugin } from "./plugins/entityAccessControl/EntityAccessControlPlugin";
1
+ import { fixBigIntJSONSerialize } from "./polyfill";
2
+ fixBigIntJSONSerialize();
3
+
4
+ export * from "./types";
5
+ export * from "./server";
6
+
7
+ export * from "./core/request";
8
+ export * from "./core/routeContext";
9
+ export * from "./core/server";
10
+ export * from "./core/http-types";
11
+ export * from "./core/actionHandler";
12
+
13
+ export * from "./utilities/jwtUtility";
14
+
15
+ export * as bootstrapApplicationConfig from "./bootstrapApplicationConfig";
16
+
17
+ export { default as MetaManagePlugin } from "./plugins/metaManage/MetaManagePlugin";
18
+
19
+ export { default as DataManagePlugin } from "./plugins/dataManage/DataManagePlugin";
20
+
21
+ export { default as RouteManagePlugin } from "./plugins/routeManage/RouteManagePlugin";
22
+
23
+ export { default as SequencePlugin } from "./plugins/sequence/SequencePlugin";
24
+ export * from "./plugins/sequence/SequencePluginTypes";
25
+
26
+ export { default as WebhooksPlugin } from "./plugins/webhooks/WebhooksPlugin";
27
+
28
+ export { default as AuthPlugin } from "./plugins/auth/AuthPlugin";
29
+
30
+ export { default as FileManagePlugin } from "./plugins/fileManage/FileManagePlugin";
31
+
32
+ export { default as ServerOperationPlugin } from "./plugins/serverOperation/ServerOperationPlugin";
33
+ export * from "./plugins/serverOperation/ServerOperationPluginTypes";
34
+
35
+ export { default as CronJobPlugin } from "./plugins/cronJob/CronJobPlugin";
36
+ export * from "./plugins/cronJob/CronJobPluginTypes";
37
+
38
+ export { default as StateMachinePlugin } from "./plugins/stateMachine/StateMachinePlugin";
39
+ export * from "./plugins/stateMachine/StateMachinePluginTypes";
40
+
41
+ export { default as EntityAccessControlPlugin } from "./plugins/entityAccessControl/EntityAccessControlPlugin";
@@ -3,7 +3,13 @@
3
3
  */
4
4
 
5
5
  import { RpdApplicationConfig } from "~/types";
6
- import { IRpdServer, RapidPlugin, RpdConfigurationItemOptions, RpdServerPluginConfigurableTargetOptions, RpdServerPluginExtendingAbilities } from "~/core/server";
6
+ import {
7
+ IRpdServer,
8
+ RapidPlugin,
9
+ RpdConfigurationItemOptions,
10
+ RpdServerPluginConfigurableTargetOptions,
11
+ RpdServerPluginExtendingAbilities,
12
+ } from "~/core/server";
7
13
 
8
14
  import pluginActionHandlers from "./actionHandlers";
9
15
  import pluginModels from "./models";
@@ -1,54 +1,54 @@
1
- import bcrypt from "bcrypt";
2
- import { ActionHandlerContext } from "~/core/actionHandler";
3
- import { RapidPlugin } from "~/core/server";
4
-
5
- export const code = "changePassword";
6
-
7
- export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
8
- const { server, input, routerContext } = ctx;
9
- const { response } = routerContext;
10
- const { id, oldPassword, newPassword } = input;
11
-
12
- const userId = routerContext.state.userId;
13
- if (!userId) {
14
- ctx.status = 401;
15
- ctx.output = {
16
- error: {
17
- message: "You are not signed in.",
18
- },
19
- };
20
- return;
21
- }
22
-
23
- const userDataAccessor = server.getDataAccessor({
24
- singularCode: "oc_user",
25
- });
26
-
27
- const user = await userDataAccessor.findOne({
28
- filters: [
29
- {
30
- operator: "eq",
31
- field: "id",
32
- value: userId,
33
- },
34
- ],
35
- });
36
-
37
- if (!user) {
38
- throw new Error("User not found.");
39
- }
40
-
41
- const isMatch = await bcrypt.compare(oldPassword, user.password);
42
- if (!isMatch) {
43
- throw new Error("旧密码错误。");
44
- }
45
-
46
- const saltRounds = 10;
47
- const passwordHash = await bcrypt.hash(newPassword, saltRounds);
48
-
49
- await userDataAccessor.updateById(user.id, {
50
- password: passwordHash,
51
- });
52
-
53
- ctx.output = {};
54
- }
1
+ import bcrypt from "bcrypt";
2
+ import { ActionHandlerContext } from "~/core/actionHandler";
3
+ import { RapidPlugin } from "~/core/server";
4
+
5
+ export const code = "changePassword";
6
+
7
+ export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
8
+ const { server, input, routerContext } = ctx;
9
+ const { response } = routerContext;
10
+ const { id, oldPassword, newPassword } = input;
11
+
12
+ const userId = routerContext.state.userId;
13
+ if (!userId) {
14
+ ctx.status = 401;
15
+ ctx.output = {
16
+ error: {
17
+ message: "You are not signed in.",
18
+ },
19
+ };
20
+ return;
21
+ }
22
+
23
+ const userDataAccessor = server.getDataAccessor({
24
+ singularCode: "oc_user",
25
+ });
26
+
27
+ const user = await userDataAccessor.findOne({
28
+ filters: [
29
+ {
30
+ operator: "eq",
31
+ field: "id",
32
+ value: userId,
33
+ },
34
+ ],
35
+ });
36
+
37
+ if (!user) {
38
+ throw new Error("User not found.");
39
+ }
40
+
41
+ const isMatch = await bcrypt.compare(oldPassword, user.password);
42
+ if (!isMatch) {
43
+ throw new Error("旧密码错误。");
44
+ }
45
+
46
+ const saltRounds = 10;
47
+ const passwordHash = await bcrypt.hash(newPassword, saltRounds);
48
+
49
+ await userDataAccessor.updateById(user.id, {
50
+ password: passwordHash,
51
+ });
52
+
53
+ ctx.output = {};
54
+ }
@@ -1,63 +1,63 @@
1
- import bcrypt from "bcrypt";
2
- import { setCookie } from "~/deno-std/http/cookie";
3
- import { createJwt } from "~/utilities/jwtUtility";
4
- import { ActionHandlerContext } from "~/core/actionHandler";
5
- import { RapidPlugin } from "~/core/server";
6
-
7
- export interface UserAccessToken {
8
- sub: "userAccessToken";
9
- aud: string;
10
- }
11
-
12
- export const code = "createSession";
13
-
14
- export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
15
- const { server, input, routerContext } = ctx;
16
- const { response } = routerContext;
17
- const { account, password } = input;
18
-
19
- const userDataAccessor = server.getDataAccessor({
20
- singularCode: "oc_user",
21
- });
22
-
23
- const user = await userDataAccessor.findOne({
24
- filters: [
25
- {
26
- operator: "eq",
27
- field: "login",
28
- value: account,
29
- },
30
- ],
31
- });
32
-
33
- if (!user) {
34
- throw new Error("用户名或密码错误。");
35
- }
36
-
37
- const isMatch = await bcrypt.compare(password, user.password);
38
- if (!isMatch) {
39
- throw new Error("用户名或密码错误。");
40
- }
41
-
42
- const secretKey = Buffer.from(server.config.jwtKey, "base64");
43
- const token = createJwt(
44
- {
45
- iss: "authManager",
46
- sub: "userAccessToken",
47
- aud: "" + user.id,
48
- iat: Math.floor(Date.now() / 1000),
49
- act: user.login,
50
- } as UserAccessToken,
51
- secretKey,
52
- );
53
-
54
- setCookie(response.headers, {
55
- name: ctx.server.config.sessionCookieName,
56
- value: token,
57
- path: "/",
58
- });
59
-
60
- ctx.output = {
61
- token,
62
- };
63
- }
1
+ import bcrypt from "bcrypt";
2
+ import { setCookie } from "~/deno-std/http/cookie";
3
+ import { createJwt } from "~/utilities/jwtUtility";
4
+ import { ActionHandlerContext } from "~/core/actionHandler";
5
+ import { RapidPlugin } from "~/core/server";
6
+
7
+ export interface UserAccessToken {
8
+ sub: "userAccessToken";
9
+ aud: string;
10
+ }
11
+
12
+ export const code = "createSession";
13
+
14
+ export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
15
+ const { server, input, routerContext } = ctx;
16
+ const { response } = routerContext;
17
+ const { account, password } = input;
18
+
19
+ const userDataAccessor = server.getDataAccessor({
20
+ singularCode: "oc_user",
21
+ });
22
+
23
+ const user = await userDataAccessor.findOne({
24
+ filters: [
25
+ {
26
+ operator: "eq",
27
+ field: "login",
28
+ value: account,
29
+ },
30
+ ],
31
+ });
32
+
33
+ if (!user) {
34
+ throw new Error("用户名或密码错误。");
35
+ }
36
+
37
+ const isMatch = await bcrypt.compare(password, user.password);
38
+ if (!isMatch) {
39
+ throw new Error("用户名或密码错误。");
40
+ }
41
+
42
+ const secretKey = Buffer.from(server.config.jwtKey, "base64");
43
+ const token = createJwt(
44
+ {
45
+ iss: "authManager",
46
+ sub: "userAccessToken",
47
+ aud: "" + user.id,
48
+ iat: Math.floor(Date.now() / 1000),
49
+ act: user.login,
50
+ } as UserAccessToken,
51
+ secretKey,
52
+ );
53
+
54
+ setCookie(response.headers, {
55
+ name: ctx.server.config.sessionCookieName,
56
+ value: token,
57
+ path: "/",
58
+ });
59
+
60
+ ctx.output = {
61
+ token,
62
+ };
63
+ }
@@ -1,18 +1,18 @@
1
- import { ActionHandlerContext } from "~/core/actionHandler";
2
- import { RapidPlugin } from "~/core/server";
3
- import { setCookie } from "~/deno-std/http/cookie";
4
-
5
- export const code = "deleteSession";
6
-
7
- export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
8
- const { server, input, routerContext } = ctx;
9
- const { response } = routerContext;
10
-
11
- setCookie(response.headers, {
12
- name: ctx.server.config.sessionCookieName,
13
- value: "",
14
- path: "/",
15
- });
16
-
17
- routerContext.redirect("/signin");
18
- }
1
+ import { ActionHandlerContext } from "~/core/actionHandler";
2
+ import { RapidPlugin } from "~/core/server";
3
+ import { setCookie } from "~/deno-std/http/cookie";
4
+
5
+ export const code = "deleteSession";
6
+
7
+ export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
8
+ const { server, input, routerContext } = ctx;
9
+ const { response } = routerContext;
10
+
11
+ setCookie(response.headers, {
12
+ name: ctx.server.config.sessionCookieName,
13
+ value: "",
14
+ path: "/",
15
+ });
16
+
17
+ routerContext.redirect("/signin");
18
+ }
@@ -1,35 +1,35 @@
1
- import { ActionHandlerContext } from "~/core/actionHandler";
2
- import { RapidPlugin } from "~/core/server";
3
-
4
- export const code = "getMyProfile";
5
-
6
- export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
7
- const { server, input, routerContext } = ctx;
8
-
9
- const userId = routerContext.state.userId;
10
- if (!userId) {
11
- ctx.status = 401;
12
- ctx.output = {
13
- error: {
14
- message: "You are not signed in.",
15
- },
16
- };
17
- return;
18
- }
19
-
20
- const entityManager = server.getEntityManager("oc_user");
21
- const user = await entityManager.findEntity({
22
- filters: [
23
- {
24
- operator: "eq",
25
- field: "id",
26
- value: userId,
27
- },
28
- ],
29
- properties: ["id", "name", "login", "email", "department", "roles", "state", "createdAt"],
30
- });
31
-
32
- ctx.output = {
33
- user,
34
- };
35
- }
1
+ import { ActionHandlerContext } from "~/core/actionHandler";
2
+ import { RapidPlugin } from "~/core/server";
3
+
4
+ export const code = "getMyProfile";
5
+
6
+ export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
7
+ const { server, input, routerContext } = ctx;
8
+
9
+ const userId = routerContext.state.userId;
10
+ if (!userId) {
11
+ ctx.status = 401;
12
+ ctx.output = {
13
+ error: {
14
+ message: "You are not signed in.",
15
+ },
16
+ };
17
+ return;
18
+ }
19
+
20
+ const entityManager = server.getEntityManager("oc_user");
21
+ const user = await entityManager.findEntity({
22
+ filters: [
23
+ {
24
+ operator: "eq",
25
+ field: "id",
26
+ value: userId,
27
+ },
28
+ ],
29
+ properties: ["id", "name", "login", "email", "department", "roles", "state", "createdAt"],
30
+ });
31
+
32
+ ctx.output = {
33
+ user,
34
+ };
35
+ }
@@ -1,8 +1,8 @@
1
- import { IPluginActionHandler } from "~/core/actionHandler";
2
- import * as changePassword from "./changePassword";
3
- import * as createSession from "./createSession";
4
- import * as deleteSession from "./deleteSession";
5
- import * as getMyProfile from "./getMyProfile";
6
- import * as resetPassword from "./resetPassword";
7
-
8
- export default [changePassword, createSession, deleteSession, getMyProfile, resetPassword] satisfies IPluginActionHandler[];
1
+ import { IPluginActionHandler } from "~/core/actionHandler";
2
+ import * as changePassword from "./changePassword";
3
+ import * as createSession from "./createSession";
4
+ import * as deleteSession from "./deleteSession";
5
+ import * as getMyProfile from "./getMyProfile";
6
+ import * as resetPassword from "./resetPassword";
7
+
8
+ export default [changePassword, createSession, deleteSession, getMyProfile, resetPassword] satisfies IPluginActionHandler[];
@@ -1,38 +1,38 @@
1
- import bcrypt from "bcrypt";
2
- import { ActionHandlerContext } from "~/core/actionHandler";
3
- import { RapidPlugin } from "~/core/server";
4
-
5
- export const code = "resetPassword";
6
-
7
- export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
8
- const { server, input, routerContext } = ctx;
9
- const { response } = routerContext;
10
- const { userId, password } = input;
11
-
12
- const userDataAccessor = server.getDataAccessor({
13
- singularCode: "oc_user",
14
- });
15
-
16
- const user = await userDataAccessor.findOne({
17
- filters: [
18
- {
19
- operator: "eq",
20
- field: "id",
21
- value: userId,
22
- },
23
- ],
24
- });
25
-
26
- if (!user) {
27
- throw new Error("User not found.");
28
- }
29
-
30
- const saltRounds = 10;
31
- const passwordHash = await bcrypt.hash(password, saltRounds);
32
-
33
- await userDataAccessor.updateById(user.id, {
34
- password: passwordHash,
35
- });
36
-
37
- ctx.output = {};
38
- }
1
+ import bcrypt from "bcrypt";
2
+ import { ActionHandlerContext } from "~/core/actionHandler";
3
+ import { RapidPlugin } from "~/core/server";
4
+
5
+ export const code = "resetPassword";
6
+
7
+ export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
8
+ const { server, input, routerContext } = ctx;
9
+ const { response } = routerContext;
10
+ const { userId, password } = input;
11
+
12
+ const userDataAccessor = server.getDataAccessor({
13
+ singularCode: "oc_user",
14
+ });
15
+
16
+ const user = await userDataAccessor.findOne({
17
+ filters: [
18
+ {
19
+ operator: "eq",
20
+ field: "id",
21
+ value: userId,
22
+ },
23
+ ],
24
+ });
25
+
26
+ if (!user) {
27
+ throw new Error("User not found.");
28
+ }
29
+
30
+ const saltRounds = 10;
31
+ const passwordHash = await bcrypt.hash(password, saltRounds);
32
+
33
+ await userDataAccessor.updateById(user.id, {
34
+ password: passwordHash,
35
+ });
36
+
37
+ ctx.output = {};
38
+ }