@tomei/sso 0.27.0 → 0.28.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 (120) hide show
  1. package/__tests__/unit/components/system-privilege/system-privilege.spec.ts +0 -3
  2. package/coverage/clover.xml +1452 -1452
  3. package/coverage/coverage-final.json +47 -47
  4. package/coverage/lcov-report/base.css +224 -224
  5. package/coverage/lcov-report/block-navigation.js +87 -87
  6. package/coverage/lcov-report/components/group/group.repository.ts.html +117 -117
  7. package/coverage/lcov-report/components/group/group.ts.html +327 -327
  8. package/coverage/lcov-report/components/group/index.html +130 -130
  9. package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.repository.ts.html +117 -117
  10. package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.ts.html +321 -321
  11. package/coverage/lcov-report/components/group-object-privilege/index.html +130 -130
  12. package/coverage/lcov-report/components/group-privilege/group-privilege.repository.ts.html +117 -117
  13. package/coverage/lcov-report/components/group-privilege/group-privilege.ts.html +303 -303
  14. package/coverage/lcov-report/components/group-privilege/index.html +130 -130
  15. package/coverage/lcov-report/components/group-reporting-user/group-reporting-user.repository.ts.html +117 -117
  16. package/coverage/lcov-report/components/group-reporting-user/group-reporting-user.ts.html +327 -327
  17. package/coverage/lcov-report/components/group-reporting-user/index.html +130 -130
  18. package/coverage/lcov-report/components/group-system-access/group-system-access.repository.ts.html +117 -117
  19. package/coverage/lcov-report/components/group-system-access/group-system-access.ts.html +309 -309
  20. package/coverage/lcov-report/components/group-system-access/index.html +130 -130
  21. package/coverage/lcov-report/components/login-history/index.html +115 -115
  22. package/coverage/lcov-report/components/login-history/login-history.repository.ts.html +117 -117
  23. package/coverage/lcov-report/components/login-user/index.html +130 -130
  24. package/coverage/lcov-report/components/login-user/login-user.ts.html +5007 -5007
  25. package/coverage/lcov-report/components/login-user/user.repository.ts.html +117 -117
  26. package/coverage/lcov-report/components/password-hash/index.html +115 -115
  27. package/coverage/lcov-report/components/password-hash/password-hash.service.ts.html +126 -126
  28. package/coverage/lcov-report/components/system/index.html +130 -130
  29. package/coverage/lcov-report/components/system/system.repository.ts.html +117 -117
  30. package/coverage/lcov-report/components/system/system.ts.html +909 -909
  31. package/coverage/lcov-report/components/system-privilege/index.html +130 -130
  32. package/coverage/lcov-report/components/system-privilege/system-privilege.repository.ts.html +120 -120
  33. package/coverage/lcov-report/components/system-privilege/system-privilege.ts.html +390 -390
  34. package/coverage/lcov-report/components/user-group/index.html +130 -130
  35. package/coverage/lcov-report/components/user-group/user-group.repository.ts.html +117 -117
  36. package/coverage/lcov-report/components/user-group/user-group.ts.html +354 -354
  37. package/coverage/lcov-report/components/user-object-privilege/index.html +130 -130
  38. package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.repository.ts.html +117 -117
  39. package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.ts.html +312 -312
  40. package/coverage/lcov-report/components/user-privilege/index.html +130 -130
  41. package/coverage/lcov-report/components/user-privilege/user-privilege.repository.ts.html +117 -117
  42. package/coverage/lcov-report/components/user-privilege/user-privilege.ts.html +306 -306
  43. package/coverage/lcov-report/components/user-system-access/index.html +130 -130
  44. package/coverage/lcov-report/components/user-system-access/user-system-access.repository.ts.html +117 -117
  45. package/coverage/lcov-report/components/user-system-access/user-system-access.ts.html +312 -312
  46. package/coverage/lcov-report/enum/group-type.enum.ts.html +108 -108
  47. package/coverage/lcov-report/enum/index.html +160 -160
  48. package/coverage/lcov-report/enum/index.ts.html +93 -93
  49. package/coverage/lcov-report/enum/user-status.enum.ts.html +105 -105
  50. package/coverage/lcov-report/enum/yn.enum.ts.html +96 -96
  51. package/coverage/lcov-report/index.html +370 -370
  52. package/coverage/lcov-report/models/group-object-privilege.entity.ts.html +333 -333
  53. package/coverage/lcov-report/models/group-privilege.entity.ts.html +315 -315
  54. package/coverage/lcov-report/models/group-reporting-user.entity.ts.html +339 -339
  55. package/coverage/lcov-report/models/group-system-access.entity.ts.html +324 -324
  56. package/coverage/lcov-report/models/group.entity.ts.html +435 -435
  57. package/coverage/lcov-report/models/index.html +310 -310
  58. package/coverage/lcov-report/models/login-history.entity.ts.html +252 -252
  59. package/coverage/lcov-report/models/staff.entity.ts.html +411 -411
  60. package/coverage/lcov-report/models/system-privilege.entity.ts.html +354 -354
  61. package/coverage/lcov-report/models/system.entity.ts.html +423 -423
  62. package/coverage/lcov-report/models/user-group.entity.ts.html +354 -354
  63. package/coverage/lcov-report/models/user-object-privilege.entity.ts.html +330 -330
  64. package/coverage/lcov-report/models/user-privilege.entity.ts.html +315 -315
  65. package/coverage/lcov-report/models/user-system-access.entity.ts.html +315 -315
  66. package/coverage/lcov-report/models/user.entity.ts.html +522 -522
  67. package/coverage/lcov-report/prettify.css +1 -1
  68. package/coverage/lcov-report/prettify.js +2 -2
  69. package/coverage/lcov-report/redis-client/index.html +115 -115
  70. package/coverage/lcov-report/redis-client/redis.service.ts.html +240 -240
  71. package/coverage/lcov-report/session/index.html +115 -115
  72. package/coverage/lcov-report/session/session.service.ts.html +246 -246
  73. package/coverage/lcov-report/sorter.js +196 -196
  74. package/coverage/lcov.info +2490 -2490
  75. package/coverage/test-report.xml +128 -128
  76. package/dist/__tests__/unit/components/system-privilege/system-privilege.spec.js +0 -3
  77. package/dist/__tests__/unit/components/system-privilege/system-privilege.spec.js.map +1 -1
  78. package/dist/src/components/login-user/interfaces/check-user-info-duplicated.interface.d.ts +1 -0
  79. package/dist/src/components/login-user/interfaces/user-info.interface.d.ts +1 -0
  80. package/dist/src/components/login-user/login-user.d.ts +4 -2
  81. package/dist/src/components/login-user/login-user.js +33 -7
  82. package/dist/src/components/login-user/login-user.js.map +1 -1
  83. package/dist/src/components/system-privilege/system-privilege.d.ts +0 -2
  84. package/dist/src/components/system-privilege/system-privilege.js +0 -8
  85. package/dist/src/components/system-privilege/system-privilege.js.map +1 -1
  86. package/dist/src/enum/index.d.ts +1 -0
  87. package/dist/src/enum/index.js +1 -0
  88. package/dist/src/enum/index.js.map +1 -1
  89. package/dist/src/enum/login-status.enum.d.ts +4 -0
  90. package/dist/src/enum/login-status.enum.js +9 -0
  91. package/dist/src/enum/login-status.enum.js.map +1 -0
  92. package/dist/src/interfaces/system-privilege.interface.d.ts +0 -1
  93. package/dist/src/models/login-history.entity.d.ts +2 -0
  94. package/dist/src/models/login-history.entity.js +8 -0
  95. package/dist/src/models/login-history.entity.js.map +1 -1
  96. package/dist/src/models/system-privilege.entity.d.ts +0 -1
  97. package/dist/src/models/system-privilege.entity.js +1 -9
  98. package/dist/src/models/system-privilege.entity.js.map +1 -1
  99. package/dist/src/models/user.entity.d.ts +1 -0
  100. package/dist/src/models/user.entity.js +7 -0
  101. package/dist/src/models/user.entity.js.map +1 -1
  102. package/dist/tsconfig.tsbuildinfo +1 -1
  103. package/migrations/20240314080602-create-user-table.js +4 -0
  104. package/migrations/20240314080605-create-login-history-table.js +4 -0
  105. package/migrations/20240527064926-create-system-privilege-table.js +1 -5
  106. package/migrations/20240528023018-user-system-access-table.js +75 -75
  107. package/migrations/20240528032229-user-privilege-table.js +75 -75
  108. package/migrations/20240528063003-create-group-privilege-table.js +75 -75
  109. package/migrations/20240528063107-create-user-object-privilege-table.js +83 -83
  110. package/package.json +1 -1
  111. package/src/components/login-user/interfaces/check-user-info-duplicated.interface.ts +1 -0
  112. package/src/components/login-user/interfaces/user-info.interface.ts +1 -0
  113. package/src/components/login-user/login-user.ts +39 -8
  114. package/src/components/system-privilege/system-privilege.ts +0 -10
  115. package/src/enum/index.ts +1 -0
  116. package/src/enum/login-status.enum.ts +4 -0
  117. package/src/interfaces/system-privilege.interface.ts +0 -1
  118. package/src/models/login-history.entity.ts +7 -0
  119. package/src/models/system-privilege.entity.ts +1 -8
  120. package/src/models/user.entity.ts +6 -0
