@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 +4 -3
- package/src/jwt-both.js +16 -0
- package/src/jwt-c.js +14 -7
- package/src/jwt.js +14 -6
- package/src/utils/intersection.js +4 -0
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nitra/cf-security",
|
|
3
|
-
"version": "4.
|
|
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.
|
|
28
|
+
"@nitra/check-env": "^3.1.0",
|
|
28
29
|
"@nitra/isenv": "^2.0.1",
|
|
29
30
|
"@nitra/jwt": "^3.7.0"
|
|
30
31
|
},
|
package/src/jwt-both.js
ADDED
|
@@ -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
|
}
|