@naturalcycles/backend-lib 4.1.2 → 4.2.3
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/admin/{admin.mw.d.ts → adminMiddleware.d.ts} +0 -0
- package/dist/admin/{admin.mw.js → adminMiddleware.js} +1 -1
- package/dist/admin/{secureHeader.mw.d.ts → secureHeaderMiddleware.d.ts} +9 -2
- package/dist/admin/{secureHeader.mw.js → secureHeaderMiddleware.js} +7 -4
- package/dist/index.d.ts +2 -2
- package/dist/index.js +5 -5
- package/package.json +4 -4
- package/src/admin/{admin.mw.ts → adminMiddleware.ts} +1 -1
- package/src/admin/{secureHeader.mw.ts → secureHeaderMiddleware.ts} +17 -4
- package/src/index.ts +5 -2
|
File without changes
|
|
@@ -19,7 +19,7 @@ exports.createAdminMiddleware = createAdminMiddleware;
|
|
|
19
19
|
*/
|
|
20
20
|
function requireAdminPermissions(adminService, reqPermissions = [], cfg = {}) {
|
|
21
21
|
const { loginHtmlPath = '/login.html', urlStartsWith, apiHost, autoLogin = true } = cfg;
|
|
22
|
-
return async (req, res, next)
|
|
22
|
+
return async function requireAdminPermissionsFn(req, res, next) {
|
|
23
23
|
if (urlStartsWith && !req.url.startsWith(urlStartsWith))
|
|
24
24
|
return next();
|
|
25
25
|
try {
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
import { AdminMiddleware, RequireAdminCfg } from './
|
|
1
|
+
import { AdminMiddleware, RequireAdminCfg } from './adminMiddleware';
|
|
2
2
|
import { BaseAdminService } from './base.admin.service';
|
|
3
3
|
export interface SecureHeaderMiddlewareCfg extends RequireAdminCfg {
|
|
4
4
|
adminService: BaseAdminService;
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Defaults to `Authorization`
|
|
7
|
+
*/
|
|
8
|
+
secureHeaderKey?: string;
|
|
9
|
+
/**
|
|
10
|
+
* If undefined - any value will be accepted, but the header still need to be present.
|
|
11
|
+
*/
|
|
12
|
+
secureHeaderValue?: string;
|
|
6
13
|
}
|
|
7
14
|
/**
|
|
8
15
|
* Secures the endpoint by requiring a secret header to be present.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createSecureHeaderMiddleware = void 0;
|
|
4
4
|
const js_lib_1 = require("@naturalcycles/js-lib");
|
|
5
|
-
const
|
|
5
|
+
const adminMiddleware_1 = require("./adminMiddleware");
|
|
6
6
|
/**
|
|
7
7
|
* Secures the endpoint by requiring a secret header to be present.
|
|
8
8
|
* Throws Error401Admin otherwise.
|
|
@@ -12,14 +12,17 @@ function createSecureHeaderMiddleware(cfg) {
|
|
|
12
12
|
}
|
|
13
13
|
exports.createSecureHeaderMiddleware = createSecureHeaderMiddleware;
|
|
14
14
|
function requireSecureHeaderOrAdmin(cfg, reqPermissions) {
|
|
15
|
-
const
|
|
15
|
+
const { secureHeaderKey = 'Authorization', secureHeaderValue } = cfg;
|
|
16
|
+
const requireAdmin = (0, adminMiddleware_1.requireAdminPermissions)(cfg.adminService, reqPermissions, cfg);
|
|
16
17
|
return async (req, res, next) => {
|
|
17
|
-
const providedHeader = req.get(
|
|
18
|
+
const providedHeader = req.get(secureHeaderKey);
|
|
18
19
|
// pass
|
|
19
|
-
if (!cfg.adminService.cfg.authEnabled
|
|
20
|
+
if (!cfg.adminService.cfg.authEnabled)
|
|
20
21
|
return next();
|
|
21
22
|
// Header provided - don't check for Admin
|
|
22
23
|
if (providedHeader) {
|
|
24
|
+
if (!secureHeaderValue || providedHeader === secureHeaderValue)
|
|
25
|
+
return next();
|
|
23
26
|
return next(new js_lib_1.HttpError('secureHeader or adminToken is required', {
|
|
24
27
|
httpStatusCode: 401,
|
|
25
28
|
adminAuthRequired: true,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import onFinished = require('on-finished');
|
|
2
|
-
import { AdminMiddleware, createAdminMiddleware, loginHtml, RequireAdminCfg } from './admin/
|
|
2
|
+
import { AdminMiddleware, createAdminMiddleware, loginHtml, RequireAdminCfg } from './admin/adminMiddleware';
|
|
3
3
|
import { AdminInfo, AdminServiceCfg, BaseAdminService } from './admin/base.admin.service';
|
|
4
4
|
import { FirebaseSharedService } from './admin/firebase.shared.service';
|
|
5
|
-
import { createSecureHeaderMiddleware, SecureHeaderMiddlewareCfg } from './admin/
|
|
5
|
+
import { createSecureHeaderMiddleware, SecureHeaderMiddlewareCfg } from './admin/secureHeaderMiddleware';
|
|
6
6
|
import { BaseEnv } from './env/env.model';
|
|
7
7
|
import { EnvSharedService, EnvSharedServiceCfg } from './env/env.shared.service';
|
|
8
8
|
export * from './gae/appEngine.util';
|
package/dist/index.js
CHANGED
|
@@ -4,15 +4,15 @@ exports.simpleRequestLoggerMiddleware = exports.clearBodyParserTimeout = exports
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const onFinished = require("on-finished");
|
|
6
6
|
exports.onFinished = onFinished;
|
|
7
|
-
const
|
|
8
|
-
Object.defineProperty(exports, "createAdminMiddleware", { enumerable: true, get: function () { return
|
|
9
|
-
Object.defineProperty(exports, "loginHtml", { enumerable: true, get: function () { return
|
|
7
|
+
const adminMiddleware_1 = require("./admin/adminMiddleware");
|
|
8
|
+
Object.defineProperty(exports, "createAdminMiddleware", { enumerable: true, get: function () { return adminMiddleware_1.createAdminMiddleware; } });
|
|
9
|
+
Object.defineProperty(exports, "loginHtml", { enumerable: true, get: function () { return adminMiddleware_1.loginHtml; } });
|
|
10
10
|
const base_admin_service_1 = require("./admin/base.admin.service");
|
|
11
11
|
Object.defineProperty(exports, "BaseAdminService", { enumerable: true, get: function () { return base_admin_service_1.BaseAdminService; } });
|
|
12
12
|
const firebase_shared_service_1 = require("./admin/firebase.shared.service");
|
|
13
13
|
Object.defineProperty(exports, "FirebaseSharedService", { enumerable: true, get: function () { return firebase_shared_service_1.FirebaseSharedService; } });
|
|
14
|
-
const
|
|
15
|
-
Object.defineProperty(exports, "createSecureHeaderMiddleware", { enumerable: true, get: function () { return
|
|
14
|
+
const secureHeaderMiddleware_1 = require("./admin/secureHeaderMiddleware");
|
|
15
|
+
Object.defineProperty(exports, "createSecureHeaderMiddleware", { enumerable: true, get: function () { return secureHeaderMiddleware_1.createSecureHeaderMiddleware; } });
|
|
16
16
|
const env_shared_service_1 = require("./env/env.shared.service");
|
|
17
17
|
Object.defineProperty(exports, "EnvSharedService", { enumerable: true, get: function () { return env_shared_service_1.EnvSharedService; } });
|
|
18
18
|
(0, tslib_1.__exportStar)(require("./gae/appEngine.util"), exports);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@naturalcycles/backend-lib",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.2.3",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"prepare": "husky install && patch-package",
|
|
6
6
|
"serve": "APP_ENV=dev nodemon",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"@types/on-finished": "^2.3.1",
|
|
27
27
|
"cookie-parser": "^1.4.3",
|
|
28
28
|
"cors": "^2.8.5",
|
|
29
|
-
"dotenv": "^
|
|
29
|
+
"dotenv": "^14.2.0",
|
|
30
30
|
"ejs": "^3.0.1",
|
|
31
31
|
"express": "^4.16.4",
|
|
32
32
|
"express-promise-router": "^4.0.0",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"helmet": "^5.0.0",
|
|
36
36
|
"js-yaml": "^4.0.0",
|
|
37
37
|
"on-finished": "^2.3.0",
|
|
38
|
-
"simple-git": "^
|
|
38
|
+
"simple-git": "^3.0.3",
|
|
39
39
|
"yargs": "^17.0.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"url": "https://github.com/NaturalCycles/backend-lib"
|
|
85
85
|
},
|
|
86
86
|
"engines": {
|
|
87
|
-
"node": ">=
|
|
87
|
+
"node": ">=14.15.0"
|
|
88
88
|
},
|
|
89
89
|
"type": "commonjs",
|
|
90
90
|
"description": "Standard library for making Express.js / AppEngine based backend services",
|
|
@@ -55,7 +55,7 @@ export function requireAdminPermissions(
|
|
|
55
55
|
): BackendRequestHandler {
|
|
56
56
|
const { loginHtmlPath = '/login.html', urlStartsWith, apiHost, autoLogin = true } = cfg
|
|
57
57
|
|
|
58
|
-
return async (req, res, next)
|
|
58
|
+
return async function requireAdminPermissionsFn(req, res, next) {
|
|
59
59
|
if (urlStartsWith && !req.url.startsWith(urlStartsWith)) return next()
|
|
60
60
|
|
|
61
61
|
try {
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { Admin401ErrorData, HttpError } from '@naturalcycles/js-lib'
|
|
2
2
|
import { BackendRequestHandler } from '../server/server.model'
|
|
3
|
-
import { AdminMiddleware, RequireAdminCfg, requireAdminPermissions } from './
|
|
3
|
+
import { AdminMiddleware, RequireAdminCfg, requireAdminPermissions } from './adminMiddleware'
|
|
4
4
|
import { BaseAdminService } from './base.admin.service'
|
|
5
5
|
|
|
6
6
|
export interface SecureHeaderMiddlewareCfg extends RequireAdminCfg {
|
|
7
7
|
adminService: BaseAdminService
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Defaults to `Authorization`
|
|
11
|
+
*/
|
|
12
|
+
secureHeaderKey?: string
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* If undefined - any value will be accepted, but the header still need to be present.
|
|
16
|
+
*/
|
|
17
|
+
secureHeaderValue?: string
|
|
9
18
|
}
|
|
10
19
|
|
|
11
20
|
/**
|
|
@@ -20,16 +29,20 @@ function requireSecureHeaderOrAdmin(
|
|
|
20
29
|
cfg: SecureHeaderMiddlewareCfg,
|
|
21
30
|
reqPermissions?: string[],
|
|
22
31
|
): BackendRequestHandler {
|
|
32
|
+
const { secureHeaderKey = 'Authorization', secureHeaderValue } = cfg
|
|
33
|
+
|
|
23
34
|
const requireAdmin = requireAdminPermissions(cfg.adminService, reqPermissions, cfg)
|
|
24
35
|
|
|
25
36
|
return async (req, res, next) => {
|
|
26
|
-
const providedHeader = req.get(
|
|
37
|
+
const providedHeader = req.get(secureHeaderKey)
|
|
27
38
|
|
|
28
39
|
// pass
|
|
29
|
-
if (!cfg.adminService.cfg.authEnabled
|
|
40
|
+
if (!cfg.adminService.cfg.authEnabled) return next()
|
|
30
41
|
|
|
31
42
|
// Header provided - don't check for Admin
|
|
32
43
|
if (providedHeader) {
|
|
44
|
+
if (!secureHeaderValue || providedHeader === secureHeaderValue) return next()
|
|
45
|
+
|
|
33
46
|
return next(
|
|
34
47
|
new HttpError<Admin401ErrorData>('secureHeader or adminToken is required', {
|
|
35
48
|
httpStatusCode: 401,
|
package/src/index.ts
CHANGED
|
@@ -4,10 +4,13 @@ import {
|
|
|
4
4
|
createAdminMiddleware,
|
|
5
5
|
loginHtml,
|
|
6
6
|
RequireAdminCfg,
|
|
7
|
-
} from './admin/
|
|
7
|
+
} from './admin/adminMiddleware'
|
|
8
8
|
import { AdminInfo, AdminServiceCfg, BaseAdminService } from './admin/base.admin.service'
|
|
9
9
|
import { FirebaseSharedService } from './admin/firebase.shared.service'
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
createSecureHeaderMiddleware,
|
|
12
|
+
SecureHeaderMiddlewareCfg,
|
|
13
|
+
} from './admin/secureHeaderMiddleware'
|
|
11
14
|
import { BaseEnv } from './env/env.model'
|
|
12
15
|
import { EnvSharedService, EnvSharedServiceCfg } from './env/env.shared.service'
|
|
13
16
|
export * from './gae/appEngine.util'
|