@tomei/sso 0.58.0 → 0.58.3

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 (142) hide show
  1. package/.commitlintrc.json +22 -22
  2. package/.gitlab-ci.yml +16 -16
  3. package/.husky/commit-msg +15 -15
  4. package/.husky/pre-commit +7 -7
  5. package/.prettierrc +4 -4
  6. package/Jenkinsfile +57 -57
  7. package/README.md +23 -23
  8. package/__tests__/unit/components/group/group.spec.ts +79 -79
  9. package/__tests__/unit/components/group-object-privilege/group-object-privilege.spec.ts +88 -88
  10. package/__tests__/unit/components/group-privilege/group-privilege.spec.ts +68 -68
  11. package/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.ts +66 -66
  12. package/__tests__/unit/components/group-system-access/group-system-access.spec.ts +83 -83
  13. package/__tests__/unit/components/login-user/l.spec.ts +746 -746
  14. package/__tests__/unit/components/login-user/login.spec.ts +1164 -1164
  15. package/__tests__/unit/components/password-hash/password-hash.service.spec.ts +31 -31
  16. package/__tests__/unit/components/system/system.spec.ts +254 -254
  17. package/__tests__/unit/components/system-privilege/system-privilege.spec.ts +83 -83
  18. package/__tests__/unit/components/user-group/user-group.spec.ts +86 -86
  19. package/__tests__/unit/components/user-object-privilege/user-object-privilege.spec.ts +78 -78
  20. package/__tests__/unit/components/user-privilege/user-privilege.spec.ts +72 -72
  21. package/__tests__/unit/components/user-system-access/user-system-access.spec.ts +89 -89
  22. package/__tests__/unit/redis-client/redis.service.spec.ts +23 -23
  23. package/__tests__/unit/session/session.service.spec.ts +47 -47
  24. package/__tests__/unit/system-privilege/system-privilage.spec.ts +91 -91
  25. package/coverage/clover.xml +1452 -1452
  26. package/coverage/coverage-final.json +47 -47
  27. package/coverage/lcov-report/base.css +224 -224
  28. package/coverage/lcov-report/block-navigation.js +87 -87
  29. package/coverage/lcov-report/components/group/group.repository.ts.html +117 -117
  30. package/coverage/lcov-report/components/group/group.ts.html +327 -327
  31. package/coverage/lcov-report/components/group/index.html +130 -130
  32. package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.repository.ts.html +117 -117
  33. package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.ts.html +321 -321
  34. package/coverage/lcov-report/components/group-object-privilege/index.html +130 -130
  35. package/coverage/lcov-report/components/group-privilege/group-privilege.repository.ts.html +117 -117
  36. package/coverage/lcov-report/components/group-privilege/group-privilege.ts.html +303 -303
  37. package/coverage/lcov-report/components/group-privilege/index.html +130 -130
  38. package/coverage/lcov-report/components/group-reporting-user/group-reporting-user.repository.ts.html +117 -117
  39. package/coverage/lcov-report/components/group-reporting-user/group-reporting-user.ts.html +327 -327
  40. package/coverage/lcov-report/components/group-reporting-user/index.html +130 -130
  41. package/coverage/lcov-report/components/group-system-access/group-system-access.repository.ts.html +117 -117
  42. package/coverage/lcov-report/components/group-system-access/group-system-access.ts.html +309 -309
  43. package/coverage/lcov-report/components/group-system-access/index.html +130 -130
  44. package/coverage/lcov-report/components/login-history/index.html +115 -115
  45. package/coverage/lcov-report/components/login-history/login-history.repository.ts.html +117 -117
  46. package/coverage/lcov-report/components/login-user/index.html +130 -130
  47. package/coverage/lcov-report/components/login-user/login-user.ts.html +5007 -5007
  48. package/coverage/lcov-report/components/login-user/user.repository.ts.html +117 -117
  49. package/coverage/lcov-report/components/password-hash/index.html +115 -115
  50. package/coverage/lcov-report/components/password-hash/password-hash.service.ts.html +126 -126
  51. package/coverage/lcov-report/components/system/index.html +130 -130
  52. package/coverage/lcov-report/components/system/system.repository.ts.html +117 -117
  53. package/coverage/lcov-report/components/system/system.ts.html +909 -909
  54. package/coverage/lcov-report/components/system-privilege/index.html +130 -130
  55. package/coverage/lcov-report/components/system-privilege/system-privilege.repository.ts.html +120 -120
  56. package/coverage/lcov-report/components/system-privilege/system-privilege.ts.html +390 -390
  57. package/coverage/lcov-report/components/user-group/index.html +130 -130
  58. package/coverage/lcov-report/components/user-group/user-group.repository.ts.html +117 -117
  59. package/coverage/lcov-report/components/user-group/user-group.ts.html +354 -354
  60. package/coverage/lcov-report/components/user-object-privilege/index.html +130 -130
  61. package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.repository.ts.html +117 -117
  62. package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.ts.html +312 -312
  63. package/coverage/lcov-report/components/user-privilege/index.html +130 -130
  64. package/coverage/lcov-report/components/user-privilege/user-privilege.repository.ts.html +117 -117
  65. package/coverage/lcov-report/components/user-privilege/user-privilege.ts.html +306 -306
  66. package/coverage/lcov-report/components/user-system-access/index.html +130 -130
  67. package/coverage/lcov-report/components/user-system-access/user-system-access.repository.ts.html +117 -117
  68. package/coverage/lcov-report/components/user-system-access/user-system-access.ts.html +312 -312
  69. package/coverage/lcov-report/enum/group-type.enum.ts.html +108 -108
  70. package/coverage/lcov-report/enum/index.html +160 -160
  71. package/coverage/lcov-report/enum/index.ts.html +93 -93
  72. package/coverage/lcov-report/enum/user-status.enum.ts.html +105 -105
  73. package/coverage/lcov-report/enum/yn.enum.ts.html +96 -96
  74. package/coverage/lcov-report/index.html +370 -370
  75. package/coverage/lcov-report/models/group-object-privilege.entity.ts.html +333 -333
  76. package/coverage/lcov-report/models/group-privilege.entity.ts.html +315 -315
  77. package/coverage/lcov-report/models/group-reporting-user.entity.ts.html +339 -339
  78. package/coverage/lcov-report/models/group-system-access.entity.ts.html +324 -324
  79. package/coverage/lcov-report/models/group.entity.ts.html +435 -435
  80. package/coverage/lcov-report/models/index.html +310 -310
  81. package/coverage/lcov-report/models/login-history.entity.ts.html +252 -252
  82. package/coverage/lcov-report/models/staff.entity.ts.html +411 -411
  83. package/coverage/lcov-report/models/system-privilege.entity.ts.html +354 -354
  84. package/coverage/lcov-report/models/system.entity.ts.html +423 -423
  85. package/coverage/lcov-report/models/user-group.entity.ts.html +354 -354
  86. package/coverage/lcov-report/models/user-object-privilege.entity.ts.html +330 -330
  87. package/coverage/lcov-report/models/user-privilege.entity.ts.html +315 -315
  88. package/coverage/lcov-report/models/user-system-access.entity.ts.html +315 -315
  89. package/coverage/lcov-report/models/user.entity.ts.html +522 -522
  90. package/coverage/lcov-report/prettify.css +1 -1
  91. package/coverage/lcov-report/prettify.js +2 -2
  92. package/coverage/lcov-report/redis-client/index.html +115 -115
  93. package/coverage/lcov-report/redis-client/redis.service.ts.html +240 -240
  94. package/coverage/lcov-report/session/index.html +115 -115
  95. package/coverage/lcov-report/session/session.service.ts.html +246 -246
  96. package/coverage/lcov-report/sorter.js +196 -196
  97. package/coverage/lcov.info +2490 -2490
  98. package/coverage/test-report.xml +128 -128
  99. package/create-sso-user.sql +39 -39
  100. package/dist/src/components/login-user/login-user.js +60 -0
  101. package/dist/src/components/login-user/login-user.js.map +1 -1
  102. package/dist/src/components/login-user/user.d.ts +2 -0
  103. package/dist/src/components/login-user/user.js +91 -12
  104. package/dist/src/components/login-user/user.js.map +1 -1
  105. package/dist/src/components/user-reporting-hierarchy/user-reporting-hierarchy.js +24 -20
  106. package/dist/src/components/user-reporting-hierarchy/user-reporting-hierarchy.js.map +1 -1
  107. package/dist/tsconfig.tsbuildinfo +1 -1
  108. package/eslint.config.mjs +58 -58
  109. package/jest.config.js +14 -14
  110. package/migrations/20240314080602-create-user-table.js +124 -124
  111. package/migrations/20240314080603-create-user-group-table.js +85 -85
  112. package/migrations/20240314080604-create-user-user-group-table.js +55 -55
  113. package/migrations/20240314080605-create-login-history-table.js +53 -53
  114. package/migrations/20240527064925-create-system-table.js +78 -78
  115. package/migrations/20240527064926-create-system-privilege-table.js +71 -71
  116. package/migrations/20240527065342-create-group-table.js +93 -93
  117. package/migrations/20240527065633-create-group-reporting-user-table.js +76 -76
  118. package/migrations/20240528011551-create-group-system-access-table.js +72 -72
  119. package/migrations/20240528023018-user-system-access-table.js +75 -75
  120. package/migrations/20240528032229-user-privilege-table.js +76 -76
  121. package/migrations/20240528063003-create-group-privilege-table.js +76 -76
  122. package/migrations/20240528063051-create-group-object-privilege-table.js +84 -84
  123. package/migrations/20240528063107-create-user-object-privilege-table.js +84 -84
  124. package/migrations/20240528063108-create-api-key-table.js +85 -85
  125. package/migrations/20241104104802-create-building-table.js +95 -95
  126. package/migrations/20250108091132-add-area-manager-user-id-to-building-table.js +14 -14
  127. package/migrations/20250108091133-add-passcode-to-user-table.js +36 -36
  128. package/migrations/20250210115636-create-user-reporting-hierarchy.js +76 -76
  129. package/package.json +90 -90
  130. package/sampledotenv +7 -7
  131. package/sonar-project.properties +22 -22
  132. package/src/components/login-user/login-user.ts +63 -0
  133. package/src/components/login-user/user.ts +141 -30
  134. package/src/components/user-reporting-hierarchy/user-reporting-hierarchy.ts +37 -32
  135. package/tsconfig.build.json +5 -5
  136. package/tsconfig.json +23 -23
  137. package/dist/__tests__/unit/components/group-privilege/group-privilege.test.d.ts +0 -1
  138. package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js +0 -71
  139. package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js.map +0 -1
  140. package/dist/__tests__/unit/components/login-user/login-user.spec.d.ts +0 -0
  141. package/dist/__tests__/unit/components/login-user/login-user.spec.js +0 -6
  142. package/dist/__tests__/unit/components/login-user/login-user.spec.js.map +0 -1
