@ruiapp/rapid-core 0.1.78 → 0.1.80

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 (105) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js +78 -41
  3. package/dist/plugins/dataManage/actionHandlers/deleteCollectionEntities.d.ts +8 -0
  4. package/package.json +1 -1
  5. package/rollup.config.js +16 -16
  6. package/src/core/actionHandler.ts +22 -22
  7. package/src/core/eventManager.ts +20 -20
  8. package/src/core/facility.ts +7 -7
  9. package/src/core/http/formDataParser.ts +89 -89
  10. package/src/core/pluginManager.ts +175 -175
  11. package/src/core/providers/runtimeProvider.ts +5 -5
  12. package/src/core/request.ts +86 -86
  13. package/src/core/response.ts +76 -76
  14. package/src/core/routeContext.ts +43 -43
  15. package/src/core/routesBuilder.ts +88 -88
  16. package/src/dataAccess/dataAccessor.ts +137 -137
  17. package/src/deno-std/datetime/to_imf.ts +32 -32
  18. package/src/deno-std/encoding/base64.ts +141 -141
  19. package/src/facilities/log/LogFacility.ts +35 -35
  20. package/src/helpers/entityHelpers.ts +76 -76
  21. package/src/index.ts +2 -0
  22. package/src/plugins/auth/actionHandlers/changePassword.ts +54 -54
  23. package/src/plugins/auth/actionHandlers/createSession.ts +63 -63
  24. package/src/plugins/auth/actionHandlers/deleteSession.ts +18 -18
  25. package/src/plugins/auth/actionHandlers/getMyProfile.ts +35 -35
  26. package/src/plugins/auth/actionHandlers/index.ts +8 -8
  27. package/src/plugins/auth/actionHandlers/resetPassword.ts +38 -38
  28. package/src/plugins/auth/models/AccessToken.ts +56 -56
  29. package/src/plugins/auth/models/index.ts +3 -3
  30. package/src/plugins/auth/routes/changePassword.ts +15 -15
  31. package/src/plugins/auth/routes/getMyProfile.ts +15 -15
  32. package/src/plugins/auth/routes/index.ts +7 -7
  33. package/src/plugins/auth/routes/resetPassword.ts +15 -15
  34. package/src/plugins/auth/routes/signin.ts +15 -15
  35. package/src/plugins/auth/routes/signout.ts +15 -15
  36. package/src/plugins/cronJob/CronJobPluginTypes.ts +49 -49
  37. package/src/plugins/cronJob/actionHandlers/index.ts +4 -4
  38. package/src/plugins/cronJob/actionHandlers/runCronJob.ts +29 -29
  39. package/src/plugins/cronJob/routes/index.ts +3 -3
  40. package/src/plugins/cronJob/routes/runCronJob.ts +15 -15
  41. package/src/plugins/dataManage/DataManagePlugin.ts +8 -0
  42. package/src/plugins/dataManage/actionHandlers/addEntityRelations.ts +20 -20
  43. package/src/plugins/dataManage/actionHandlers/countCollectionEntities.ts +15 -15
  44. package/src/plugins/dataManage/actionHandlers/createCollectionEntitiesBatch.ts +42 -42
  45. package/src/plugins/dataManage/actionHandlers/createCollectionEntity.ts +24 -24
  46. package/src/plugins/dataManage/actionHandlers/deleteCollectionEntities.ts +38 -0
  47. package/src/plugins/dataManage/actionHandlers/findCollectionEntities.ts +26 -26
  48. package/src/plugins/dataManage/actionHandlers/findCollectionEntityById.ts +21 -21
  49. package/src/plugins/dataManage/actionHandlers/queryDatabase.ts +22 -22
  50. package/src/plugins/dataManage/actionHandlers/removeEntityRelations.ts +20 -20
  51. package/src/plugins/dataManage/actionHandlers/updateCollectionEntityById.ts +35 -35
  52. package/src/plugins/entityAccessControl/EntityAccessControlPlugin.ts +1 -1
  53. package/src/plugins/fileManage/actionHandlers/downloadDocument.ts +36 -36
  54. package/src/plugins/fileManage/actionHandlers/uploadFile.ts +33 -33
  55. package/src/plugins/fileManage/routes/downloadDocument.ts +15 -15
  56. package/src/plugins/fileManage/routes/downloadFile.ts +15 -15
  57. package/src/plugins/fileManage/routes/index.ts +5 -5
  58. package/src/plugins/fileManage/routes/uploadFile.ts +15 -15
  59. package/src/plugins/metaManage/actionHandlers/getMetaModelDetail.ts +10 -10
  60. package/src/plugins/metaManage/actionHandlers/listMetaModels.ts +9 -9
  61. package/src/plugins/metaManage/actionHandlers/listMetaRoutes.ts +9 -9
  62. package/src/plugins/routeManage/actionHandlers/httpProxy.ts +13 -13
  63. package/src/plugins/sequence/SequenceService.ts +81 -81
  64. package/src/plugins/sequence/actionHandlers/generateSn.ts +32 -32
  65. package/src/plugins/sequence/actionHandlers/index.ts +4 -4
  66. package/src/plugins/sequence/models/SequenceAutoIncrementRecord.ts +49 -49
  67. package/src/plugins/sequence/models/SequenceRule.ts +42 -42
  68. package/src/plugins/sequence/models/index.ts +4 -4
  69. package/src/plugins/sequence/routes/generateSn.ts +15 -15
  70. package/src/plugins/sequence/routes/index.ts +3 -3
  71. package/src/plugins/sequence/segment-utility.ts +11 -11
  72. package/src/plugins/sequence/segments/index.ts +9 -9
  73. package/src/plugins/serverOperation/ServerOperationPlugin.ts +91 -91
  74. package/src/plugins/serverOperation/ServerOperationPluginTypes.ts +15 -15
  75. package/src/plugins/serverOperation/actionHandlers/index.ts +4 -4
  76. package/src/plugins/setting/SettingService.ts +213 -213
  77. package/src/plugins/setting/actionHandlers/getSystemSettingValues.ts +30 -30
  78. package/src/plugins/setting/actionHandlers/getUserSettingValues.ts +38 -38
  79. package/src/plugins/setting/actionHandlers/index.ts +6 -6
  80. package/src/plugins/setting/actionHandlers/setSystemSettingValues.ts +30 -30
  81. package/src/plugins/setting/models/SystemSettingGroupSetting.ts +57 -57
  82. package/src/plugins/setting/models/SystemSettingItem.ts +42 -42
  83. package/src/plugins/setting/models/SystemSettingItemSetting.ts +73 -73
  84. package/src/plugins/setting/models/UserSettingGroupSetting.ts +57 -57
  85. package/src/plugins/setting/models/UserSettingItem.ts +49 -49
  86. package/src/plugins/setting/models/UserSettingItemSetting.ts +73 -73
  87. package/src/plugins/setting/models/index.ts +8 -8
  88. package/src/plugins/setting/routes/getSystemSettingValues.ts +15 -15
  89. package/src/plugins/setting/routes/getUserSettingValues.ts +15 -15
  90. package/src/plugins/setting/routes/index.ts +5 -5
  91. package/src/plugins/setting/routes/setSystemSettingValues.ts +15 -15
  92. package/src/plugins/stateMachine/actionHandlers/index.ts +4 -4
  93. package/src/plugins/stateMachine/actionHandlers/sendStateMachineEvent.ts +51 -51
  94. package/src/plugins/stateMachine/models/StateMachine.ts +42 -42
  95. package/src/plugins/stateMachine/models/index.ts +3 -3
  96. package/src/plugins/stateMachine/routes/index.ts +3 -3
  97. package/src/plugins/stateMachine/routes/sendStateMachineEvent.ts +15 -15
  98. package/src/polyfill.ts +5 -5
  99. package/src/proxy/mod.ts +38 -38
  100. package/src/utilities/accessControlUtility.ts +33 -33
  101. package/src/utilities/fsUtility.ts +61 -61
  102. package/src/utilities/httpUtility.ts +19 -19
  103. package/src/utilities/jwtUtility.ts +26 -26
  104. package/src/utilities/timeUtility.ts +9 -9
  105. package/tsconfig.json +19 -19