@@ -6,6 +6,7 @@ export interface IUserInfo {
6
6
  IDNo: string;
7
7
  Email: string;
8
8
  ContactNo: string;
9
+ UserName: string;
9
10
  UserId?: number;
10
11
  Password: string;
11
12
  staffs?: any;
@@ -11,7 +11,6 @@ import { ISystemLogin } from '../../../src/interfaces/system-login.interface';
11
11
  import Staff from '../../models/staff.entity';
12
12
  import SystemPrivilege from '../../models/system-privilege.entity';
13
13
  import LoginHistory from '../../models/login-history.entity';
14
- import UserGroup from '../../models/user-group.entity';
15
14
  import { YN } from '../../enum/yn.enum';
16
15
  import { UserStatus } from '../../enum';
17
16
  import { ApplicationConfig, ComponentConfig } from '@tomei/config';
@@ -31,10 +30,12 @@ import { UserObjectPrivilegeRepository } from '../user-object-privilege/user-obj
31
30
  import GroupPrivilegeModel from '../../models/group-privilege.entity';
32
31
  import { GroupObjectPrivilegeRepository } from '../group-object-privilege/group-object-privilege.repository';
33
32
  import * as speakeasy from 'speakeasy';
33
+ import { LoginStatusEnum } from '../../enum/login-status.enum';
34
34
 
35
35
  export class LoginUser extends LoginUserBase {
36
36
  ObjectId: string;
37
37
  Email: string;
38
+ private _UserName: string;
38
39
  private _Password: string;
39
40
  private _Status: UserStatus;
40
41
  private _DefaultPasswordChangedYN: YN;
@@ -102,6 +103,14 @@ export class LoginUser extends LoginUserBase {
102
103
  this._Status = value;
103
104
  }
104
105
 
106
+ get UserName(): string {
107
+ return this._UserName;
108
+ }
109
+
110
+ set UserName(value: string) {
111
+ this._UserName = value;
112
+ }
113
+
105
114
  get DefaultPasswordChangedYN(): YN {
106
115
  return this._DefaultPasswordChangedYN;
107
116
  }
@@ -244,6 +253,7 @@ export class LoginUser extends LoginUserBase {
244
253
  // set all the class properties
245
254
  if (userInfo) {
246
255
  this.UserId = userInfo.UserId;
256
+ this.UserName = userInfo.FullName;
247
257
  this.FullName = userInfo.FullName;
248
258
  this.IDNo = userInfo.IDNo;
249
259
  this.Email = userInfo.Email;
@@ -295,6 +305,7 @@ export class LoginUser extends LoginUserBase {
295
305
  if (user) {
296
306
  const userAttr: IUserAttr = {
297
307
  UserId: user.UserId,
308
+ UserName: user.UserName,
298
309
  FullName: user.Staff.FullName,
299
310
  IDNo: user.Staff.IdNo,
300
311
  ContactNo: user.Staff.Mobile,
@@ -356,6 +367,7 @@ export class LoginUser extends LoginUserBase {
356
367
  if (user) {
357
368
  const userAttr: IUserAttr = {
358
369
  UserId: user.UserId,
370
+ UserName: user.UserName,
359
371
  FullName: user.Staff.FullName,
360
372
  IDNo: user.Staff.IdNo,
361
373
  ContactNo: user.Staff.Mobile,
@@ -491,6 +503,7 @@ export class LoginUser extends LoginUserBase {
491
503
  await LoginUser._Repository.update(
492
504
  {
493
505
  FullName: this.FullName,
506
+ UserName: this.UserName,
494
507
  IDNo: this.IDNo,
495
508
  Email: this.Email,
496
509
  ContactNo: this.ContactNo,
@@ -554,6 +567,7 @@ export class LoginUser extends LoginUserBase {
554
567
  SystemCode: system.SystemCode,
555
568
  OriginIp: ipAddress,
556
569
  CreatedAt: new Date(),
570
+ LoginStatus: LoginStatusEnum.SUCCESS,
557
571
  dbTransaction,
558
572
  });
559
573
 
@@ -569,6 +583,14 @@ export class LoginUser extends LoginUserBase {
569
583
 
570
584
  return `${this.UserId}:${sessionId}`;
571
585
  } catch (error) {
586
+ await LoginUser._LoginHistoryRepository.create({
587
+ UserId: this.UserId,
588
+ SystemCode: systemCode,
589
+ OriginIp: ipAddress,
590
+ LoginStatus: LoginStatusEnum.FAILURE,
591
+ CreatedAt: new Date(),
592
+ dbTransaction,
593
+ });
572
594
  throw error;
573
595
  }
574
596
  }
@@ -814,12 +836,12 @@ export class LoginUser extends LoginUserBase {
814
836
  // Add privileges from the group to the privileges array
815
837
  const groupPrivileges: string[] = [];
816
838
  for (const groupPrivilege of group.GroupPrivileges) {
817
- groupPrivileges.push(groupPrivilege.Privilege.Name);
839
+ groupPrivileges.push(groupPrivilege.Privilege.PrivilegeCode);
818
840
  }
819
841
 
820
842
  const ops: string[] = [];
821
843
  for (const objectPrivilege of objectPrivileges) {
822
- ops.push(objectPrivilege.Privilege.Name);
844
+ ops.push(objectPrivilege.Privilege.PrivilegeCode);
823
845
  }
824
846
 
825
847
  privileges = [...privileges, ...groupPrivileges, ...ops];
@@ -860,7 +882,9 @@ export class LoginUser extends LoginUserBase {
860
882
  transaction: dbTransaction,
861
883
  });
862
884
 
863
- const privileges: string[] = userPrivileges.map((u) => u.Privilege.Name);
885
+ const privileges: string[] = userPrivileges.map(
886
+ (u) => u.Privilege.PrivilegeCode,
887
+ );
864
888
  return privileges;
865
889
  } catch (error) {
866
890
  throw error;
@@ -888,7 +912,7 @@ export class LoginUser extends LoginUserBase {
888
912
  });
889
913
 
890
914
  const privilegesCodes: string[] = userObjectPrivileges.map(
891
- (u) => u.Privilege.Name,
915
+ (u) => u.Privilege.PrivilegeCode,
892
916
  );
893
917
  return privilegesCodes;
894
918
  } catch (error) {
@@ -985,7 +1009,7 @@ export class LoginUser extends LoginUserBase {
985
1009
  try {
986
1010
  //Part 1: Prepare Query Params
987
1011
  //Params is all optional but at least one is required.
988
- const { Email, IdType, IdNo, ContactNo } = query;
1012
+ const { Email, UserName, IdType, IdNo, ContactNo } = query;
989
1013
  //Prepare the Params to be used as OR operation in SQL query.
990
1014
  const where = {
991
1015
  [Op.or]: {},
@@ -993,6 +1017,10 @@ export class LoginUser extends LoginUserBase {
993
1017
  if (Email) {
994
1018
  where[Op.or]['Email'] = Email;
995
1019
  }
1020
+
1021
+ if (UserName) {
1022
+ where[Op.or]['UserName'] = UserName;
1023
+ }
996
1024
  //If Params.IdNo is not null, then Params.IdType is required and vice versa.
997
1025
  if (IdType && IdNo) {
998
1026
  where[Op.or]['IdType'] = IdType;
@@ -1269,16 +1297,17 @@ export class LoginUser extends LoginUserBase {
1269
1297
 
1270
1298
  //Part 2: Validation
1271
1299
  //Make sure Params.user.Email got values. If not, throw new ClassError
1272
- if (!user.Email) {
1300
+ if (!user.Email && !user.UserName) {
1273
1301
  throw new ClassError(
1274
1302
  'LoginUser',
1275
1303
  'LoginUserErrMsg0X',
1276
- 'Email is required',
1304
+ 'Email and Username is required',
1277
1305
  );
1278
1306
  }
1279
1307
  //Check if user info exists, call LoginUser.CheckUserInfoDuplicated method
1280
1308
  await LoginUser.checkUserInfoDuplicated(dbTransaction, {
1281
1309
  Email: user.Email,
1310
+ UserName: user.UserName,
1282
1311
  IdType: user.IDType,
1283
1312
  IdNo: user.IDNo,
1284
1313
  ContactNo: user.ContactNo,
@@ -1290,6 +1319,7 @@ export class LoginUser extends LoginUserBase {
1290
1319
  //Part 4: Insert User Record
1291
1320
  //Set userToBeCreated to the instantiation of new LoginUser (using private constructor)
1292
1321
  const userInfo: IUserAttr = {
1322
+ UserName: user.UserName,
1293
1323
  FullName: user.FullName,
1294
1324
  IDNo: user.IDNo,
1295
1325
  Email: user.Email,
@@ -1316,6 +1346,7 @@ export class LoginUser extends LoginUserBase {
1316
1346
  const newUser = await LoginUser._Repository.create(
1317
1347
  {
1318
1348
  Email: userInfo.Email,
1349
+ UserName: userInfo.UserName,
1319
1350
  Password: userInfo.Password,
1320
1351
  Status: userInfo.Status,
1321
1352
  DefaultPasswordChangedYN: userInfo.DefaultPasswordChangedYN,
@@ -24,14 +24,6 @@ export class SystemPrivilege extends ObjectBase {
24
24
  this.ObjectId = value;
25
25
  }
26
26
 
27
- set Name(value: string) {
28
- this.ObjectName = value;
29
- }
30
-
31
- get Name() {
32
- return this.ObjectName;
33
- }
34
-
35
27
  get CreatedAt() {
36
28
  return this._CreatedAt;
37
29
  }
@@ -56,7 +48,6 @@ export class SystemPrivilege extends ObjectBase {
56
48
  if (systemPrivilegeAttr) {
57
49
  this.ObjectId = systemPrivilegeAttr.PrivilegeCode;
58
50
  this.SystemCode = systemPrivilegeAttr.SystemCode;
59
- this.ObjectName = systemPrivilegeAttr.Name;
60
51
  this.Description = systemPrivilegeAttr.Description;
61
52
  this.Status = systemPrivilegeAttr.Status;
62
53
  this._CreatedById = systemPrivilegeAttr.CreatedById;
@@ -79,7 +70,6 @@ export class SystemPrivilege extends ObjectBase {
79
70
  if (systemPrivilegeAttr) {
80
71
  systemPrivilege.ObjectId = systemPrivilegeAttr.PrivilegeCode;
81
72
  systemPrivilege.SystemCode = systemPrivilegeAttr.SystemCode;
82
- systemPrivilege.ObjectName = systemPrivilegeAttr.Name;
83
73
  systemPrivilege.Description = systemPrivilegeAttr.Description;
84
74
  systemPrivilege.Status = systemPrivilegeAttr.Status;
85
75
  systemPrivilege._CreatedById = systemPrivilegeAttr.CreatedById;
package/src/enum/index.ts CHANGED
@@ -2,3 +2,4 @@ export * from './yn.enum';
2
2
  export * from './user-status.enum';
3
3
  export * from './group-type.enum';
4
4
  export * from './object-status.enum';
5
+ export * from './login-status.enum';
@@ -0,0 +1,4 @@
1
+ export enum LoginStatusEnum {
2
+ SUCCESS = 'Success',
3
+ FAILURE = 'Failure',
4
+ }
@@ -1,7 +1,6 @@
1
1
  export interface ISystemPrivilegeAttr {
2
2
  PrivilegeCode: string;
3
3
  SystemCode: string;
4
- Name: string;
5
4
  Description: string;
6
5
  Status: string;
7
6
  CreatedById: number;
@@ -9,6 +9,7 @@ import {
9
9
  } from 'sequelize-typescript';
10
10
  import User from './user.entity';
11
11
  import SystemModel from './system.entity';
12
+ import { LoginStatusEnum } from '../enum/login-status.enum';
12
13
 
13
14
  @Table({
14
15
  tableName: 'sso_LoginHistory',
@@ -39,6 +40,12 @@ export default class LoginHistory extends Model {
39
40
  })
40
41
  SystemCode: number;
41
42
 
43
+ @Column({
44
+ allowNull: true,
45
+ type: DataType.STRING(191),
46
+ })
47
+ LoginStatus: LoginStatusEnum;
48
+
42
49
  @Column({
43
50
  allowNull: true,
44
51
  type: DataType.STRING(191),
@@ -23,7 +23,7 @@ export default class SystemPrivilegeModel extends Model {
23
23
  @Column({
24
24
  primaryKey: true,
25
25
  allowNull: false,
26
- type: DataType.STRING(10),
26
+ type: DataType.STRING(50),
27
27
  field: 'PrivilegeCode',
28
28
  })
29
29
  PrivilegeCode: string;
@@ -36,13 +36,6 @@ export default class SystemPrivilegeModel extends Model {
36
36
  })
37
37
  SystemCode: string;
38
38
 
39
- @Column({
40
- allowNull: false,
41
- type: DataType.STRING(200),
42
- field: 'Name',
43
- })
44
- Name: string;
45
-
46
39
  @Column({
47
40
  allowNull: true,
48
41
  type: DataType.STRING(3000),
@@ -40,6 +40,12 @@ export default class User extends Model {
40
40
  })
41
41
  Email: string;
42
42
 
43
+ @Column({
44
+ allowNull: true,
45
+ type: DataType.STRING,
46
+ })
47
+ UserName: string;
48
+
43
49
  @Column({
44
50
  allowNull: false,
45
51
  type: DataType.STRING,