@@ -1,23 +1,23 @@
1
- sonar.projectKey=all-tomei-projects_sso
2
- sonar.organization=all-tomei-projects
3
- sonar.exclusions=**/*.js,test-data,dist,coverage, node_modules, __tests__, **/*.spec.ts, __mocks__
4
- sonar.scm.provider=git
5
-
6
- sonar.sources=src
7
- sonar.test=__tests__
8
- sonar.test.inclusions=src/**/*.spec.ts
9
-
10
- sonar.javascript.lcov.reportPaths=./coverage/lcov.info
11
- sonar.testExecutionReportPaths=coverage/test-report.xml
12
- sonar.sourceEnconding=UTF-8
13
-
14
- # This is the name and version displayed in the SonarCloud UI.
15
- #sonar.projectName=sso
16
- #sonar.projectVersion=1.0
17
-
18
-
19
- # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
20
- #sonar.sources=.
21
-
22
- # Encoding of the source code. Default is default system encoding
1
+ sonar.projectKey=all-tomei-projects_sso
2
+ sonar.organization=all-tomei-projects
3
+ sonar.exclusions=**/*.js,test-data,dist,coverage, node_modules, __tests__, **/*.spec.ts, __mocks__
4
+ sonar.scm.provider=git
5
+
6
+ sonar.sources=src
7
+ sonar.test=__tests__
8
+ sonar.test.inclusions=src/**/*.spec.ts
9
+
10
+ sonar.javascript.lcov.reportPaths=./coverage/lcov.info
11
+ sonar.testExecutionReportPaths=coverage/test-report.xml
12
+ sonar.sourceEnconding=UTF-8
13
+
14
+ # This is the name and version displayed in the SonarCloud UI.
15
+ #sonar.projectName=sso
16
+ #sonar.projectVersion=1.0
17
+
18
+
19
+ # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
20
+ #sonar.sources=.
21
+
22
+ # Encoding of the source code. Default is default system encoding
23
23
  #sonar.sourceEncoding=UTF-8
