@tomei/sso 0.64.1 → 0.66.0

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 (76) hide show
  1. package/dist/src/components/login-user/login-user.js +63 -64
  2. package/dist/src/components/login-user/login-user.js.map +1 -1
  3. package/dist/src/components/login-user/user.js +1 -1
  4. package/dist/src/components/login-user/user.js.map +1 -1
  5. package/dist/src/index.d.ts +1 -0
  6. package/dist/src/index.js +1 -0
  7. package/dist/src/index.js.map +1 -1
  8. package/dist/tsconfig.tsbuildinfo +1 -1
  9. package/package.json +5 -2
  10. package/src/components/login-user/login-user.ts +90 -89
  11. package/src/components/login-user/user.ts +1 -1
  12. package/src/index.ts +1 -0
  13. package/coverage/clover.xml +0 -1380
  14. package/coverage/coverage-final.json +0 -39
  15. package/coverage/lcov-report/base.css +0 -224
  16. package/coverage/lcov-report/block-navigation.js +0 -87
  17. package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.repository.ts.html +0 -160
  18. package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.ts.html +0 -919
  19. package/coverage/lcov-report/components/group-object-privilege/index.html +0 -131
  20. package/coverage/lcov-report/components/group-privilege/group-privilege.repository.ts.html +0 -172
  21. package/coverage/lcov-report/components/group-privilege/group-privilege.ts.html +0 -337
  22. package/coverage/lcov-report/components/group-privilege/index.html +0 -131
  23. package/coverage/lcov-report/components/group-system-access/group-system-access.repository.ts.html +0 -214
  24. package/coverage/lcov-report/components/group-system-access/group-system-access.ts.html +0 -355
  25. package/coverage/lcov-report/components/group-system-access/index.html +0 -131
  26. package/coverage/lcov-report/components/password-hash/index.html +0 -116
  27. package/coverage/lcov-report/components/password-hash/password-hash.service.ts.html +0 -127
  28. package/coverage/lcov-report/components/system-privilege/index.html +0 -116
  29. package/coverage/lcov-report/components/system-privilege/system-privilege.repository.ts.html +0 -139
  30. package/coverage/lcov-report/components/user-group/index.html +0 -131
  31. package/coverage/lcov-report/components/user-group/user-group.repository.ts.html +0 -142
  32. package/coverage/lcov-report/components/user-group/user-group.ts.html +0 -2377
  33. package/coverage/lcov-report/components/user-object-privilege/index.html +0 -131
  34. package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.repository.ts.html +0 -118
  35. package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.ts.html +0 -322
  36. package/coverage/lcov-report/components/user-privilege/index.html +0 -131
  37. package/coverage/lcov-report/components/user-privilege/user-privilege.repository.ts.html +0 -160
  38. package/coverage/lcov-report/components/user-privilege/user-privilege.ts.html +0 -2071
  39. package/coverage/lcov-report/components/user-system-access/index.html +0 -131
  40. package/coverage/lcov-report/components/user-system-access/user-system-access.repository.ts.html +0 -208
  41. package/coverage/lcov-report/components/user-system-access/user-system-access.ts.html +0 -2236
  42. package/coverage/lcov-report/enum/api-key.enum.ts.html +0 -100
  43. package/coverage/lcov-report/enum/group-type.enum.ts.html +0 -109
  44. package/coverage/lcov-report/enum/index.html +0 -206
  45. package/coverage/lcov-report/enum/index.ts.html +0 -103
  46. package/coverage/lcov-report/enum/login-status.enum.ts.html +0 -97
  47. package/coverage/lcov-report/enum/object-status.enum.ts.html +0 -97
  48. package/coverage/lcov-report/enum/user-status.enum.ts.html +0 -106
  49. package/coverage/lcov-report/enum/yn.enum.ts.html +0 -97
  50. package/coverage/lcov-report/favicon.png +0 -0
  51. package/coverage/lcov-report/index.html +0 -296
  52. package/coverage/lcov-report/models/group-object-privilege.entity.ts.html +0 -358
  53. package/coverage/lcov-report/models/group-privilege.entity.ts.html +0 -319
  54. package/coverage/lcov-report/models/group-reporting-user.entity.ts.html +0 -370
  55. package/coverage/lcov-report/models/group-system-access.entity.ts.html +0 -328
  56. package/coverage/lcov-report/models/group.entity.ts.html +0 -466
  57. package/coverage/lcov-report/models/index.html +0 -296
  58. package/coverage/lcov-report/models/staff.entity.ts.html +0 -358
  59. package/coverage/lcov-report/models/system-privilege.entity.ts.html +0 -355
  60. package/coverage/lcov-report/models/system.entity.ts.html +0 -424
  61. package/coverage/lcov-report/models/user-group.entity.ts.html +0 -358
  62. package/coverage/lcov-report/models/user-object-privilege.entity.ts.html +0 -355
  63. package/coverage/lcov-report/models/user-privilege.entity.ts.html +0 -319
  64. package/coverage/lcov-report/models/user-system-access.entity.ts.html +0 -346
  65. package/coverage/lcov-report/models/user.entity.ts.html +0 -685
  66. package/coverage/lcov-report/prettify.css +0 -1
  67. package/coverage/lcov-report/prettify.js +0 -2
  68. package/coverage/lcov-report/redis-client/index.html +0 -116
  69. package/coverage/lcov-report/redis-client/redis.service.ts.html +0 -310
  70. package/coverage/lcov-report/session/index.html +0 -116
  71. package/coverage/lcov-report/session/session.service.ts.html +0 -373
  72. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  73. package/coverage/lcov-report/sorter.js +0 -210
  74. package/coverage/lcov.info +0 -2223
  75. package/coverage/test-report.xml +0 -71
  76. package/sonar-project.properties +0 -23
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomei/sso",
3
- "version": "0.64.1",
3
+ "version": "0.66.0",
4
4
  "description": "Tomei SSO Package",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -71,7 +71,7 @@
