@nitra/cf-security 4.2.0 → 4.4.0

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/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@nitra/cf-security",
3
- "version": "4.2.0",
3
+ "version": "4.4.0",
4
4
  "description": "check header in serverless",
5
5
  "type": "module",
6
6
  "types": "./types/index.d.ts",
7
7
  "exports": {
8
8
  ".": "./src/index.js",
9
9
  "./jwt": "./src/jwt.js",
10
- "./jwt-c": "./src/jwt-c.js"
10
+ "./jwt-c": "./src/jwt-c.js",
11
+ "./jwt-both": "./src/jwt-both.js"
11
12
  },
12
13
  "scripts": {
13
14
  "test": "env $(cat ./test/.env) npx coverage-node test/index.js"
@@ -24,7 +25,7 @@
24
25
  "homepage": "https://github.com/nitra/cf-security#readme",
25
26
  "dependencies": {
26
27
  "@nitra/bunyan": "^2.0.1",
27
- "@nitra/check-env": "^3.0.0",
28
+ "@nitra/check-env": "^3.1.0",
28
29
  "@nitra/isenv": "^2.0.1",
29
30
  "@nitra/jwt": "^3.7.0"
30
31
  },
@@ -0,0 +1,16 @@
1
+ import { runSecurityHeader } from './jwt.js'
2
+ import { runSecurityCookie } from './jwt-c.js'
3
+
4
+ /**
5
+ * Check request for Nitra security з токеном в кукі
6
+ *
7
+ * @param {object} req - Fastify Request for check
8
+ * @return {Promise<Object>} token if check passed
9
+ */
10
+ export default async (req, allowedRoles) => {
11
+ if (req.headers.authorization) {
12
+ return runSecurityHeader(req, allowedRoles)
13
+ } else {
14
+ return runSecurityCookie(req, allowedRoles)
15
+ }
16
+ }
package/src/jwt-c.js CHANGED
@@ -1,6 +1,6 @@
1
- // @ts-ignore
2
1
  import verify from '@nitra/jwt/verify'
3
2
  import { isDev } from '@nitra/isenv'
3
+ import { intersection } from './utils/intersection.js'
4
4
 
5
5
  /**
6
6
  * Check request for Nitra security з токеном в кукі
@@ -9,6 +9,18 @@ import { isDev } from '@nitra/isenv'
9
9
  * @return {Promise<Object>} token if check passed
10
10
  */
11
11
  export default async (req, allowedRoles) => {
12
+ const { parsed } = await runSecurityCookie(req, allowedRoles)
13
+ return parsed.body
14
+ }
15
+
16
+ /**
17
+ * Check request for Nitra security rules WI
18
+ *
19
+ * @param {object} req - Fastify Request for check
20
+ * @param {Array} allowedRoles - Allowed roles
21
+ * @return {Promise<Object>} token if check passed
22
+ */
23
+ export const runSecurityCookie = async (req, allowedRoles) => {
12
24
  if (!req.raw.headers?.cookie) {
13
25
  throw new Error('[verification] missing cookie')
14
26
  }
@@ -46,10 +58,5 @@ export default async (req, allowedRoles) => {
46
58
  throw new Error(`[verification] unallowed roles ${roleArray}`)
47
59
  }
48
60
 
49
- return token.body
50
- }
51
-
52
- function intersection(a, b) {
53
- const setA = new Set(a)
54
- return b.filter(value => setA.has(value))
61
+ return { raw: c.__session, parsed: token.body }
55
62
  }
package/src/jwt.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import verify from '@nitra/jwt/verify'
2
2
  import { isDev } from '@nitra/isenv'
3
+ import { intersection } from './utils/intersection.js'
3
4
 
4
5
  /**
5
6
  * Check request for Nitra security rules WI
@@ -9,6 +10,18 @@ import { isDev } from '@nitra/isenv'
9
10
  * @return {Promise<string>} token if check passed
10
11
  */
11
12
  export default async (req, allowedRoles) => {
13
+ const { parsed } = await runSecurityHeader(req, allowedRoles)
14
+ return parsed.body
15
+ }
16
+
17
+ /**
18
+ * Check request for Nitra security rules WI
19
+ *
20
+ * @param {object} req - Fastify Request for check
21
+ * @param {Array} allowedRoles - Allowed roles
22
+ * @return {Promise<Object>} token if check passed
23
+ */
24
+ export const runSecurityHeader = async (req, allowedRoles) => {
12
25
  // Для дева можна й не передавати токен
13
26
  if (isDev) {
14
27
  // Але якщо передали - то беремо контент з нього
@@ -50,10 +63,5 @@ export default async (req, allowedRoles) => {
50
63
  throw new Error(`[verification] unallowed roles ${roleArray}`)
51
64
  }
52
65
 
53
- return token.body
54
- }
55
-
56
- function intersection(a, b) {
57
- const setA = new Set(a)
58
- return b.filter(value => setA.has(value))
66
+ return { raw: authHeaders[1], parsed: token.body }
59
67
  }
@@ -0,0 +1,4 @@
1
+ export function intersection(a, b) {
2
+ const setA = new Set(a)
3
+ return b.filter(value => setA.has(value))
4
+ }