@@ -9,6 +9,9 @@ import { IUserAttr, IUserInfo } from './interfaces/user-info.interface';
9
9
  import Staff from '../../models/staff.entity';
10
10
  import UserModel from '../../models/user.entity';
11
11
  import { createHash, randomBytes } from 'crypto';
12
+ import { UserGroupRepository } from '../user-group/user-group.repository';
13
+ import GroupSystemAccessModel from '../../models/group-system-access.entity';
14
+ import SystemModel from '../../models/system.entity';
12
15
 
13
16
  export class LoginUser extends User implements ILoginUser {
14
17
  session = {
@@ -219,11 +222,71 @@ export class LoginUser extends User implements ILoginUser {
219
222
  UpdatedById: systemAccess[i].UpdatedById,
220
223
  CreatedAt: systemAccess[i].CreatedAt,
221
224
  UpdatedAt: systemAccess[i].UpdatedAt,
225
+ inheritedBy: ['OWN'],
222
226
  System: system,
223
227
  });
224
228
  }
225
229
  }
226
230
 
231
+ let userGroupRepository = new UserGroupRepository();
232
+ const userGroups = await userGroupRepository.findAll({
233
+ where: {
234
+ UserId: loginUser.UserId,
235
+ Status: 'Active',
236
+ },
237
+ include: [
238
+ {
239
+ model: GroupModel,
240
+ required: true,
241
+ where: {
242
+ Status: 'Active',
243
+ },
244
+ include: [
245
+ {
246
+ model: GroupSystemAccessModel,
247
+ where: {
248
+ Status: 'Active',
249
+ },
250
+ include: [
251
+ {
252
+ model: SystemModel,
253
+ },
254
+ ],
255
+ },
256
+ ],
257
+ },
258
+ ],
259
+ transaction: dbTransaction,
260
+ });
261
+
262
+ if (userGroups) {
263
+ for (let i = 0; i < userGroups.length; i++) {
264
+ let systemAccessList = userGroups[i].Group.GroupSystemAccesses;
265
+ for (let j = 0; j < systemAccessList.length; j++) {
266
+ let systemDetails = systemAccessList[j];
267
+ let isFound = output.findIndex(
268
+ (e) => e.SystemCode === systemDetails.SystemCode,
269
+ );
270
+ if (isFound > -1) {
271
+ output[isFound].inheritedBy.push(userGroups[i].GroupCode);
272
+ } else {
273
+ output.push({
274
+ UserSystemAccessId: systemDetails.GroupSystemAccessId,
275
+ UserId: systemDetails.GroupSystemAccessId,
276
+ SystemCode: systemDetails.SystemCode,
277
+ Status: systemDetails.Status,
278
+ CreatedById: systemDetails.CreatedById,
279
+ UpdatedById: systemDetails.UpdatedById,
280
+ CreatedAt: systemDetails.CreatedAt,
281
+ UpdatedAt: systemDetails.UpdatedAt,
282
+ inheritedBy: [userGroups[i].GroupCode],
283
+ System: systemDetails.System,
284
+ });
285
+ }
286
+ }
287
+ }
288
+ }
289
+
227
290
  // Part 3: Map Result to System Object
