@naturalcycles/backend-lib 4.2.0 → 4.2.4

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.
@@ -6,7 +6,10 @@ export interface SecureHeaderMiddlewareCfg extends RequireAdminCfg {
6
6
  * Defaults to `Authorization`
7
7
  */
8
8
  secureHeaderKey?: string;
9
- secureHeaderValue: string;
9
+ /**
10
+ * If undefined - any value will be accepted, but the header still need to be present.
11
+ */
12
+ secureHeaderValue?: string;
10
13
  }
11
14
  /**
12
15
  * Secures the endpoint by requiring a secret header to be present.
@@ -12,15 +12,17 @@ function createSecureHeaderMiddleware(cfg) {
12
12
  }
13
13
  exports.createSecureHeaderMiddleware = createSecureHeaderMiddleware;
14
14
  function requireSecureHeaderOrAdmin(cfg, reqPermissions) {
15
- const { secureHeaderKey = 'Authorization' } = cfg;
15
+ const { secureHeaderKey = 'Authorization', secureHeaderValue } = cfg;
16
16
  const requireAdmin = (0, adminMiddleware_1.requireAdminPermissions)(cfg.adminService, reqPermissions, cfg);
17
17
  return async (req, res, next) => {
18
18
  const providedHeader = req.get(secureHeaderKey);
19
19
  // pass
20
- if (!cfg.adminService.cfg.authEnabled || providedHeader === cfg.secureHeaderValue)
20
+ if (!cfg.adminService.cfg.authEnabled)
21
21
  return next();
22
22
  // Header provided - don't check for Admin
23
23
  if (providedHeader) {
24
+ if (!secureHeaderValue || providedHeader === secureHeaderValue)
25
+ return next();
24
26
  return next(new js_lib_1.HttpError('secureHeader or adminToken is required', {
25
27
  httpStatusCode: 401,
26
28
  adminAuthRequired: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturalcycles/backend-lib",
3
- "version": "4.2.0",
3
+ "version": "4.2.4",
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": "^11.0.0",
29
+ "dotenv": "^15.0.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": "^2.1.0",
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": ">=16.10.0"
87
+ "node": ">=14.15.0"
88
88
  },
89
89
  "type": "commonjs",
90
90
  "description": "Standard library for making Express.js / AppEngine based backend services",
@@ -11,7 +11,10 @@ export interface SecureHeaderMiddlewareCfg extends RequireAdminCfg {
11
11
  */
12
12
  secureHeaderKey?: string
13
13
 
14
- secureHeaderValue: string
14
+ /**
15
+ * If undefined - any value will be accepted, but the header still need to be present.
16
+ */
17
+ secureHeaderValue?: string
15
18
  }
16
19
 
17
20
  /**
@@ -26,7 +29,7 @@ function requireSecureHeaderOrAdmin(
26
29
  cfg: SecureHeaderMiddlewareCfg,
27
30
  reqPermissions?: string[],
28
31
  ): BackendRequestHandler {
29
- const { secureHeaderKey = 'Authorization' } = cfg
32
+ const { secureHeaderKey = 'Authorization', secureHeaderValue } = cfg
30
33
 
31
34
  const requireAdmin = requireAdminPermissions(cfg.adminService, reqPermissions, cfg)
32
35
 
@@ -34,10 +37,12 @@ function requireSecureHeaderOrAdmin(
34
37
  const providedHeader = req.get(secureHeaderKey)
35
38
 
36
39
  // pass
37
- if (!cfg.adminService.cfg.authEnabled || providedHeader === cfg.secureHeaderValue) return next()
40
+ if (!cfg.adminService.cfg.authEnabled) return next()
38
41
 
39
42
  // Header provided - don't check for Admin
40
43
  if (providedHeader) {
44
+ if (!secureHeaderValue || providedHeader === secureHeaderValue) return next()
45
+
41
46
  return next(
42
47
  new HttpError<Admin401ErrorData>('secureHeader or adminToken is required', {
43
48
  httpStatusCode: 401,