@tomei/sso 0.66.1-test.1 → 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/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.ts +8 -12
- package/__tests__/unit/components/login-user/login.spec.ts +75 -44
- package/coverage/cobertura-coverage.xml +6647 -47
- package/coverage/test-report.xml +153 -25
- package/dist/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.js +2 -6
- 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 +72 -33
- package/dist/__tests__/unit/components/login-user/login.spec.js.map +1 -1
- package/dist/src/components/login-user/login-user.js +62 -61
- 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/package.json +1 -2
- package/src/components/login-user/login-user.ts +87 -88
- 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
|
@@ -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:
|
|
62
|
+
DefaultPasswordChangedYN: user.DefaultPasswordChangedYN,
|
|
63
|
+
FirstLoginAt: user.FirstLoginAt,
|
|
64
|
+
LastLoginAt: user.LastLoginAt,
|
|
60
65
|
MFAEnabled: user.MFAEnabled,
|
|
61
|
-
MFAConfig:
|
|
66
|
+
MFAConfig: user.MFAConfig,
|
|
62
67
|
MFABypassYN: user.MFABypassYN,
|
|
63
|
-
RecoveryEmail:
|
|
64
|
-
FailedLoginAttemptCount:
|
|
65
|
-
LastFailedLoginAt:
|
|
66
|
-
LastPasswordChangedAt:
|
|
67
|
-
NeedToChangePasswordYN:
|
|
68
|
-
PasscodeHash:
|
|
69
|
-
PasscodeUpdatedAt:
|
|
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 {
|