228
291
  return output;
229
292
  }
@@ -2132,25 +2132,26 @@ export class User extends UserBase {
2132
2132
  DepartmentCode?: string;
2133
2133
  ContactNo?: string;
2134
2134
  IdNo?: string;
2135
+ FullName?: string;
2135
2136
  },
2136
2137
  loginUser: User,
2137
2138
  dbTransaction: any,
2138
2139
  ) {
2139
2140
  //Part 1: Privilege Checking
2140
- const systemCode = ApplicationConfig.getComponentConfigValue('system-code');
2141
- const isPrivileged = await loginUser.checkPrivileges(
2142
- systemCode,
2143
- 'User - Update',
2144
- );
2145
-
2146
- //If user does not have privilege to update user, throw a ClassError
2147
- if (!isPrivileged) {
2148
- throw new ClassError(
2149
- 'LoginUser',
2150
- 'LoginUserErrMsg0X',
2151
- 'You do not have the privilege to update user',
2152
- );
2153
- }
2141
+ // const systemCode = ApplicationConfig.getComponentConfigValue('system-code');
2142
+ // const isPrivileged = await loginUser.checkPrivileges(
2143
+ // systemCode,
2144
+ // 'User - Update',
2145
+ // );
2146
+
2147
+ // //If user does not have privilege to update user, throw a ClassError
2148
+ // if (!isPrivileged) {
2149
+ // throw new ClassError(
2150
+ // 'LoginUser',
2151
+ // 'LoginUserErrMsg0X',
2152
+ // 'You do not have the privilege to update user',
2153
+ // );
2154
+ // }
2154
2155
 
2155
2156
  //Part 2: Validation
2156
2157
  //Make sure UserId got values. If not, throw new ClassError
@@ -2422,6 +2423,7 @@ export class User extends UserBase {
2422
2423
 
2423
2424
  //Update user record
2424
2425
  this.UserName = data.UserName;
2426
+ this.FullName = data.FullName;
2425
2427
  this.Email = data.Email;
2426
2428
  this.Status = data.Status;
2427
2429
  this.RecoveryEmail = data.RecoveryEmail;
@@ -2434,6 +2436,7 @@ export class User extends UserBase {
2434
2436
  await User._Repository.update(
2435
2437
  {
2436
2438
  UserName: this.UserName,
2439
+ FullName: this.FullName,
2437
2440
  Email: this.Email,
2438
2441
  Status: this.Status,
2439
2442
  RecoveryEmail: this.RecoveryEmail,
@@ -2499,22 +2502,22 @@ export class User extends UserBase {
2499
2502
  dbTransaction: any,
2500
2503
  UserId: string,
2501
2504
  ) {
2502
- const systemCode = ApplicationConfig.getComponentConfigValue('system-code');
2503
- if ('loginUser' in AuthContext) {
2504
- const isPrivileged = await AuthContext.loginUser.checkPrivileges(
2505
- systemCode,
2506
- 'USER_VIEW',
2507
- );
2508
-
2509
- //If user does not have privilege to update user, throw a ClassError
2510
- if (!isPrivileged) {
2511
- throw new ClassError(
2512
- 'LoginUser',
2513
- 'LoginUserErrMsg0X',
2514
- 'You do not have the privilege to find user',
2515
- );
2516
- }
2517
- }
2505
+ // const systemCode = ApplicationConfig.getComponentConfigValue('system-code');
2506
+ // if ('loginUser' in AuthContext) {
2507
+ // const isPrivileged = await AuthContext.loginUser.checkPrivileges(
2508
+ // systemCode,
2509
+ // 'USER_VIEW',
2510
+ // );
2511
+
2512
+ // //If user does not have privilege to update user, throw a ClassError
2513
+ // if (!isPrivileged) {
2514
+ // throw new ClassError(
2515
+ // 'LoginUser',
2516
+ // 'LoginUserErrMsg0X',
2517
+ // 'You do not have the privilege to find user',
2518
+ // );
2519
+ // }
2520
+ // }
2518
2521
 
2519
2522
  const user = await User._Repository.findOne({
2520
2523
  where: {
@@ -2800,6 +2803,114 @@ export class User extends UserBase {
2800
2803
  }
2801
2804
  }
2802
2805
 
2806
+ async updatePassword(
2807
+ loginUser: User,
2808
+ oldPassword: string,
2809
+ newPassword: string,
2810
+ dbTransaction: any,
2811
+ ) {
2812
+ try {
2813
+ const passwordHashService = new PasswordHashService();
2814
+ const isPasswordValid = await passwordHashService.verify(
2815
+ oldPassword,
2816
+ this.Password,
2817
+ );
2818
+ if (!isPasswordValid) {
2819
+ throw new Error(
2820
+ 'The old password you entered is incorrect. Please try again.',
2821
+ );
2822
+ }
2823
+
2824
+ const passwordHash = await passwordHashService.hashPassword(newPassword);
2825
+
2826
+ const entityValueBefore: IUserAttr = {
2827
+ UserId: this.UserId,
2828
+ UserName: this.UserName,
2829
+ FullName: this.FullName,
2830
+ IDNo: this.IDNo,
2831
+ IDType: this.IDType,
2832
+ ContactNo: this.ContactNo,
2833
+ Email: this.Email,
2834
+ Password: this.Password,
2835
+ Status: this.Status,
2836
+ DefaultPasswordChangedYN: this.DefaultPasswordChangedYN,
2837
+ FirstLoginAt: this.FirstLoginAt,
2838
+ LastLoginAt: this.LastLoginAt,
2839
+ MFAEnabled: this.MFAEnabled,
2840
+ MFAConfig: this.MFAConfig,
2841
+ RecoveryEmail: this.RecoveryEmail,
2842
+ FailedLoginAttemptCount: this.FailedLoginAttemptCount,
2843
+ LastFailedLoginAt: this.LastFailedLoginAt,
2844
+ LastPasswordChangedAt: this.LastPasswordChangedAt,
2845
+ NeedToChangePasswordYN: this.NeedToChangePasswordYN,
2846
+ CreatedById: this.CreatedById,
2847
+ CreatedAt: this.CreatedAt,
2848
+ UpdatedById: this.UpdatedById,
2849
+ UpdatedAt: this.UpdatedAt,
2850
+ PasscodeHash: this.PasscodeHash,
2851
+ PasscodeUpdatedAt: this.PasscodeUpdatedAt,
2852
+ };
2853
+
2854
+ this.Password = passwordHash;
2855
+ this.LastPasswordChangedAt = new Date();
2856
+
2857
+ const entityValueAfter: IUserAttr = {
2858
+ UserId: this.UserId,
2859
+ UserName: this.UserName,
2860
+ FullName: this.FullName,
2861
+ IDNo: this.IDNo,
2862
+ IDType: this.IDType,
2863
+ ContactNo: this.ContactNo,
2864
+ Email: this.Email,
2865
+ Password: this.Password,
2866
+ Status: this.Status,
2867
+ DefaultPasswordChangedYN: this.DefaultPasswordChangedYN,
2868
+ FirstLoginAt: this.FirstLoginAt,
2869
+ LastLoginAt: this.LastLoginAt,
2870
+ MFAEnabled: this.MFAEnabled,
2871
+ MFAConfig: this.MFAConfig,
2872
+ RecoveryEmail: this.RecoveryEmail,
2873
+ FailedLoginAttemptCount: this.FailedLoginAttemptCount,
2874
+ LastFailedLoginAt: this.LastFailedLoginAt,
2875
+ LastPasswordChangedAt: this.LastPasswordChangedAt,
2876
+ NeedToChangePasswordYN: this.NeedToChangePasswordYN,
2877
+ CreatedById: this.CreatedById,
2878
+ CreatedAt: this.CreatedAt,
2879
+ UpdatedById: this.UpdatedById,
2880
+ UpdatedAt: this.UpdatedAt,
2881
+ PasscodeHash: this.PasscodeHash,
2882
+ PasscodeUpdatedAt: this.PasscodeUpdatedAt,
2883
+ };
2884
+
2885
+ await User._Repository.update(
2886
+ {
2887
+ Password: this.Password,
2888
+ LastPasswordChangedAt: this.LastPasswordChangedAt,
2889
+ },
2890
+ {
2891
+ where: {
2892
+ UserId: this.UserId,
2893
+ },
2894
+ transaction: dbTransaction,
2895
+ },
2896
+ );
2897
+
2898
+ // Record update activity using Activity class create method.
2899
+ const activity = new Activity();
2900
+ activity.ActivityId = activity.createId();
2901
+ activity.Action = ActionEnum.UPDATE;
2902
+ activity.Description = 'Update Password';
2903
+ activity.EntityType = 'LoginUser';
2904
+ activity.EntityId = this.UserId.toString();
2905
+ activity.EntityValueBefore = JSON.stringify(entityValueBefore);
2906
+ activity.EntityValueAfter = JSON.stringify(entityValueAfter);
2907
+
2908
+ await activity.create(loginUser.ObjectId, dbTransaction);
2909
+ } catch (error) {
2910
+ throw error;
2911
+ }
2912
+ }
2913
+
2803
2914
  async verifyPasscode(passcode: string) {
2804
2915
  try {
2805
2916
  // Return error if this._Userid is empty "User is not created yet."
@@ -167,22 +167,25 @@ export class UserReportingHierarchy
167
167
  }
168
168
 
169
169
  //Check if one rank before the new rank is not already assigned to the user, if not throw an error
170
- userReportingHierarchy = await UserReportingHierarchy._Repo.findOne({
171
- where: {
172
- ReportingUserId: reportingUserId,
173
- Rank: rank - 1,
174
- },
175
- transaction: dbTransaction,
176
- });
170
+ if (rank > 1) {
171
+ const userReportingHierarchyBefore =
172
+ await UserReportingHierarchy._Repo.findOne({
173
+ where: {
174
+ ReportingUserId: reportingUserId,
175
+ Rank: rank - 1,
176
+ },
177
+ transaction: dbTransaction,
178
+ });
177
179
 
178
- if (!userReportingHierarchy) {
179
- throw new ClassError(
180
- 'UserReportingHierarchy',
181
- 'UserReportingHierarchyErrMsg05',
182
- 'Rank before the new rank is not yet assigned to the user',
183
- 'createUserReportingHierarchy',
184
- 400,
185
- );
180
+ if (!userReportingHierarchyBefore) {
181
+ throw new ClassError(
182
+ 'UserReportingHierarchy',
183
+ 'UserReportingHierarchyErrMsg05',
184
+ 'Rank before the new rank is not yet assigned to the user',
185
+ 'createUserReportingHierarchy',
186
+ 400,
187
+ );
188
+ }
186
189
  }
187
190
 
188
191
  // Create ReportingUserHierarchy Entry
@@ -327,25 +330,27 @@ export class UserReportingHierarchy
327
330
  }
328
331
 
329
332
  //Check if rank before the new rank is not already assigned to the user
330
- const userReportingRankBefore =
331
- await UserReportingHierarchy._Repo.findOne({
332
- where: {
333
- ReportingUserId: reportingUserId,
334
- Rank: rank - 1,
335
- UserReportingHierarchyId: {
336
- [Op.ne]: this.UserReportingHierarchyId,
333
+ if (rank > 1) {
334
+ const userReportingRankBefore =
335
+ await UserReportingHierarchy._Repo.findOne({
336
+ where: {
337
+ ReportingUserId: reportingUserId,
338
+ Rank: rank - 1,
339
+ UserReportingHierarchyId: {
340
+ [Op.ne]: this.UserReportingHierarchyId,
341
+ },
337
342
  },
338
- },
339
- transaction: dbTransaction,
340
- });
343
+ transaction: dbTransaction,
344
+ });
341
345
 
342
- if (!userReportingRankBefore) {
343
- throw new ClassError(
344
- 'UserReportingHierarchy',
345
- 'UserReportingHierarchyErrMsg05',
346
- 'Rank before the new rank is not yet assigned to the user',
347
- 'updateUserReportingHierarchy',
348
- );
346
+ if (!userReportingRankBefore) {
347
+ throw new ClassError(
348
+ 'UserReportingHierarchy',
349
+ 'UserReportingHierarchyErrMsg05',
350
+ 'Rank before the new rank is not yet assigned to the user',
351
+ 'updateUserReportingHierarchy',
352
+ );
353
+ }
349
354
  }
350
355
 
351
356
  // UPDATE ReportingUserHierarchy Entry
@@ -1,6 +1,6 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "include": ["**/*.ts"],
4
- "exclude": ["node_modules", "__tests__", "dist", "**/*spec.ts"]
5
- }
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "include": ["**/*.ts"],
4
+ "exclude": ["node_modules", "__tests__", "dist", "**/*spec.ts"]
5
+ }
6
6
 
package/tsconfig.json CHANGED
@@ -1,24 +1,24 @@
1
- {
2
- "compilerOptions": {
3
- "module": "commonjs",
4
- "declaration": true,
5
- "removeComments": true,
6
- "emitDecoratorMetadata": true,
7
- "experimentalDecorators": true,
8
- "allowSyntheticDefaultImports": true,
9
- "moduleResolution": "node",
10
- "target": "es6",
11
- "sourceMap": true,
12
- "outDir": "./dist",
13
- "baseUrl": "./src",
14
- "rootDir": "./",
15
- "incremental": true,
16
- "skipLibCheck": true,
17
- "noImplicitAny": false,
18
- "strictBindCallApply": false,
19
- "forceConsistentCasingInFileNames": false,
20
- "noFallthroughCasesInSwitch": false,
21
- "strictNullChecks": false,
22
- },
23
- "exclude": ["node_modules", "dist"]
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "declaration": true,
5
+ "removeComments": true,
6
+ "emitDecoratorMetadata": true,
7
+ "experimentalDecorators": true,
8
+ "allowSyntheticDefaultImports": true,
9
+ "moduleResolution": "node",
10
+ "target": "es6",
11
+ "sourceMap": true,
12
+ "outDir": "./dist",
13
+ "baseUrl": "./src",
14
+ "rootDir": "./",
15
+ "incremental": true,
16
+ "skipLibCheck": true,
17
+ "noImplicitAny": false,
18
+ "strictBindCallApply": false,
19
+ "forceConsistentCasingInFileNames": false,
20
+ "noFallthroughCasesInSwitch": false,
21
+ "strictNullChecks": false,
22
+ },
23
+ "exclude": ["node_modules", "dist"]
24
24
  }
@@ -1,71 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const group_privilege_1 = require("../../../../src/components/group-privilege/group-privilege");
13
- const group_privilege_repository_1 = require("../../../../src/components/group-privilege/group-privilege.repository");
14
- const general_1 = require("@tomei/general");
15
- describe('GroupPrivilege', () => {
16
- afterEach(() => {
17
- jest.restoreAllMocks();
18
- });
19
- it('should initialize with GroupPrivilegeAttr', () => __awaiter(void 0, void 0, void 0, function* () {
20
- const mockGroupPrivilegeAttr = {
21
- GroupPrivilegeId: 1,
22
- GroupCode: 'group1',
23
- PrivilegeCode: 'privilege1',
24
- Status: 'active',
25
- CreatedAt: new Date(),
26
- UpdatedAt: new Date(),
27
- CreatedById: 1,
28
- UpdatedById: 1,
29
- };
30
- const findOneMock = jest
31
- .spyOn(group_privilege_repository_1.GroupPrivilegeRepository.prototype, 'findOne')
32
- .mockResolvedValueOnce({ get: jest.fn().mockReturnValue(mockGroupPrivilegeAttr) });
33
- const groupPrivilege = yield group_privilege_1.GroupPrivilege.init(null, 1);
34
- expect(findOneMock).toBeCalledWith({
35
- where: { GroupPrivilegeId: 1 },
36
- transaction: null,
37
- });
38
- expect(groupPrivilege).toBeInstanceOf(group_privilege_1.GroupPrivilege);
39
- expect(groupPrivilege.GroupPrivilegeId).toEqual(mockGroupPrivilegeAttr.GroupPrivilegeId);
40
- expect(groupPrivilege.GroupCode).toEqual(mockGroupPrivilegeAttr.GroupCode);
41
- expect(groupPrivilege.PrivilegeCode).toEqual(mockGroupPrivilegeAttr.PrivilegeCode);
42
- expect(groupPrivilege.Status).toEqual(mockGroupPrivilegeAttr.Status);
43
- expect(groupPrivilege.CreatedAt).toEqual(mockGroupPrivilegeAttr.CreatedAt);
44
- expect(groupPrivilege.UpdatedAt).toEqual(mockGroupPrivilegeAttr.UpdatedAt);
45
- expect(groupPrivilege.CreatedById).toEqual(mockGroupPrivilegeAttr.CreatedById);
46
- expect(groupPrivilege.UpdatedById).toEqual(mockGroupPrivilegeAttr.UpdatedById);
47
- }));
48
- it('should throw ClassError when GroupPrivilegeAttr is not found', () => __awaiter(void 0, void 0, void 0, function* () {
49
- const findOneMock = jest
50
- .spyOn(group_privilege_repository_1.GroupPrivilegeRepository.prototype, 'findOne')
51
- .mockResolvedValueOnce(null);
52
- yield expect(group_privilege_1.GroupPrivilege.init(null, 1)).rejects.toThrow(general_1.ClassError);
53
- expect(findOneMock).toBeCalledWith({
54
- where: { GroupPrivilegeId: 1 },
55
- transaction: null,
56
- });
57
- }));
58
- it('should initialize with default values', () => __awaiter(void 0, void 0, void 0, function* () {
59
- const groupPrivilege = yield group_privilege_1.GroupPrivilege.init();
60
- expect(groupPrivilege).toBeInstanceOf(group_privilege_1.GroupPrivilege);
61
- expect(groupPrivilege.GroupPrivilegeId).toBeUndefined();
62
- expect(groupPrivilege.GroupCode).toBeUndefined();
63
- expect(groupPrivilege.PrivilegeCode).toBeUndefined();
64
- expect(groupPrivilege.Status).toBeUndefined();
65
- expect(groupPrivilege.CreatedAt).toBeUndefined();
66
- expect(groupPrivilege.UpdatedAt).toBeUndefined();
67
- expect(groupPrivilege.CreatedById).toBeUndefined();
68
- expect(groupPrivilege.UpdatedById).toBeUndefined();
69
- }));
70
- });
71
- //# sourceMappingURL=group-privilege.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"group-privilege.test.js","sourceRoot":"","sources":["../../../../../__tests__/unit/components/group-privilege/group-privilege.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- describe('LoginUser', () => {
2
- it('should be true', () => {
3
- expect(true).toBe(true);
4
- });
5
- });
6
- //# sourceMappingURL=login-user.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login-user.spec.js","sourceRoot":"","sources":["../../../../../__tests__/unit/components/login-user/login-user.spec.ts"],"names":[],"mappings":"AAuuBA,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}