@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.
- package/dist/src/components/login-user/login-user.js +63 -64
- package/dist/src/components/login-user/login-user.js.map +1 -1
- package/dist/src/components/login-user/user.js +1 -1
- package/dist/src/components/login-user/user.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -2
- package/src/components/login-user/login-user.ts +90 -89
- package/src/components/login-user/user.ts +1 -1
- package/src/index.ts +1 -0
- package/coverage/clover.xml +0 -1380
- package/coverage/coverage-final.json +0 -39
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.repository.ts.html +0 -160
- package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.ts.html +0 -919
- package/coverage/lcov-report/components/group-object-privilege/index.html +0 -131
- package/coverage/lcov-report/components/group-privilege/group-privilege.repository.ts.html +0 -172
- package/coverage/lcov-report/components/group-privilege/group-privilege.ts.html +0 -337
- package/coverage/lcov-report/components/group-privilege/index.html +0 -131
- package/coverage/lcov-report/components/group-system-access/group-system-access.repository.ts.html +0 -214
- package/coverage/lcov-report/components/group-system-access/group-system-access.ts.html +0 -355
- package/coverage/lcov-report/components/group-system-access/index.html +0 -131
- package/coverage/lcov-report/components/password-hash/index.html +0 -116
- package/coverage/lcov-report/components/password-hash/password-hash.service.ts.html +0 -127
- package/coverage/lcov-report/components/system-privilege/index.html +0 -116
- package/coverage/lcov-report/components/system-privilege/system-privilege.repository.ts.html +0 -139
- package/coverage/lcov-report/components/user-group/index.html +0 -131
- package/coverage/lcov-report/components/user-group/user-group.repository.ts.html +0 -142
- package/coverage/lcov-report/components/user-group/user-group.ts.html +0 -2377
- package/coverage/lcov-report/components/user-object-privilege/index.html +0 -131
- package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.repository.ts.html +0 -118
- package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.ts.html +0 -322
- package/coverage/lcov-report/components/user-privilege/index.html +0 -131
- package/coverage/lcov-report/components/user-privilege/user-privilege.repository.ts.html +0 -160
- package/coverage/lcov-report/components/user-privilege/user-privilege.ts.html +0 -2071
- package/coverage/lcov-report/components/user-system-access/index.html +0 -131
- package/coverage/lcov-report/components/user-system-access/user-system-access.repository.ts.html +0 -208
- package/coverage/lcov-report/components/user-system-access/user-system-access.ts.html +0 -2236
- package/coverage/lcov-report/enum/api-key.enum.ts.html +0 -100
- package/coverage/lcov-report/enum/group-type.enum.ts.html +0 -109
- package/coverage/lcov-report/enum/index.html +0 -206
- package/coverage/lcov-report/enum/index.ts.html +0 -103
- package/coverage/lcov-report/enum/login-status.enum.ts.html +0 -97
- package/coverage/lcov-report/enum/object-status.enum.ts.html +0 -97
- package/coverage/lcov-report/enum/user-status.enum.ts.html +0 -106
- package/coverage/lcov-report/enum/yn.enum.ts.html +0 -97
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -296
- package/coverage/lcov-report/models/group-object-privilege.entity.ts.html +0 -358
- package/coverage/lcov-report/models/group-privilege.entity.ts.html +0 -319
- package/coverage/lcov-report/models/group-reporting-user.entity.ts.html +0 -370
- package/coverage/lcov-report/models/group-system-access.entity.ts.html +0 -328
- package/coverage/lcov-report/models/group.entity.ts.html +0 -466
- package/coverage/lcov-report/models/index.html +0 -296
- package/coverage/lcov-report/models/staff.entity.ts.html +0 -358
- package/coverage/lcov-report/models/system-privilege.entity.ts.html +0 -355
- package/coverage/lcov-report/models/system.entity.ts.html +0 -424
- package/coverage/lcov-report/models/user-group.entity.ts.html +0 -358
- package/coverage/lcov-report/models/user-object-privilege.entity.ts.html +0 -355
- package/coverage/lcov-report/models/user-privilege.entity.ts.html +0 -319
- package/coverage/lcov-report/models/user-system-access.entity.ts.html +0 -346
- package/coverage/lcov-report/models/user.entity.ts.html +0 -685
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/redis-client/index.html +0 -116
- package/coverage/lcov-report/redis-client/redis.service.ts.html +0 -310
- package/coverage/lcov-report/session/index.html +0 -116
- package/coverage/lcov-report/session/session.service.ts.html +0 -373
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -210
- package/coverage/lcov.info +0 -2223
- package/coverage/test-report.xml +0 -71
- package/sonar-project.properties +0 -23
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tomei/sso",
|
|
3
|
-
"version": "0.
|
|
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": "^
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
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:
|
|
62
|
+
Password: null,
|
|
58
63
|
Status: user.Status,
|
|
59
|
-
DefaultPasswordChangedYN:
|
|
60
|
-
FirstLoginAt:
|
|
61
|
-
LastLoginAt:
|
|
62
|
-
MFAEnabled:
|
|
63
|
-
MFAConfig:
|
|
64
|
-
MFABypassYN:
|
|
65
|
-
RecoveryEmail:
|
|
66
|
-
FailedLoginAttemptCount:
|
|
67
|
-
LastFailedLoginAt:
|
|
68
|
-
LastPasswordChangedAt:
|
|
69
|
-
NeedToChangePasswordYN:
|
|
70
|
-
PasscodeHash:
|
|
71
|
-
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
|
|
103
|
-
|
|
104
|
-
|
|
107
|
+
const loginApiEndpoint = ComponentConfig.getComponentConfigValue(
|
|
108
|
+
'@tomei/sso',
|
|
109
|
+
'loginApiEndpoint',
|
|
105
110
|
);
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
|
135
|
-
|
|
136
|
-
|
|
146
|
+
const loginApiEndpoint = ComponentConfig.getComponentConfigValue(
|
|
147
|
+
'@tomei/sso',
|
|
148
|
+
'loginApiEndpoint',
|
|
137
149
|
);
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
|
332
|
-
|
|
333
|
-
|
|
342
|
+
const loginApiEndpoint = ComponentConfig.getComponentConfigValue(
|
|
343
|
+
'@tomei/sso',
|
|
344
|
+
'loginApiEndpoint',
|
|
334
345
|
);
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
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.
|
|
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