mbkauthe 1.0.20 → 1.0.22
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/.github/workflows/apisec-scan.yml +71 -0
- package/README.md +35 -2
- package/index.js +10 -2
- package/lib/main.js +65 -3
- package/package.json +4 -3
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
|
2
|
+
# They are provided by a third-party and are governed by
|
|
3
|
+
# separate terms of service, privacy policy, and support
|
|
4
|
+
# documentation.
|
|
5
|
+
|
|
6
|
+
# APIsec addresses the critical need to secure APIs before they reach production.
|
|
7
|
+
# APIsec provides the industry’s only automated and continuous API testing platform that uncovers security vulnerabilities and logic flaws in APIs.
|
|
8
|
+
# Clients rely on APIsec to evaluate every update and release, ensuring that no APIs go to production with vulnerabilities.
|
|
9
|
+
|
|
10
|
+
# How to Get Started with APIsec.ai
|
|
11
|
+
# 1. Schedule a demo at https://www.apisec.ai/request-a-demo .
|
|
12
|
+
#
|
|
13
|
+
# 2. Register your account at https://cloud.apisec.ai/#/signup .
|
|
14
|
+
#
|
|
15
|
+
# 3. Register your API . See the video (https://www.youtube.com/watch?v=MK3Xo9Dbvac) to get up and running with APIsec quickly.
|
|
16
|
+
#
|
|
17
|
+
# 4. Get GitHub Actions scan attributes from APIsec Project -> Configurations -> Integrations -> CI-CD -> GitHub Actions
|
|
18
|
+
#
|
|
19
|
+
# apisec-run-scan
|
|
20
|
+
#
|
|
21
|
+
# This action triggers the on-demand scans for projects registered in APIsec.
|
|
22
|
+
# If your GitHub account allows code scanning alerts, you can then upload the sarif file generated by this action to show the scan findings.
|
|
23
|
+
# Else you can view the scan results from the project home page in APIsec Platform.
|
|
24
|
+
# The link to view the scan results is also displayed on the console on successful completion of action.
|
|
25
|
+
|
|
26
|
+
# This is a starter workflow to help you get started with APIsec-Scan Actions
|
|
27
|
+
|
|
28
|
+
name: APIsec
|
|
29
|
+
|
|
30
|
+
# Controls when the workflow will run
|
|
31
|
+
on:
|
|
32
|
+
# Triggers the workflow on push or pull request events but only for the "main" branch
|
|
33
|
+
# Customize trigger events based on your DevSecOps processes.
|
|
34
|
+
push:
|
|
35
|
+
branches: [ "main" ]
|
|
36
|
+
pull_request:
|
|
37
|
+
branches: [ "main" ]
|
|
38
|
+
schedule:
|
|
39
|
+
- cron: '44 15 * * 0'
|
|
40
|
+
|
|
41
|
+
# Allows you to run this workflow manually from the Actions tab
|
|
42
|
+
workflow_dispatch:
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
permissions:
|
|
46
|
+
contents: read
|
|
47
|
+
|
|
48
|
+
jobs:
|
|
49
|
+
|
|
50
|
+
Trigger_APIsec_scan:
|
|
51
|
+
permissions:
|
|
52
|
+
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
|
|
53
|
+
actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status
|
|
54
|
+
runs-on: ubuntu-latest
|
|
55
|
+
|
|
56
|
+
steps:
|
|
57
|
+
- name: APIsec scan
|
|
58
|
+
uses: apisec-inc/apisec-run-scan@025432089674a28ba8fb55f8ab06c10215e772ea
|
|
59
|
+
with:
|
|
60
|
+
# The APIsec username with which the scans will be executed
|
|
61
|
+
apisec-username: ${{ secrets.apisec_username }}
|
|
62
|
+
# The Password of the APIsec user with which the scans will be executed
|
|
63
|
+
apisec-password: ${{ secrets.apisec_password}}
|
|
64
|
+
# The name of the project for security scan
|
|
65
|
+
apisec-project: "VAmPI"
|
|
66
|
+
# The name of the sarif format result file The file is written only if this property is provided.
|
|
67
|
+
sarif-result-file: "apisec-results.sarif"
|
|
68
|
+
- name: Import results
|
|
69
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
70
|
+
with:
|
|
71
|
+
sarif_file: ./apisec-results.sarif
|
package/README.md
CHANGED
|
@@ -21,6 +21,9 @@
|
|
|
21
21
|
- [Login](#login)
|
|
22
22
|
- [Logout](#logout)
|
|
23
23
|
- [Terminate All Sessions](#terminate-all-sessions)
|
|
24
|
+
- [Package Information](#package-information)
|
|
25
|
+
- [Version Information](#version-information)
|
|
26
|
+
- [Package Lock Information](#package-lock-information)
|
|
24
27
|
- [Database Structure](#database-structure)
|
|
25
28
|
- [License](#license)
|
|
26
29
|
- [Contact \& Support](#contact--support)
|
|
@@ -211,8 +214,38 @@ router.post(["/terminateAllSessions"], authenticate(mbkautheVar.Password), (req,
|
|
|
211
214
|
- Response:
|
|
212
215
|
- `200`: All sessions terminated successfully.
|
|
213
216
|
- `500`: Internal server error.
|
|
214
|
-
|
|
215
|
-
|
|
217
|
+
|
|
218
|
+
### Package Information
|
|
219
|
+
|
|
220
|
+
**GET** `/mbkauthe/package`
|
|
221
|
+
|
|
222
|
+
- **Description**: Retrieves the `package.json` file of the `mbkauthe` package, which contains metadata about the package, such as its name, version, dependencies, and more.
|
|
223
|
+
- **Response**:
|
|
224
|
+
- `200`: Successfully retrieved the `package.json` file.
|
|
225
|
+
- **Body**: JSON object containing the contents of the `package.json` file.
|
|
226
|
+
- `500`: Internal server error.
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
### Version Information
|
|
230
|
+
|
|
231
|
+
**GET** `/mbkauthe/version` or `/mbkauthe/v`
|
|
232
|
+
|
|
233
|
+
- **Description**: Retrieves the current version of the `mbkauthe` package from the `package.json` file.
|
|
234
|
+
- **Response**:
|
|
235
|
+
- `200`: Successfully retrieved the version information.
|
|
236
|
+
- **Body**: JSON object containing the version, e.g., `{ "version": "1.0.0" }`.
|
|
237
|
+
- `500`: Internal server error.
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
### Package Lock Information
|
|
241
|
+
|
|
242
|
+
**GET** `/mbkauthe/package-lock`
|
|
243
|
+
|
|
244
|
+
- **Description**: Retrieves the `package-lock.json` file from the project where the `mbkauthe` package is installed. Filters and returns only the dependency information related to `mbkauthe`, including resolved versions and integrity hashes.
|
|
245
|
+
- **Response**:
|
|
246
|
+
- `200`: Successfully retrieved the filtered `package-lock.json` data for `mbkauthe`.
|
|
247
|
+
- **Body**: JSON object containing the filtered dependency information for `mbkauthe`.
|
|
248
|
+
- `500`: Internal server error.
|
|
216
249
|
|
|
217
250
|
## Database Structure
|
|
218
251
|
|
package/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import express from "express"; // Add this line
|
|
1
2
|
import router from "./lib/main.js";
|
|
2
3
|
|
|
3
4
|
import dotenv from "dotenv";
|
|
@@ -21,8 +22,7 @@ if (mbkautheVar.RECAPTCHA_Enabled === "true") {
|
|
|
21
22
|
if (mbkautheVar.RECAPTCHA_SECRET_KEY === undefined) {
|
|
22
23
|
throw new Error("mbkautheVar.RECAPTCHA_SECRET_KEY is required");
|
|
23
24
|
}
|
|
24
|
-
}
|
|
25
|
-
|
|
25
|
+
}
|
|
26
26
|
if (mbkautheVar.COOKIE_EXPIRE_TIME !== undefined) {
|
|
27
27
|
const expireTime = parseFloat(mbkautheVar.COOKIE_EXPIRE_TIME);
|
|
28
28
|
if (isNaN(expireTime) || expireTime <= 0) {
|
|
@@ -35,6 +35,14 @@ if (mbkautheVar.BypassUsers !== undefined) {
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
if (process.env.test === "true") {
|
|
39
|
+
const app = express();
|
|
40
|
+
const port = 3000;
|
|
41
|
+
app.use(router);
|
|
42
|
+
app.listen(port, () => {
|
|
43
|
+
console.log(`Server running on http://localhost:${port}`);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
38
46
|
|
|
39
47
|
export { validateSession, checkRolePermission, validateSessionAndRole, getUserData, authenticate } from "./lib/validateSessionAndRole.js";
|
|
40
48
|
export { dblogin } from "./lib/pool.js";
|
package/lib/main.js
CHANGED
|
@@ -7,6 +7,13 @@ import { dblogin } from "./pool.js";
|
|
|
7
7
|
import { authenticate } from "./validateSessionAndRole.js";
|
|
8
8
|
import fetch from 'node-fetch';
|
|
9
9
|
import cookieParser from "cookie-parser";
|
|
10
|
+
import bcrypt from 'bcrypt';
|
|
11
|
+
|
|
12
|
+
import { createRequire } from "module";
|
|
13
|
+
const require = createRequire(import.meta.url);
|
|
14
|
+
const packageJson = require("../package.json");
|
|
15
|
+
import fs from "fs";
|
|
16
|
+
import path from "path";
|
|
10
17
|
|
|
11
18
|
import dotenv from "dotenv";
|
|
12
19
|
dotenv.config();
|
|
@@ -189,9 +196,24 @@ router.post("/mbkauthe/api/login", async (req, res) => {
|
|
|
189
196
|
|
|
190
197
|
const user = userResult.rows[0];
|
|
191
198
|
|
|
192
|
-
if (
|
|
193
|
-
|
|
194
|
-
|
|
199
|
+
if (mbkautheVar.EncryptedPassword === "true") {
|
|
200
|
+
try {
|
|
201
|
+
const result = await bcrypt.compare(password, user.Password);
|
|
202
|
+
if (!result) {
|
|
203
|
+
console.log("Incorrect password.");
|
|
204
|
+
return res.status(401).json({ success: false, errorCode: 603, message: "Incorrect Username Or Password." });
|
|
205
|
+
}
|
|
206
|
+
console.log("Password matches!");
|
|
207
|
+
} catch (err) {
|
|
208
|
+
console.error("Error comparing password:", err);
|
|
209
|
+
return res.status(500).json({ success: false, errorCode: 605, message: `Internal Server Error` });
|
|
210
|
+
}
|
|
211
|
+
} else {
|
|
212
|
+
// Check if the password matches
|
|
213
|
+
if (user.Password !== password) {
|
|
214
|
+
console.log(`Incorrect password for username: ${username}`);
|
|
215
|
+
return res.status(401).json({ success: false, errorCode: 603, message: "Incorrect Username Or Password" });
|
|
216
|
+
}
|
|
195
217
|
}
|
|
196
218
|
|
|
197
219
|
if (!user.Active) {
|
|
@@ -302,4 +324,44 @@ router.post("/mbkauthe/api/logout", async (req, res) => {
|
|
|
302
324
|
}
|
|
303
325
|
});
|
|
304
326
|
|
|
327
|
+
// Return package.json data of mbkauthe
|
|
328
|
+
router.get("/mbkauthe/package", (_, res) => {
|
|
329
|
+
res.status(200).json({ version: packageJson });
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
// Return version number of mbkauthe
|
|
333
|
+
router.get(["/mbkauthe/version", "/mbkauthe/v"], (_, res) => {
|
|
334
|
+
res.status(200).json({ version: packageJson.version });
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
// Return package-lock.json data of mbkauthe from project the package is installed in
|
|
338
|
+
router.get("/mbkauthe/package-lock", (_, res) => {
|
|
339
|
+
console.log("Request for package-lock.json received");
|
|
340
|
+
const packageLockPath = path.resolve(process.cwd(), "package-lock.json");
|
|
341
|
+
fs.readFile(packageLockPath, "utf8", (err, data) => {
|
|
342
|
+
if (err) {
|
|
343
|
+
console.error("Error reading package-lock.json:", err);
|
|
344
|
+
return res.status(500).json({ success: false, message: "Failed to read package-lock.json" });
|
|
345
|
+
}
|
|
346
|
+
try {
|
|
347
|
+
const packageLock = JSON.parse(data);
|
|
348
|
+
const mbkautheData = {
|
|
349
|
+
name: 'mbkauthe',
|
|
350
|
+
version: packageLock.packages['node_modules/mbkauthe'].version,
|
|
351
|
+
resolved: packageLock.packages['node_modules/mbkauthe'].resolved,
|
|
352
|
+
integrity: packageLock.packages['node_modules/mbkauthe'].integrity,
|
|
353
|
+
license: packageLock.packages['node_modules/mbkauthe'].license,
|
|
354
|
+
dependencies: packageLock.packages['node_modules/mbkauthe'].dependencies
|
|
355
|
+
};
|
|
356
|
+
const rootDependency = packageLock.packages[''].dependencies.mbkauthe;
|
|
357
|
+
console.log('mbkauthe package data:', mbkautheData);
|
|
358
|
+
console.log('Root dependency version:', rootDependency);
|
|
359
|
+
res.status(200).json({ mbkautheData, rootDependency });
|
|
360
|
+
} catch (parseError) {
|
|
361
|
+
console.error("Error parsing package-lock.json:", parseError);
|
|
362
|
+
res.status(500).json({ success: false, message: "Failed to parse package-lock.json" });
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
|
|
305
367
|
export default router;
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mbkauthe",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.22",
|
|
4
4
|
"description": "MBKTechStudio's reusable authentication system for Node.js applications.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"test": "node index.js"
|
|
8
|
+
"test": "set test=true&& node index.js"
|
|
9
9
|
},
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"homepage": "https://github.com/MIbnEKhalid/mbkauthe#readme",
|
|
28
28
|
"dependencies": {
|
|
29
|
+
"bcrypt": "^5.1.1",
|
|
29
30
|
"connect-pg-simple": "^10.0.0",
|
|
30
31
|
"cookie-parser": "^1.4.7",
|
|
31
32
|
"dotenv": "^16.4.7",
|
|
@@ -34,4 +35,4 @@
|
|
|
34
35
|
"node-fetch": "^3.3.2",
|
|
35
36
|
"pg": "^8.14.1"
|
|
36
37
|
}
|
|
37
|
-
}
|
|
38
|
+
}
|