@flink-app/jwt-auth-plugin 0.11.4-next.0 → 0.11.5
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/BcryptUtils.js +3 -2
- package/dist/FlinkJwtAuthPlugin.js +21 -20
- package/dist/PermissionValidator.js +3 -2
- package/dist/index.js +1 -5
- package/package.json +33 -30
package/dist/BcryptUtils.js
CHANGED
|
@@ -3,8 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.encrypt =
|
|
7
|
-
exports.genSalt = genSalt;
|
|
6
|
+
exports.genSalt = exports.encrypt = void 0;
|
|
8
7
|
var bcrypt_1 = __importDefault(require("bcrypt"));
|
|
9
8
|
function encrypt(password, salt) {
|
|
10
9
|
return new Promise(function (resolve, reject) {
|
|
@@ -15,6 +14,7 @@ function encrypt(password, salt) {
|
|
|
15
14
|
});
|
|
16
15
|
});
|
|
17
16
|
}
|
|
17
|
+
exports.encrypt = encrypt;
|
|
18
18
|
function genSalt(rounds) {
|
|
19
19
|
if (rounds === void 0) { rounds = 10; }
|
|
20
20
|
return new Promise(function (resolve, reject) {
|
|
@@ -25,3 +25,4 @@ function genSalt(rounds) {
|
|
|
25
25
|
});
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
|
+
exports.genSalt = genSalt;
|
|
@@ -20,12 +20,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
20
20
|
});
|
|
21
21
|
};
|
|
22
22
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g
|
|
24
|
-
return g
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
25
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
26
|
function step(op) {
|
|
27
27
|
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
-
while (
|
|
28
|
+
while (_) try {
|
|
29
29
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
30
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
31
|
switch (op[0]) {
|
|
@@ -50,7 +50,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
50
50
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
51
|
};
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
-
exports.jwtAuthPlugin =
|
|
53
|
+
exports.jwtAuthPlugin = void 0;
|
|
54
54
|
var flink_1 = require("@flink-app/flink");
|
|
55
55
|
var jwt_simple_1 = __importDefault(require("jwt-simple"));
|
|
56
56
|
var BcryptUtils_1 = require("./BcryptUtils");
|
|
@@ -85,12 +85,13 @@ function jwtAuthPlugin(_a) {
|
|
|
85
85
|
validatePassword: validatePassword,
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
exports.jwtAuthPlugin = jwtAuthPlugin;
|
|
89
|
+
function authenticateRequest(req, routePermissions, rolePermissions, _a) {
|
|
90
|
+
var secret = _a.secret, algo = _a.algo, getUser = _a.getUser;
|
|
91
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
90
92
|
var token, decodedToken, permissionsArr, validPerms, user;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
switch (_c.label) {
|
|
93
|
+
return __generator(this, function (_b) {
|
|
94
|
+
switch (_b.label) {
|
|
94
95
|
case 0:
|
|
95
96
|
token = getTokenFromReq(req);
|
|
96
97
|
if (!token) return [3 /*break*/, 2];
|
|
@@ -99,7 +100,7 @@ function authenticateRequest(req_1, routePermissions_1, rolePermissions_1, _a) {
|
|
|
99
100
|
decodedToken = jwt_simple_1.default.decode(token, secret, false, algo);
|
|
100
101
|
}
|
|
101
102
|
catch (err) {
|
|
102
|
-
flink_1.log.debug("Failed to decode token: "
|
|
103
|
+
flink_1.log.debug("Failed to decode token: " + err);
|
|
103
104
|
decodedToken = null;
|
|
104
105
|
}
|
|
105
106
|
if (!decodedToken) return [3 /*break*/, 2];
|
|
@@ -107,14 +108,14 @@ function authenticateRequest(req_1, routePermissions_1, rolePermissions_1, _a) {
|
|
|
107
108
|
? routePermissions
|
|
108
109
|
: [routePermissions];
|
|
109
110
|
if (permissionsArr && permissionsArr.length > 0) {
|
|
110
|
-
validPerms =
|
|
111
|
+
validPerms = PermissionValidator_1.hasValidPermissions(decodedToken.roles || [], rolePermissions, permissionsArr);
|
|
111
112
|
if (!validPerms) {
|
|
112
113
|
return [2 /*return*/, false];
|
|
113
114
|
}
|
|
114
115
|
}
|
|
115
116
|
return [4 /*yield*/, getUser(decodedToken)];
|
|
116
117
|
case 1:
|
|
117
|
-
user =
|
|
118
|
+
user = _b.sent();
|
|
118
119
|
req.user = user;
|
|
119
120
|
return [2 /*return*/, true];
|
|
120
121
|
case 2: return [2 /*return*/, false];
|
|
@@ -130,10 +131,10 @@ function getTokenFromReq(req) {
|
|
|
130
131
|
}
|
|
131
132
|
return;
|
|
132
133
|
}
|
|
133
|
-
function createToken(
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
return __generator(this, function (
|
|
134
|
+
function createToken(payload, _a) {
|
|
135
|
+
var secret = _a.secret, algo = _a.algo, tokenTTL = _a.tokenTTL;
|
|
136
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
137
|
+
return __generator(this, function (_b) {
|
|
137
138
|
if (!payload) {
|
|
138
139
|
throw new Error("Cannot create token - payload is missing");
|
|
139
140
|
}
|
|
@@ -151,13 +152,13 @@ function createPasswordHashAndSalt(password, passwordPolicy) {
|
|
|
151
152
|
switch (_a.label) {
|
|
152
153
|
case 0:
|
|
153
154
|
if (!passwordPolicy.test(password)) {
|
|
154
|
-
flink_1.log.debug("Password does not match password policy '"
|
|
155
|
+
flink_1.log.debug("Password does not match password policy '" + passwordPolicy + "'");
|
|
155
156
|
return [2 /*return*/, null];
|
|
156
157
|
}
|
|
157
|
-
return [4 /*yield*/,
|
|
158
|
+
return [4 /*yield*/, BcryptUtils_1.genSalt(10)];
|
|
158
159
|
case 1:
|
|
159
160
|
salt = _a.sent();
|
|
160
|
-
return [4 /*yield*/,
|
|
161
|
+
return [4 /*yield*/, BcryptUtils_1.encrypt(password, salt)];
|
|
161
162
|
case 2:
|
|
162
163
|
hash = _a.sent();
|
|
163
164
|
return [2 /*return*/, { salt: salt, hash: hash }];
|
|
@@ -170,7 +171,7 @@ function validatePassword(password, passwordHash, salt) {
|
|
|
170
171
|
var hashCandidate;
|
|
171
172
|
return __generator(this, function (_a) {
|
|
172
173
|
switch (_a.label) {
|
|
173
|
-
case 0: return [4 /*yield*/,
|
|
174
|
+
case 0: return [4 /*yield*/, BcryptUtils_1.encrypt(password, salt)];
|
|
174
175
|
case 1:
|
|
175
176
|
hashCandidate = _a.sent();
|
|
176
177
|
return [2 /*return*/, hashCandidate === passwordHash];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hasValidPermissions =
|
|
3
|
+
exports.hasValidPermissions = void 0;
|
|
4
4
|
var flink_1 = require("@flink-app/flink");
|
|
5
5
|
/**
|
|
6
6
|
* Checks if provided role has permission to access route
|
|
@@ -21,7 +21,7 @@ function hasValidPermissions(roles, rolePermissions, routePermissions) {
|
|
|
21
21
|
var _loop_1 = function (role) {
|
|
22
22
|
var thisRolesPermissions = rolePermissions[role];
|
|
23
23
|
if (!thisRolesPermissions) {
|
|
24
|
-
flink_1.log.warn("Role '"
|
|
24
|
+
flink_1.log.warn("Role '" + role + "' does not have any permissions defined");
|
|
25
25
|
return "continue";
|
|
26
26
|
}
|
|
27
27
|
if (thisRolesPermissions.includes("*")) {
|
|
@@ -41,3 +41,4 @@ function hasValidPermissions(roles, rolePermissions, routePermissions) {
|
|
|
41
41
|
}
|
|
42
42
|
return false;
|
|
43
43
|
}
|
|
44
|
+
exports.hasValidPermissions = hasValidPermissions;
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
9
5
|
}) : (function(o, m, k, k2) {
|
|
10
6
|
if (k2 === undefined) k2 = k;
|
|
11
7
|
o[k2] = m[k];
|
package/package.json
CHANGED
|
@@ -1,32 +1,35 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
2
|
+
"name": "@flink-app/jwt-auth-plugin",
|
|
3
|
+
"version": "0.11.5",
|
|
4
|
+
"description": "Flink plugin for JWT auth",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "node --preserve-symlinks -r ts-node/register -- node_modules/jasmine/bin/jasmine --config=./spec/support/jasmine.json",
|
|
7
|
+
"test:watch": "nodemon --ext ts --exec 'jasmine-ts --config=./spec/support/jasmine.json'",
|
|
8
|
+
"prepublish": "tsc --project tsconfig.dist.json",
|
|
9
|
+
"watch": "tsc-watch --project tsconfig.dist.json"
|
|
10
|
+
},
|
|
11
|
+
"author": "joel@frost.se",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"types": "dist/index.d.ts",
|
|
14
|
+
"main": "dist/index.js",
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"bcrypt": "^5.0.1",
|
|
20
|
+
"jwt-simple": "^0.5.6"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@flink-app/flink": "^0.11.5",
|
|
24
|
+
"@types/bcrypt": "^5.0.0",
|
|
25
|
+
"@types/jasmine": "^3.7.1",
|
|
26
|
+
"@types/node": "^15.6.2",
|
|
27
|
+
"jasmine": "^3.7.0",
|
|
28
|
+
"jasmine-spec-reporter": "^7.0.0",
|
|
29
|
+
"nodemon": "^2.0.7",
|
|
30
|
+
"ts-node": "^9.1.1",
|
|
31
|
+
"tsc-watch": "^4.2.9",
|
|
32
|
+
"typescript": "^4.2.4"
|
|
33
|
+
},
|
|
34
|
+
"gitHead": "3e4488748859fc5f1de798dea4ea2611f9694221"
|
|
32
35
|
}
|