@@ -1,35 +1,35 @@
1
- import winston from "winston";
2
-
3
- export interface Logger {
4
- log: winston.LogMethod;
5
- /**
6
- * The service/app is going to stop or become unusable now. An operator should definitely look into this immediately.
7
- */
8
- emerg: winston.LeveledLogMethod;
9
- /**
10
- * Fatal for a particular service, but the app continues servicing other requests. An operator should look at this immediately.
11
- */
12
- crit: winston.LeveledLogMethod;
13
- /**
14
- * Fatal for a particular request, but the service/app continues servicing other requests. An operator should look at this soon(ish).
15
- */
16
- error: winston.LeveledLogMethod;
17
- /**
18
- * A note on something that should probably be looked at by an operator eventually.
19
- */
20
- warn: winston.LeveledLogMethod;
21
- /**
22
- * Detail on regular operation.
23
- */
24
- info: winston.LeveledLogMethod;
25
- /**
26
- * Anything else, i.e. too verbose to be included in "info" level.
27
- */
28
- debug: winston.LeveledLogMethod;
29
- /**
30
- * Logging from external libraries used by your app or very detailed application logging.
31
- */
32
- verbose: winston.LeveledLogMethod;
33
-
34
- child(options: Object): Logger;
35
- }
1
+ import winston from "winston";
2
+
3
+ export interface Logger {
4
+ log: winston.LogMethod;
5
+ /**
6
+ * The service/app is going to stop or become unusable now. An operator should definitely look into this immediately.
7
+ */
8
+ emerg: winston.LeveledLogMethod;
9
+ /**
10
+ * Fatal for a particular service, but the app continues servicing other requests. An operator should look at this immediately.
11
+ */
12
+ crit: winston.LeveledLogMethod;
13
+ /**
14
+ * Fatal for a particular request, but the service/app continues servicing other requests. An operator should look at this soon(ish).
15
+ */
16
+ error: winston.LeveledLogMethod;
17
+ /**
18
+ * A note on something that should probably be looked at by an operator eventually.
19
+ */
20
+ warn: winston.LeveledLogMethod;
21
+ /**
22
+ * Detail on regular operation.
23
+ */
24
+ info: winston.LeveledLogMethod;
25
+ /**
26
+ * Anything else, i.e. too verbose to be included in "info" level.
27
+ */
28
+ debug: winston.LeveledLogMethod;
29
+ /**
30
+ * Logging from external libraries used by your app or very detailed application logging.
31
+ */
32
+ verbose: winston.LeveledLogMethod;
33
+
34
+ child(options: Object): Logger;
35
+ }
@@ -1,76 +1,76 @@
1
- import { isNumber, isObject } from "lodash";
2
- import { IRpdServer } from "~/core/server";
3
- import { getEntityPropertyByCode, isOneRelationProperty } from "~/helpers/metaHelper";
4
- import { RpdDataModel } from "~/types";
5
-
6
- export function getEntityPartChanges(server: IRpdServer, model: RpdDataModel, before: any, after: any): Record<string, any> | null {
7
- if (!before) {
8
- throw new Error("Argument 'before' can not be null.");
9
- }
10
-
11
- if (!after) {
12
- throw new Error("Argument 'after' can not be null.");
13
- }
14
-
15
- let changed = false;
16
- let changes = {};
17
- for (const key in after) {
18
- const property = getEntityPropertyByCode(server, model, key);
19
- if (isOneRelationProperty(property)) {
20
- const afterValue: number | { id: number } | null = after[key];
21
- const beforeValue: number | { id: number } | null = before[key] || before[property.targetIdColumnName];
22
- if (afterValue) {
23
- if (isNumber(afterValue)) {
24
- if (beforeValue) {
25
- if (isNumber(beforeValue)) {
26
- if (afterValue != beforeValue) {
27
- changed = true;
28
- changes[key] = afterValue;
29
- }
30
- } else {
31
- if (afterValue != beforeValue.id) {
32
- changed = true;
33
- changes[key] = afterValue;
34
- }
35
- }
36
- } else {
37
- changed = true;
38
- changes[key] = afterValue;
39
- }
40
- } else {
41
- if (beforeValue) {
42
- if (isNumber(beforeValue)) {
43
- if (afterValue.id != beforeValue) {
44
- changed = true;
45
- changes[key] = afterValue;
46
- }
47
- } else {
48
- if (afterValue.id != beforeValue.id) {
49
- changed = true;
50
- changes[key] = afterValue;
51
- }
52
- }
53
- } else {
54
- changed = true;
55
- changes[key] = afterValue;
56
- }
57
- }
58
- } else {
59
- if (beforeValue) {
60
- changed = true;
61
- changes[key] = null;
62
- }
63
- }
64
- } else {
65
- if (after[key] != before[key]) {
66
- changed = true;
67
- changes[key] = after[key];
68
- }
69
- }
70
- }
71
-
72
- if (changed) {
73
- return changes;
74
- }
75
- return null;
76
- }
1
+ import { isNumber, isObject } from "lodash";
2
+ import { IRpdServer } from "~/core/server";
3
+ import { getEntityPropertyByCode, isOneRelationProperty } from "~/helpers/metaHelper";
4
+ import { RpdDataModel } from "~/types";
5
+
6
+ export function getEntityPartChanges(server: IRpdServer, model: RpdDataModel, before: any, after: any): Record<string, any> | null {
7
+ if (!before) {
8
+ throw new Error("Argument 'before' can not be null.");
9
+ }
10
+
11
+ if (!after) {
12
+ throw new Error("Argument 'after' can not be null.");
13
+ }
14
+
15
+ let changed = false;
16
+ let changes = {};
17
+ for (const key in after) {
18
+ const property = getEntityPropertyByCode(server, model, key);
19
+ if (isOneRelationProperty(property)) {
20
+ const afterValue: number | { id: number } | null = after[key];
21
+ const beforeValue: number | { id: number } | null = before[key] || before[property.targetIdColumnName];
22
+ if (afterValue) {
23
+ if (isNumber(afterValue)) {
24
+ if (beforeValue) {
25
+ if (isNumber(beforeValue)) {
26
+ if (afterValue != beforeValue) {
27
+ changed = true;
28
+ changes[key] = afterValue;
29
+ }
30
+ } else {
31
+ if (afterValue != beforeValue.id) {
32
+ changed = true;
33
+ changes[key] = afterValue;
34
+ }
35
+ }
36
+ } else {
37
+ changed = true;
38
+ changes[key] = afterValue;
39
+ }
40
+ } else {
41
+ if (beforeValue) {
42
+ if (isNumber(beforeValue)) {
43
+ if (afterValue.id != beforeValue) {
44
+ changed = true;
45
+ changes[key] = afterValue;
46
+ }
47
+ } else {
48
+ if (afterValue.id != beforeValue.id) {
49
+ changed = true;
50
+ changes[key] = afterValue;
51
+ }
52
+ }
53
+ } else {
54
+ changed = true;
55
+ changes[key] = afterValue;
56
+ }
57
+ }
58
+ } else {
59
+ if (beforeValue) {
60
+ changed = true;
61
+ changes[key] = null;
62
+ }
63
+ }
64
+ } else {
65
+ if (after[key] != before[key]) {
66
+ changed = true;
67
+ changes[key] = after[key];
68
+ }
69
+ }
70
+ }
71
+
72
+ if (changed) {
73
+ return changes;
74
+ }
75
+ return null;
76
+ }
package/src/index.ts CHANGED
@@ -12,6 +12,8 @@ export * from "./core/actionHandler";
12
12
 
13
13
  export * from "./utilities/jwtUtility";
14
14
 
15
+ export { mapDbRowToEntity } from "./dataAccess/entityMapper";
16
+
15
17
  export * as bootstrapApplicationConfig from "./bootstrapApplicationConfig";
16
18
 
17
19
  export { default as MetaManagePlugin } from "./plugins/metaManage/MetaManagePlugin";
@@ -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
+ }