mbkauthe 1.1.18 → 1.2.1
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/README.md +1 -1
- package/index.js +9 -5
- package/lib/main.js +156 -89
- package/lib/pool.js +1 -2
- package/lib/validateSessionAndRole.js +29 -29
- package/package.json +2 -1
- package/views/2fa.handlebars +550 -0
- package/views/Error/dError.handlebars +1 -1
- package/views/loginmbkauthe.handlebars +20 -206
- package/views/showmessage.handlebars +170 -0
|
@@ -28,14 +28,14 @@ async function validateSession(req, res, next) {
|
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
30
|
} catch (err) {
|
|
31
|
-
console.error("Session validation error:", err);
|
|
31
|
+
console.error("[mbkauthe] Session validation error:", err);
|
|
32
32
|
return res.status(500).json({ success: false, message: "Internal Server Error" });
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
if (!req.session.user) {
|
|
37
|
-
console.log("User not authenticated");
|
|
38
|
-
console.log(req.session.user);
|
|
37
|
+
console.log("[mbkauthe] User not authenticated");
|
|
38
|
+
console.log("[mbkauthe]: ", req.session.user);
|
|
39
39
|
return res.render("Error/dError.handlebars", {
|
|
40
40
|
layout: false,
|
|
41
41
|
code: 401,
|
|
@@ -53,7 +53,7 @@ async function validateSession(req, res, next) {
|
|
|
53
53
|
const userResult = result.rows[0];
|
|
54
54
|
|
|
55
55
|
if (result.rows.length === 0 || userResult.SessionId !== sessionId) {
|
|
56
|
-
console.log(`Session invalidated for user "${req.session.user.username}"`);
|
|
56
|
+
console.log(`[mbkauthe] Session invalidated for user "${req.session.user.username}"`);
|
|
57
57
|
req.session.destroy();
|
|
58
58
|
const cookieOptions = getCookieOptions();
|
|
59
59
|
res.clearCookie("mbkauthe.sid", cookieOptions);
|
|
@@ -70,7 +70,7 @@ async function validateSession(req, res, next) {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
if (!userResult.Active) {
|
|
73
|
-
console.log(`Account is inactive for user "${req.session.user.username}"`);
|
|
73
|
+
console.log(`[mbkauthe] Account is inactive for user "${req.session.user.username}"`);
|
|
74
74
|
req.session.destroy();
|
|
75
75
|
const cookieOptions = getCookieOptions();
|
|
76
76
|
res.clearCookie("mbkauthe.sid", cookieOptions);
|
|
@@ -89,7 +89,7 @@ async function validateSession(req, res, next) {
|
|
|
89
89
|
if (userResult.Role !== "SuperAdmin") {
|
|
90
90
|
const allowedApps = userResult.AllowedApps;
|
|
91
91
|
if (!allowedApps || !allowedApps.some(app => app.toLowerCase() === mbkautheVar.APP_NAME.toLowerCase())) {
|
|
92
|
-
console.warn(`User \"${req.session.user.username}\" is not authorized to use the application \"${mbkautheVar.APP_NAME}\"`);
|
|
92
|
+
console.warn(`[mbkauthe] User \"${req.session.user.username}\" is not authorized to use the application \"${mbkautheVar.APP_NAME}\"`);
|
|
93
93
|
req.session.destroy();
|
|
94
94
|
const cookieOptions = getCookieOptions();
|
|
95
95
|
res.clearCookie("mbkauthe.sid", cookieOptions);
|
|
@@ -108,7 +108,7 @@ async function validateSession(req, res, next) {
|
|
|
108
108
|
|
|
109
109
|
next();
|
|
110
110
|
} catch (err) {
|
|
111
|
-
console.error("Session validation error:", err);
|
|
111
|
+
console.error("[mbkauthe] Session validation error:", err);
|
|
112
112
|
res.status(500).json({ success: false, message: "Internal Server Error" });
|
|
113
113
|
}
|
|
114
114
|
}
|
|
@@ -117,8 +117,8 @@ const checkRolePermission = (requiredRole) => {
|
|
|
117
117
|
return async (req, res, next) => {
|
|
118
118
|
try {
|
|
119
119
|
if (!req.session || !req.session.user || !req.session.user.id) {
|
|
120
|
-
console.log("User not authenticated");
|
|
121
|
-
console.log(req.session);
|
|
120
|
+
console.log("[mbkauthe] User not authenticated");
|
|
121
|
+
console.log("[mbkauthe]: ", req.session);
|
|
122
122
|
return res.render("Error/dError.handlebars", {
|
|
123
123
|
layout: false,
|
|
124
124
|
code: 401,
|
|
@@ -156,7 +156,7 @@ const checkRolePermission = (requiredRole) => {
|
|
|
156
156
|
|
|
157
157
|
next();
|
|
158
158
|
} catch (err) {
|
|
159
|
-
console.error("Permission check error:", err);
|
|
159
|
+
console.error("[mbkauthe] Permission check error:", err);
|
|
160
160
|
res.status(500).json({ success: false, message: "Internal Server Error" });
|
|
161
161
|
}
|
|
162
162
|
};
|
|
@@ -215,7 +215,7 @@ async function getUserData(UserName, parameters) {
|
|
|
215
215
|
const combinedResult = { ...userResult, ...profileResult };
|
|
216
216
|
return combinedResult;
|
|
217
217
|
} catch (err) {
|
|
218
|
-
console.error("Error fetching user data:", err.message);
|
|
218
|
+
console.error("[mbkauthe] Error fetching user data:", err.message);
|
|
219
219
|
throw err;
|
|
220
220
|
}
|
|
221
221
|
}
|
|
@@ -223,12 +223,12 @@ async function getUserData(UserName, parameters) {
|
|
|
223
223
|
const authenticate = (authentication) => {
|
|
224
224
|
return (req, res, next) => {
|
|
225
225
|
const token = req.headers["authorization"];
|
|
226
|
-
console.log(`Received token: ${token}`);
|
|
226
|
+
console.log(`[mbkauthe] Received token: ${token}`);
|
|
227
227
|
if (token === authentication) {
|
|
228
|
-
console.log("Authentication successful");
|
|
228
|
+
console.log("[mbkauthe] Authentication successful");
|
|
229
229
|
next();
|
|
230
230
|
} else {
|
|
231
|
-
console.log("Authentication failed");
|
|
231
|
+
console.log("[mbkauthe] Authentication failed");
|
|
232
232
|
res.status(401).send("Unauthorized");
|
|
233
233
|
}
|
|
234
234
|
};
|
|
@@ -239,24 +239,24 @@ const authapi = (requiredRole = []) => {
|
|
|
239
239
|
const token = req.headers["authorization"];
|
|
240
240
|
|
|
241
241
|
if (typeof token === 'string') {
|
|
242
|
-
console.log("[authapi] Received request with token:", token[0] + token[1] + token[2], ".....", token[63]);
|
|
242
|
+
console.log("[mbkauthe] [authapi] Received request with token:", token[0] + token[1] + token[2], ".....", token[63]);
|
|
243
243
|
} else {
|
|
244
|
-
console.log("[authapi] Token is not a valid string:", token);
|
|
244
|
+
console.log("[mbkauthe] [authapi] Token is not a valid string:", token);
|
|
245
245
|
}
|
|
246
246
|
|
|
247
247
|
if (!token) {
|
|
248
|
-
console.log("[authapi] No token provided in the request headers");
|
|
248
|
+
console.log("[mbkauthe] [authapi] No token provided in the request headers");
|
|
249
249
|
return res.status(401).json({
|
|
250
250
|
success: false,
|
|
251
251
|
message: "Authorization token is required"
|
|
252
252
|
});
|
|
253
253
|
}
|
|
254
254
|
|
|
255
|
-
console.log("[authapi] Querying database to validate token");
|
|
255
|
+
console.log("[mbkauthe] [authapi] Querying database to validate token");
|
|
256
256
|
const tokenQuery = 'SELECT * FROM "UserAuthApiKey" WHERE "key" = $1';
|
|
257
257
|
pool.query(tokenQuery, [token], (err, result) => {
|
|
258
258
|
if (err) {
|
|
259
|
-
console.error("[authapi] Database query error while validating token:", err);
|
|
259
|
+
console.error("[mbkauthe] [authapi] Database query error while validating token:", err);
|
|
260
260
|
return res.status(500).json({
|
|
261
261
|
success: false,
|
|
262
262
|
message: "Internal Server Error"
|
|
@@ -264,7 +264,7 @@ const authapi = (requiredRole = []) => {
|
|
|
264
264
|
}
|
|
265
265
|
|
|
266
266
|
if (result.rows.length === 0) {
|
|
267
|
-
console.log("[authapi] Invalid token provided:", token);
|
|
267
|
+
console.log("[mbkauthe] [authapi] Invalid token provided:", token);
|
|
268
268
|
return res.status(401).json({
|
|
269
269
|
success: false,
|
|
270
270
|
message: "The AuthApiToken Is Invalid"
|
|
@@ -272,9 +272,9 @@ const authapi = (requiredRole = []) => {
|
|
|
272
272
|
}
|
|
273
273
|
|
|
274
274
|
const username = result.rows[0].username;
|
|
275
|
-
console.log("[authapi] Token is valid. Associated username:", username);
|
|
275
|
+
console.log("[mbkauthe] [authapi] Token is valid. Associated username:", username);
|
|
276
276
|
|
|
277
|
-
console.log("[authapi] Querying database to validate user and role");
|
|
277
|
+
console.log("[mbkauthe] [authapi] Querying database to validate user and role");
|
|
278
278
|
const userQuery = `
|
|
279
279
|
SELECT id, "UserName", "Active", "Role" FROM "Users"
|
|
280
280
|
WHERE "UserName" = $1 AND "Active" = true
|
|
@@ -282,7 +282,7 @@ const authapi = (requiredRole = []) => {
|
|
|
282
282
|
|
|
283
283
|
pool.query(userQuery, [username], (err, userResult) => {
|
|
284
284
|
if (err) {
|
|
285
|
-
console.error("[authapi] Database query error while validating user:", err);
|
|
285
|
+
console.error("[mbkauthe] [authapi] Database query error while validating user:", err);
|
|
286
286
|
return res.status(500).json({
|
|
287
287
|
success: false,
|
|
288
288
|
message: "Internal Server Error"
|
|
@@ -290,7 +290,7 @@ const authapi = (requiredRole = []) => {
|
|
|
290
290
|
}
|
|
291
291
|
|
|
292
292
|
if (userResult.rows.length === 0) {
|
|
293
|
-
console.log("[authapi] User does not exist or is not active. Username:", username);
|
|
293
|
+
console.log("[mbkauthe] [authapi] User does not exist or is not active. Username:", username);
|
|
294
294
|
return res.status(401).json({
|
|
295
295
|
success: false,
|
|
296
296
|
message: "User does not exist or is not active",
|
|
@@ -298,7 +298,7 @@ const authapi = (requiredRole = []) => {
|
|
|
298
298
|
}
|
|
299
299
|
|
|
300
300
|
if (username === "demo") {
|
|
301
|
-
console.log("[authapi] Demo user attempted to access an endpoint. Access denied.");
|
|
301
|
+
console.log("[mbkauthe] [authapi] Demo user attempted to access an endpoint. Access denied.");
|
|
302
302
|
return res.status(401).json({
|
|
303
303
|
success: false,
|
|
304
304
|
message: "Demo user is not allowed to access endpoints",
|
|
@@ -306,25 +306,25 @@ const authapi = (requiredRole = []) => {
|
|
|
306
306
|
}
|
|
307
307
|
|
|
308
308
|
const user = userResult.rows[0];
|
|
309
|
-
console.log("[authapi] User is valid. User details:", user);
|
|
309
|
+
console.log("[mbkauthe] [authapi] User is valid. User details:", user);
|
|
310
310
|
|
|
311
311
|
// Check if role is required and if user has it
|
|
312
312
|
if ((requiredRole && user.Role !== requiredRole) && user.Role !== "SuperAdmin") {
|
|
313
|
-
console.log(`[authapi] User does not have the required role. Required: ${requiredRole}, User's role: ${user.Role}`);
|
|
313
|
+
console.log(`[mbkauthe] [authapi] User does not have the required role. Required: ${requiredRole}, User's role: ${user.Role}`);
|
|
314
314
|
return res.status(403).json({
|
|
315
315
|
success: false,
|
|
316
316
|
message: `Access denied. Required role: ${requiredRole}`,
|
|
317
317
|
});
|
|
318
318
|
}
|
|
319
319
|
|
|
320
|
-
console.log("[authapi] User has the required role or no specific role is required. Proceeding to next middleware.");
|
|
320
|
+
console.log("[mbkauthe] [authapi] User has the required role or no specific role is required. Proceeding to next middleware.");
|
|
321
321
|
req.user = {
|
|
322
322
|
username: user.UserName,
|
|
323
323
|
role: user.Role,
|
|
324
324
|
// Add other user properties you might need
|
|
325
325
|
};
|
|
326
326
|
|
|
327
|
-
console.log("[authapi] Token and user validation successful. Passing control to next middleware.");
|
|
327
|
+
console.log("[mbkauthe] [authapi] Token and user validation successful. Passing control to next middleware.");
|
|
328
328
|
next();
|
|
329
329
|
});
|
|
330
330
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mbkauthe",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "MBKTechStudio's reusable authentication system for Node.js applications.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"cheerio": "^1.0.0",
|
|
31
31
|
"connect-pg-simple": "^10.0.0",
|
|
32
32
|
"cookie-parser": "^1.4.7",
|
|
33
|
+
"csurf": "^1.11.0",
|
|
33
34
|
"dotenv": "^16.4.7",
|
|
34
35
|
"express": "^5.1.0",
|
|
35
36
|
"express-handlebars": "^8.0.1",
|