71
71
  "sequelize-cli": "^6.6.3",
72
72
  "sequelize-typescript": "^2.1.6",
73
73
  "speakeasy": "^2.0.0",
74
- "uuid": "^9.0.1"
74
+ "uuid": "^11.1.0"
75
75
  },
76
76
  "lint-staged": {
77
77
  "*/**/*.{js,ts,tsx}": [
@@ -83,5 +83,8 @@
83
83
  "reportPath": "coverage",
84
84
  "reportFile": "test-report.xml",
85
85
  "indent": 2
86
+ },
87
+ "dependencies": {
88
+ "axios": "^1.13.2"
86
89
  }
87
90
  }
@@ -12,7 +12,8 @@ import { createHash, randomBytes, randomUUID } from 'crypto';
12
12
  import { UserGroupRepository } from '../user-group/user-group.repository';
13
13
  import GroupSystemAccessModel from '../../models/group-system-access.entity';
14
14
  import SystemModel from '../../models/system.entity';
15
- import { ApplicationConfig } from '@tomei/config';
15
+ import { ApplicationConfig, ComponentConfig } from '@tomei/config';
16
+ import axios from 'axios';
16
17
 
17
18
  export class LoginUser extends User implements ILoginUser {
18
19
  session = {
@@ -26,20 +27,24 @@ export class LoginUser extends User implements ILoginUser {
26
27
  ): Promise<LoginUser> {
27
28
  User._RedisService = await RedisService.init();
28
29
  if (userId) {
29
- if (dbTransaction) {
30
- User._Repository = new UserRepository();
31
- }
32
- const user = await User._Repository.findOne({
33
- where: {
34
- UserId: userId,
35
- },
36
- include: [
37
- {
38
- model: Staff,
30
+ const loginApiEndpoint = ComponentConfig.getComponentConfigValue(
31
+ '@tomei/sso',
32
+ 'loginApiEndpoint',
33
+ );
34
+
35
+ let payload = { UserId: userId };
36
+
37
+ const { data } = await axios.post(
38
+ `${loginApiEndpoint.baseUrl}${loginApiEndpoint.getProfile}`,
39
+ payload,
40
+ {
41
+ headers: {
42
+ 'Content-Type': 'application/json',
43
+ 'x-api-key': loginApiEndpoint.apiKey,
39
44
  },
40
- ],
41
- transaction: dbTransaction,
42
- });
45
+ },
46
+ );
47
+ const user = data.loginUser;
43
48
 
44
49
  if (!user) {
45
50
  throw new Error('Invalid credentials.');
@@ -54,21 +59,21 @@ export class LoginUser extends User implements ILoginUser {
54
59
  IDType: user?.IdType || null,
55
60
  ContactNo: user?.ContactNo || null,
56
61
  Email: user.Email,
57
- Password: user.Password,
62
+ Password: null,
58
63
  Status: user.Status,
59
- DefaultPasswordChangedYN: user.DefaultPasswordChangedYN,
60
- FirstLoginAt: user.FirstLoginAt,
61
- LastLoginAt: user.LastLoginAt,
62
- MFAEnabled: user.MFAEnabled,
63
- MFAConfig: user.MFAConfig,
64
- MFABypassYN: user.MFABypassYN,
65
- RecoveryEmail: user.RecoveryEmail,
66
- FailedLoginAttemptCount: user.FailedLoginAttemptCount,
67
- LastFailedLoginAt: user.LastFailedLoginAt,
68
- LastPasswordChangedAt: user.LastPasswordChangedAt,
69
- NeedToChangePasswordYN: user.NeedToChangePasswordYN,
70
- PasscodeHash: user.PasscodeHash,
71
- PasscodeUpdatedAt: user.PasscodeUpdatedAt,
64
+ DefaultPasswordChangedYN: null,
65
+ FirstLoginAt: null,
66
+ LastLoginAt: null,
67
+ MFAEnabled: null,
68
+ MFAConfig: null,
69
+ MFABypassYN: null,
70
+ RecoveryEmail: null,
71
+ FailedLoginAttemptCount: null,
72
+ LastFailedLoginAt: null,
73
+ LastPasswordChangedAt: null,
74
+ NeedToChangePasswordYN: null,
75
+ PasscodeHash: null,
76
+ PasscodeUpdatedAt: null,
72
77
  CreatedById: user.CreatedById,
73
78
  CreatedAt: user.CreatedAt,
74
79
  UpdatedById: user.UpdatedById,
@@ -99,21 +104,28 @@ export class LoginUser extends User implements ILoginUser {
99
104
  throw new Error('Session name is not set');
100
105
  }
101
106
 
102
- const userSession = await this._SessionService.retrieveUserSession(
103
- this.ObjectId,
104
- sessionName,
107
+ const loginApiEndpoint = ComponentConfig.getComponentConfigValue(
108
+ '@tomei/sso',
109
+ 'loginApiEndpoint',
105
110
  );
106
-
107
- const systemLogin = userSession.systemLogins.find(
108
- (system) => system.code === systemCode,
111
+ let payload = {
112
+ SystemCode: systemCode,
113
+ SessionName: sessionName,
114
+ PrivilegeName: privilegeName,
115
+ UserId: this.ObjectId,
116
+ };
117
+ const { data } = await axios.post(
118
+ `${loginApiEndpoint.baseUrl}${loginApiEndpoint.checkPrivileges}`,
119
+ payload,
120
+ {
121
+ headers: {
122
+ 'Content-Type': 'application/json',
123
+ 'x-api-key': loginApiEndpoint.apiKey,
124
+ },
125
+ },
109
126
  );
127
+ const hasPrivilege = data.hasPrivilege;
110
128
 
111
- if (!systemLogin) {
112
- return false;
113
- }
114
-
115
- const privileges = systemLogin.privileges;
116
- const hasPrivilege = privileges.includes(privilegeName);
117
129
  return hasPrivilege;
118
130
  } catch (error) {
119
131
  throw error;
@@ -131,28 +143,27 @@ export class LoginUser extends User implements ILoginUser {
131
143
  if (!sessionName) {
132
144
  throw new Error('Session name is not set');
133
145
  }
134
- const userSession = await this._SessionService.retrieveUserSession(
135
- userId,
136
- sessionName,
146
+ const loginApiEndpoint = ComponentConfig.getComponentConfigValue(
147
+ '@tomei/sso',
148
+ 'loginApiEndpoint',
137
149
  );
138
-
139
- if (userSession.systemLogins.length === 0) {
140
- throw new Error('Session expired.');
141
- }
142
-
143
- const systemLogin = userSession.systemLogins.find(
144
- (sl) => sl.code === systemCode,
150
+ let payload = {
151
+ SystemCode: systemCode,
152
+ SessionName: sessionName,
153
+ SessionId: sessionId,
154
+ UserId: userId,
155
+ };
156
+ const { data } = await axios.post(
157
+ `${loginApiEndpoint.baseUrl}${loginApiEndpoint.checkSession}`,
158
+ payload,
159
+ {
160
+ headers: {
161
+ 'Content-Type': 'application/json',
162
+ 'x-api-key': loginApiEndpoint.apiKey,
163
+ },
164
+ },
145
165
  );
146
-
147
- if (!systemLogin) {
148
- throw new Error('Session expired.');
149
- }
150
-
151
- if (systemLogin.sessionId !== sessionId) {
152
- throw new Error('Session expired.');
153
- }
154
-
155
- await this._SessionService.refreshDuration(userId, sessionName);
166
+ const systemLogin = data.systemLogin;
156
167
 
157
168
  return systemLogin;
158
169
  } catch (error) {
@@ -328,36 +339,26 @@ export class LoginUser extends User implements ILoginUser {
328
339
  throw new Error('Session name is not set in the configuration');
329
340
  }
330
341
 
331
- const userSession = await this._SessionService.retrieveUserSession(
332
- this.ObjectId,
333
- sessionName,
342
+ const loginApiEndpoint = ComponentConfig.getComponentConfigValue(
343
+ '@tomei/sso',
344
+ 'loginApiEndpoint',
334
345
  );
335
- const systemLogin = userSession.systemLogins.find(
336
- (system) => system.code === systemCode,
337
- );
338
-
339
- if (systemLogin) {
340
- const privileges = await this.getPrivileges(systemCode, dbTransaction);
341
- systemLogin.sessionId = sessionId;
342
- systemLogin.privileges = privileges;
343
- userSession.systemLogins.map((system) =>
344
- system.code === systemCode ? systemLogin : system,
345
- );
346
- } else {
347
- // if not, add new system login into the userSession
348
- const newLogin = {
349
- id: systemCode,
350
- code: systemCode,
351
- sessionId: sessionId,
352
- privileges: await this.getPrivileges(systemCode, dbTransaction),
353
- };
354
- userSession.systemLogins.push(newLogin);
355
- }
356
- // then update userSession inside the redis storage with 1 day duration of time-to-live
357
- this._SessionService.setUserSession(
358
- this.ObjectId,
359
- userSession,
360
- sessionName,
346
+ let payload = {
347
+ SystemCode: systemCode,
348
+ SessionName: sessionName,
349
+ SessionId: sessionId,
350
+ UserId: this.ObjectId,
351
+ };
352
+
353
+ await axios.post(
354
+ `${loginApiEndpoint.baseUrl}${loginApiEndpoint.setSession}`,
355
+ payload,
356
+ {
357
+ headers: {
358
+ 'Content-Type': 'application/json',
359
+ 'x-api-key': loginApiEndpoint.apiKey,
360
+ },
361
+ },
361
362
  );
362
363
  }
363
364
  }
@@ -1826,7 +1826,7 @@ export class User extends UserBase {
1826
1826
 
1827
1827
  // Part 2: Retrieve Parent Group System Access If Applicable
1828
1828
  // 2.1 Check if Params.group.InheritParentSystemAccessYN is "Y" and Params.group.ParentGroupCode is not empty
1829
- if (group.InheritParentPrivilegeYN === 'Y' && group.ParentGroupCode) {
1829
+ if (group.InheritParentSystemAccessYN === 'Y' && group.ParentGroupCode) {
1830
1830
  const GroupCode = group.ParentGroupCode;
1831
1831
  const parentGroup = await User._GroupRepo.findByPk(
1832
1832
  GroupCode,
package/src/index.ts CHANGED
@@ -6,3 +6,4 @@ export * from './session';
6
6
  export * from './enum';
7
7
  export * as ssoDb from './database';
8
8
  export * from './types';
9
+ export * from './models/user.entity';