@tomei/sso 0.66.0 → 0.66.1-test.2
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/.commitlintrc.json +22 -22
- package/.gitlab-ci.yml +237 -16
- package/.husky/commit-msg +15 -15
- package/.husky/pre-commit +7 -7
- package/.prettierrc +4 -4
- package/Jenkinsfile +57 -57
- package/README.md +23 -23
- package/__tests__/unit/components/api-key/api-key.spec.ts +201 -0
- package/__tests__/unit/components/group/group.spec.ts +85 -79
- package/__tests__/unit/components/group-object-privilege/group-object-privilege.spec.ts +88 -88
- package/__tests__/unit/components/group-privilege/group-privilege.spec.ts +68 -68
- package/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.ts +74 -66
- package/__tests__/unit/components/group-system-access/group-system-access.spec.ts +83 -83
- package/__tests__/unit/components/login-user/l.spec.ts +746 -746
- package/__tests__/unit/components/login-user/login.spec.ts +2358 -1164
- package/__tests__/unit/components/password-hash/password-hash.service.spec.ts +31 -31
- package/__tests__/unit/components/system/system.spec.ts +255 -254
- package/__tests__/unit/components/system-privilege/system-privilege.spec.ts +83 -83
- package/__tests__/unit/components/user-group/user-group.spec.ts +86 -86
- package/__tests__/unit/components/user-object-privilege/user-object-privilege.spec.ts +78 -78
- package/__tests__/unit/components/user-password-history/user-password-history.spec.ts +165 -0
- package/__tests__/unit/components/user-privilege/user-privilege.spec.ts +72 -72
- package/__tests__/unit/components/user-reporting-hierarchy/user-reporting-hierarchy.spec.ts +233 -0
- package/__tests__/unit/components/user-system-access/user-system-access.spec.ts +89 -89
- package/__tests__/unit/redis-client/redis.service.spec.ts +23 -23
- package/__tests__/unit/session/session.service.spec.ts +47 -47
- package/__tests__/unit/system-privilege/system-privilage.spec.ts +91 -91
- package/coverage/cobertura-coverage.xml +6837 -0
- package/coverage/test-report.xml +161 -0
- package/create-sso-user.sql +39 -39
- package/dist/__tests__/unit/components/{group-privilege/group-privilege.test.d.ts → api-key/api-key.spec.d.ts} +1 -1
- package/dist/__tests__/unit/components/api-key/api-key.spec.js +158 -0
- package/dist/__tests__/unit/components/api-key/api-key.spec.js.map +1 -0
- package/dist/__tests__/unit/components/group/group.spec.js +4 -0
- package/dist/__tests__/unit/components/group/group.spec.js.map +1 -1
- package/dist/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.js +9 -1
- package/dist/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.js.map +1 -1
- package/dist/__tests__/unit/components/login-user/login.spec.js +703 -0
- package/dist/__tests__/unit/components/login-user/login.spec.js.map +1 -1
- package/dist/__tests__/unit/components/system/system.spec.js +1 -0
- package/dist/__tests__/unit/components/system/system.spec.js.map +1 -1
- package/dist/__tests__/unit/components/user-password-history/user-password-history.spec.d.ts +1 -0
- package/dist/__tests__/unit/components/user-password-history/user-password-history.spec.js +138 -0
- package/dist/__tests__/unit/components/user-password-history/user-password-history.spec.js.map +1 -0
- package/dist/__tests__/unit/components/user-reporting-hierarchy/user-reporting-hierarchy.spec.d.ts +1 -0
- package/dist/__tests__/unit/components/user-reporting-hierarchy/user-reporting-hierarchy.spec.js +182 -0
- package/dist/__tests__/unit/components/user-reporting-hierarchy/user-reporting-hierarchy.spec.js.map +1 -0
- package/dist/src/components/login-user/login-user.js +64 -63
- package/dist/src/components/login-user/login-user.js.map +1 -1
- package/dist/src/components/login-user/user.d.ts +5 -0
- package/dist/src/components/login-user/user.js +39 -0
- package/dist/src/components/login-user/user.js.map +1 -1
- package/dist/src/components/user-password-history/user-password-history.d.ts +1 -0
- package/dist/src/components/user-password-history/user-password-history.js +41 -2
- package/dist/src/components/user-password-history/user-password-history.js.map +1 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.js +0 -1
- package/dist/src/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/eslint.config.mjs +58 -58
- package/jest.config.js +16 -14
- package/migrations/20240314080602-create-user-table.js +124 -124
- package/migrations/20240314080603-create-user-group-table.js +85 -85
- package/migrations/20240314080604-create-user-user-group-table.js +55 -55
- package/migrations/20240314080605-create-login-history-table.js +53 -53
- package/migrations/20240527064925-create-system-table.js +78 -78
- package/migrations/20240527064926-create-system-privilege-table.js +71 -71
- package/migrations/20240527065342-create-group-table.js +93 -93
- package/migrations/20240527065633-create-group-reporting-user-table.js +76 -76
- package/migrations/20240528011551-create-group-system-access-table.js +72 -72
- package/migrations/20240528023018-user-system-access-table.js +75 -75
- package/migrations/20240528032229-user-privilege-table.js +76 -76
- package/migrations/20240528063003-create-group-privilege-table.js +76 -76
- package/migrations/20240528063051-create-group-object-privilege-table.js +84 -84
- package/migrations/20240528063107-create-user-object-privilege-table.js +84 -84
- package/migrations/20240528063108-create-api-key-table.js +85 -85
- package/migrations/20241104104802-create-building-table.js +95 -95
- package/migrations/20250108091132-add-area-manager-user-id-to-building-table.js +14 -14
- package/migrations/20250108091133-add-passcode-to-user-table.js +36 -36
- package/migrations/20250210115636-create-user-reporting-hierarchy.js +76 -76
- package/migrations/20250326043818-crate-user-password-history.js +42 -42
- package/migrations/20250610070720-added-MFBypassYN-to-sso-user.js +30 -30
- package/migrations/20250805085707-add-bulk-approval-code-to-sso-user.js +29 -0
- package/package.json +87 -90
- package/sampledotenv +7 -7
- package/src/components/login-user/login-user.ts +89 -90
- package/src/components/login-user/user.ts +68 -0
- package/src/components/user-password-history/user-password-history.ts +57 -6
- package/src/index.ts +0 -1
- package/tsconfig.build.json +5 -5
- package/tsconfig.json +23 -23
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js +0 -71
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js.map +0 -1
- package/dist/__tests__/unit/components/login-user/login-user.spec.d.ts +0 -0
- package/dist/__tests__/unit/components/login-user/login-user.spec.js +0 -6
- package/dist/__tests__/unit/components/login-user/login-user.spec.js.map +0 -1
|
@@ -13,13 +13,13 @@ exports.LoginUser = void 0;
|
|
|
13
13
|
const user_1 = require("./user");
|
|
14
14
|
const group_entity_1 = require("../../models/group.entity");
|
|
15
15
|
const redis_service_1 = require("../../redis-client/redis.service");
|
|
16
|
+
const user_repository_1 = require("./user.repository");
|
|
16
17
|
const staff_entity_1 = require("../../models/staff.entity");
|
|
17
18
|
const user_entity_1 = require("../../models/user.entity");
|
|
18
19
|
const user_group_repository_1 = require("../user-group/user-group.repository");
|
|
19
20
|
const group_system_access_entity_1 = require("../../models/group-system-access.entity");
|
|
20
21
|
const system_entity_1 = require("../../models/system.entity");
|
|
21
22
|
const config_1 = require("@tomei/config");
|
|
22
|
-
const axios_1 = require("axios");
|
|
23
23
|
class LoginUser extends user_1.User {
|
|
24
24
|
constructor() {
|
|
25
25
|
super(...arguments);
|
|
@@ -31,15 +31,20 @@ class LoginUser extends user_1.User {
|
|
|
31
31
|
return __awaiter(this, arguments, void 0, function* (sessionService, userId, dbTransaction = null) {
|
|
32
32
|
user_1.User._RedisService = yield redis_service_1.RedisService.init();
|
|
33
33
|
if (userId) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
if (dbTransaction) {
|
|
35
|
+
user_1.User._Repository = new user_repository_1.UserRepository();
|
|
36
|
+
}
|
|
37
|
+
const user = yield user_1.User._Repository.findOne({
|
|
38
|
+
where: {
|
|
39
|
+
UserId: userId,
|
|
40
40
|
},
|
|
41
|
+
include: [
|
|
42
|
+
{
|
|
43
|
+
model: staff_entity_1.default,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
transaction: dbTransaction,
|
|
41
47
|
});
|
|
42
|
-
const user = data.loginUser;
|
|
43
48
|
if (!user) {
|
|
44
49
|
throw new Error('Invalid credentials.');
|
|
45
50
|
}
|
|
@@ -52,21 +57,21 @@ class LoginUser extends user_1.User {
|
|
|
52
57
|
IDType: (user === null || user === void 0 ? void 0 : user.IdType) || null,
|
|
53
58
|
ContactNo: (user === null || user === void 0 ? void 0 : user.ContactNo) || null,
|
|
54
59
|
Email: user.Email,
|
|
55
|
-
Password:
|
|
60
|
+
Password: user.Password,
|
|
56
61
|
Status: user.Status,
|
|
57
|
-
DefaultPasswordChangedYN:
|
|
58
|
-
FirstLoginAt:
|
|
59
|
-
LastLoginAt:
|
|
60
|
-
MFAEnabled:
|
|
61
|
-
MFAConfig:
|
|
62
|
-
MFABypassYN:
|
|
63
|
-
RecoveryEmail:
|
|
64
|
-
FailedLoginAttemptCount:
|
|
65
|
-
LastFailedLoginAt:
|
|
66
|
-
LastPasswordChangedAt:
|
|
67
|
-
NeedToChangePasswordYN:
|
|
68
|
-
PasscodeHash:
|
|
69
|
-
PasscodeUpdatedAt:
|
|
62
|
+
DefaultPasswordChangedYN: user.DefaultPasswordChangedYN,
|
|
63
|
+
FirstLoginAt: user.FirstLoginAt,
|
|
64
|
+
LastLoginAt: user.LastLoginAt,
|
|
65
|
+
MFAEnabled: user.MFAEnabled,
|
|
66
|
+
MFAConfig: user.MFAConfig,
|
|
67
|
+
MFABypassYN: user.MFABypassYN,
|
|
68
|
+
RecoveryEmail: user.RecoveryEmail,
|
|
69
|
+
FailedLoginAttemptCount: user.FailedLoginAttemptCount,
|
|
70
|
+
LastFailedLoginAt: user.LastFailedLoginAt,
|
|
71
|
+
LastPasswordChangedAt: user.LastPasswordChangedAt,
|
|
72
|
+
NeedToChangePasswordYN: user.NeedToChangePasswordYN,
|
|
73
|
+
PasscodeHash: user.PasscodeHash,
|
|
74
|
+
PasscodeUpdatedAt: user.PasscodeUpdatedAt,
|
|
70
75
|
CreatedById: user.CreatedById,
|
|
71
76
|
CreatedAt: user.CreatedAt,
|
|
72
77
|
UpdatedById: user.UpdatedById,
|
|
@@ -92,20 +97,13 @@ class LoginUser extends user_1.User {
|
|
|
92
97
|
if (!sessionName) {
|
|
93
98
|
throw new Error('Session name is not set');
|
|
94
99
|
}
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
const { data } = yield axios_1.default.post(`${loginApiEndpoint.baseUrl}${loginApiEndpoint.checkPrivileges}`, payload, {
|
|
103
|
-
headers: {
|
|
104
|
-
'Content-Type': 'application/json',
|
|
105
|
-
'x-api-key': loginApiEndpoint.apiKey,
|
|
106
|
-
},
|
|
107
|
-
});
|
|
108
|
-
const hasPrivilege = data.hasPrivilege;
|
|
100
|
+
const userSession = yield this._SessionService.retrieveUserSession(this.ObjectId, sessionName);
|
|
101
|
+
const systemLogin = userSession.systemLogins.find((system) => system.code === systemCode);
|
|
102
|
+
if (!systemLogin) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
const privileges = systemLogin.privileges;
|
|
106
|
+
const hasPrivilege = privileges.includes(privilegeName);
|
|
109
107
|
return hasPrivilege;
|
|
110
108
|
}
|
|
111
109
|
catch (error) {
|
|
@@ -120,20 +118,18 @@ class LoginUser extends user_1.User {
|
|
|
120
118
|
if (!sessionName) {
|
|
121
119
|
throw new Error('Session name is not set');
|
|
122
120
|
}
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
});
|
|
136
|
-
const systemLogin = data.systemLogin;
|
|
121
|
+
const userSession = yield this._SessionService.retrieveUserSession(userId, sessionName);
|
|
122
|
+
if (userSession.systemLogins.length === 0) {
|
|
123
|
+
throw new Error('Session expired.');
|
|
124
|
+
}
|
|
125
|
+
const systemLogin = userSession.systemLogins.find((sl) => sl.code === systemCode);
|
|
126
|
+
if (!systemLogin) {
|
|
127
|
+
throw new Error('Session expired.');
|
|
128
|
+
}
|
|
129
|
+
if (systemLogin.sessionId !== sessionId) {
|
|
130
|
+
throw new Error('Session expired.');
|
|
131
|
+
}
|
|
132
|
+
yield this._SessionService.refreshDuration(userId, sessionName);
|
|
137
133
|
return systemLogin;
|
|
138
134
|
}
|
|
139
135
|
catch (error) {
|
|
@@ -283,19 +279,24 @@ class LoginUser extends user_1.User {
|
|
|
283
279
|
if (!sessionName) {
|
|
284
280
|
throw new Error('Session name is not set in the configuration');
|
|
285
281
|
}
|
|
286
|
-
const
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
282
|
+
const userSession = yield this._SessionService.retrieveUserSession(this.ObjectId, sessionName);
|
|
283
|
+
const systemLogin = userSession.systemLogins.find((system) => system.code === systemCode);
|
|
284
|
+
if (systemLogin) {
|
|
285
|
+
const privileges = yield this.getPrivileges(systemCode, dbTransaction);
|
|
286
|
+
systemLogin.sessionId = sessionId;
|
|
287
|
+
systemLogin.privileges = privileges;
|
|
288
|
+
userSession.systemLogins.map((system) => system.code === systemCode ? systemLogin : system);
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
const newLogin = {
|
|
292
|
+
id: systemCode,
|
|
293
|
+
code: systemCode,
|
|
294
|
+
sessionId: sessionId,
|
|
295
|
+
privileges: yield this.getPrivileges(systemCode, dbTransaction),
|
|
296
|
+
};
|
|
297
|
+
userSession.systemLogins.push(newLogin);
|
|
298
|
+
}
|
|
299
|
+
this._SessionService.setUserSession(this.ObjectId, userSession, sessionName);
|
|
299
300
|
});
|
|
300
301
|
}
|
|
301
302
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-user.js","sourceRoot":"","sources":["../../../../src/components/login-user/login-user.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,iCAA8B;AAE9B,4DAAmD;AAEnD,oEAAgE;
|
|
1
|
+
{"version":3,"file":"login-user.js","sourceRoot":"","sources":["../../../../src/components/login-user/login-user.ts"],"names":[],"mappings":"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"}
|
|
@@ -176,6 +176,11 @@ export declare class User extends UserBase {
|
|
|
176
176
|
static findByEmail(AuthContext: AuthContext, dbTransaction: any, Email: string): Promise<User>;
|
|
177
177
|
updatePasscode(loginUser: User, passcode: string, dbTransaction: any): Promise<void>;
|
|
178
178
|
updatePassword(loginUser: User, oldPassword: string, newPassword: string, dbTransaction: any): Promise<void>;
|
|
179
|
+
getPasswordExpiryStatus(dbTransaction?: any): Promise<{
|
|
180
|
+
expired: boolean;
|
|
181
|
+
expiringSoon: boolean;
|
|
182
|
+
expiresInDays: number | null;
|
|
183
|
+
}>;
|
|
179
184
|
verifyPasscode(passcode: string): Promise<void>;
|
|
180
185
|
getReportingUser(dbTransaction: any): Promise<{
|
|
181
186
|
Email: string;
|
|
@@ -2042,6 +2042,7 @@ class User extends general_1.UserBase {
|
|
|
2042
2042
|
};
|
|
2043
2043
|
this.Password = passwordHash;
|
|
2044
2044
|
this.LastPasswordChangedAt = new Date();
|
|
2045
|
+
this.NeedToChangePasswordYN = yn_enum_1.YN.No;
|
|
2045
2046
|
const entityValueAfter = {
|
|
2046
2047
|
UserId: this.UserId,
|
|
2047
2048
|
UserName: this.UserName,
|
|
@@ -2073,6 +2074,7 @@ class User extends general_1.UserBase {
|
|
|
2073
2074
|
yield User._Repository.update({
|
|
2074
2075
|
Password: this.Password,
|
|
2075
2076
|
LastPasswordChangedAt: this.LastPasswordChangedAt,
|
|
2077
|
+
NeedToChangePasswordYN: this.NeedToChangePasswordYN,
|
|
2076
2078
|
}, {
|
|
2077
2079
|
where: {
|
|
2078
2080
|
UserId: this.UserId,
|
|
@@ -2095,6 +2097,43 @@ class User extends general_1.UserBase {
|
|
|
2095
2097
|
}
|
|
2096
2098
|
});
|
|
2097
2099
|
}
|
|
2100
|
+
getPasswordExpiryStatus(dbTransaction) {
|
|
2101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2102
|
+
try {
|
|
2103
|
+
const expiryMonthsRaw = Number(process.env.PASSWORD_EXPIRY_MONTHS);
|
|
2104
|
+
const expiryMonths = Number.isFinite(expiryMonthsRaw)
|
|
2105
|
+
? Math.max(0, Math.floor(expiryMonthsRaw))
|
|
2106
|
+
: 0;
|
|
2107
|
+
if (expiryMonths === 0) {
|
|
2108
|
+
return { expired: false, expiringSoon: false, expiresInDays: null };
|
|
2109
|
+
}
|
|
2110
|
+
if (this.NeedToChangePasswordYN === yn_enum_1.YN.Yes) {
|
|
2111
|
+
return { expired: true, expiringSoon: false, expiresInDays: null };
|
|
2112
|
+
}
|
|
2113
|
+
const warningDaysRaw = Number(process.env.PASSWORD_EXPIRY_WARNING_DAYS);
|
|
2114
|
+
const warningDays = Number.isFinite(warningDaysRaw)
|
|
2115
|
+
? Math.max(0, Math.floor(warningDaysRaw))
|
|
2116
|
+
: 14;
|
|
2117
|
+
const latestHistory = yield user_password_history_1.UserPasswordHistory.getLatestByUserId(dbTransaction, this.UserId);
|
|
2118
|
+
if (!latestHistory) {
|
|
2119
|
+
return { expired: true, expiringSoon: false, expiresInDays: null };
|
|
2120
|
+
}
|
|
2121
|
+
const createdAt = latestHistory.CreatedAt;
|
|
2122
|
+
const expiryDate = new Date(Date.UTC(createdAt.getUTCFullYear(), createdAt.getUTCMonth() + expiryMonths, createdAt.getUTCDate(), createdAt.getUTCHours(), createdAt.getUTCMinutes(), createdAt.getUTCSeconds()));
|
|
2123
|
+
const now = new Date();
|
|
2124
|
+
if (now.getTime() >= expiryDate.getTime()) {
|
|
2125
|
+
return { expired: true, expiringSoon: false, expiresInDays: null };
|
|
2126
|
+
}
|
|
2127
|
+
const msPerDay = 24 * 60 * 60 * 1000;
|
|
2128
|
+
const expiringSoon = now.getTime() >= expiryDate.getTime() - warningDays * msPerDay;
|
|
2129
|
+
const expiresInDays = Math.ceil((expiryDate.getTime() - now.getTime()) / msPerDay);
|
|
2130
|
+
return { expired: false, expiringSoon, expiresInDays };
|
|
2131
|
+
}
|
|
2132
|
+
catch (error) {
|
|
2133
|
+
throw error;
|
|
2134
|
+
}
|
|
2135
|
+
});
|
|
2136
|
+
}
|
|
2098
2137
|
verifyPasscode(passcode) {
|
|
2099
2138
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2100
2139
|
try {
|