lesgo 0.7.8 → 2.1.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/README.md +5 -4
- package/bin/lesgo-scripts.sh +52 -7
- package/dist/config/app.d.ts +7 -0
- package/dist/config/app.js +9 -0
- package/dist/config/aws.d.ts +5 -0
- package/dist/config/aws.js +4 -0
- package/dist/config/basicAuth.d.ts +7 -0
- package/dist/config/basicAuth.js +8 -0
- package/dist/config/crypto.d.ts +10 -0
- package/dist/config/crypto.js +9 -0
- package/dist/config/dynamodb.d.ts +8 -0
- package/dist/config/dynamodb.js +14 -0
- package/dist/config/elasticache.d.ts +7 -0
- package/dist/config/elasticache.js +6 -0
- package/dist/config/index.d.ts +11 -0
- package/dist/config/index.js +11 -0
- package/dist/config/jwt.d.ts +12 -0
- package/dist/config/jwt.js +16 -0
- package/dist/config/rds.d.ts +12 -0
- package/dist/config/rds.js +13 -0
- package/dist/config/s3.d.ts +5 -0
- package/dist/config/s3.js +5 -0
- package/dist/config/secretsManager.d.ts +4 -0
- package/dist/config/secretsManager.js +4 -0
- package/dist/config/sqs.d.ts +9 -0
- package/dist/config/sqs.js +18 -0
- package/dist/exceptions/LesgoException.d.ts +6 -0
- package/{src → dist}/exceptions/LesgoException.js +5 -4
- package/dist/exceptions/index.d.ts +1 -0
- package/dist/exceptions/index.js +1 -0
- package/dist/middlewares/disconnectMiddleware.d.ts +8 -0
- package/dist/middlewares/disconnectMiddleware.js +78 -0
- package/dist/middlewares/httpMiddleware.d.ts +12 -0
- package/dist/middlewares/httpMiddleware.js +74 -0
- package/dist/middlewares/httpResponseMiddleware.d.ts +7 -0
- package/dist/middlewares/httpResponseMiddleware.js +128 -0
- package/dist/middlewares/index.d.ts +7 -0
- package/dist/middlewares/index.js +7 -0
- package/dist/middlewares/invokeCommandMiddleware.d.ts +12 -0
- package/dist/middlewares/invokeCommandMiddleware.js +70 -0
- package/dist/middlewares/sqsMiddleware.d.ts +10 -0
- package/dist/middlewares/sqsMiddleware.js +70 -0
- package/dist/middlewares/verifyBasicAuthMiddleware.d.ts +8 -0
- package/dist/middlewares/verifyBasicAuthMiddleware.js +59 -0
- package/dist/middlewares/verifyJwtMiddleware.d.ts +6 -0
- package/dist/middlewares/verifyJwtMiddleware.js +37 -0
- package/dist/services/DynamoDbService/deleteRecord.d.ts +8 -0
- package/dist/services/DynamoDbService/deleteRecord.js +69 -0
- package/dist/services/DynamoDbService/getClient.d.ts +7 -0
- package/dist/services/DynamoDbService/getClient.js +30 -0
- package/dist/services/DynamoDbService/getTableName.d.ts +2 -0
- package/dist/services/DynamoDbService/getTableName.js +15 -0
- package/dist/services/DynamoDbService/index.d.ts +6 -0
- package/dist/services/DynamoDbService/index.js +6 -0
- package/dist/services/DynamoDbService/putRecord.d.ts +8 -0
- package/dist/services/DynamoDbService/putRecord.js +64 -0
- package/dist/services/DynamoDbService/query.d.ts +7 -0
- package/dist/services/DynamoDbService/query.js +78 -0
- package/dist/services/DynamoDbService/scan.d.ts +7 -0
- package/dist/services/DynamoDbService/scan.js +60 -0
- package/dist/services/DynamoDbService/updateRecord.d.ts +9 -0
- package/dist/services/DynamoDbService/updateRecord.js +89 -0
- package/dist/services/ElastiCacheRedisService/deleteRedisCache.d.ts +3 -0
- package/dist/services/ElastiCacheRedisService/deleteRedisCache.js +62 -0
- package/dist/services/ElastiCacheRedisService/disconnectElastiCacheRedisClient.d.ts +11 -0
- package/dist/services/ElastiCacheRedisService/disconnectElastiCacheRedisClient.js +69 -0
- package/dist/services/ElastiCacheRedisService/getElastiCacheRedisClient.d.ts +12 -0
- package/dist/services/ElastiCacheRedisService/getElastiCacheRedisClient.js +114 -0
- package/dist/services/ElastiCacheRedisService/getRedisCache.d.ts +3 -0
- package/dist/services/ElastiCacheRedisService/getRedisCache.js +70 -0
- package/dist/services/ElastiCacheRedisService/index.d.ts +5 -0
- package/dist/services/ElastiCacheRedisService/index.js +5 -0
- package/dist/services/ElastiCacheRedisService/setRedisCache.d.ts +6 -0
- package/dist/services/ElastiCacheRedisService/setRedisCache.js +77 -0
- package/dist/services/JWTService/decodeJwt.d.ts +7 -0
- package/dist/services/JWTService/decodeJwt.js +9 -0
- package/dist/services/JWTService/getJwtSecret.d.ts +13 -0
- package/dist/services/JWTService/getJwtSecret.js +54 -0
- package/dist/services/JWTService/index.d.ts +2 -0
- package/dist/services/JWTService/index.js +2 -0
- package/dist/services/JWTService/sign.d.ts +3 -0
- package/dist/services/JWTService/sign.js +31 -0
- package/dist/services/JWTService/verify.d.ts +7 -0
- package/dist/services/JWTService/verify.js +61 -0
- package/dist/services/LoggerService.d.ts +46 -0
- package/{src → dist}/services/LoggerService.js +36 -60
- package/dist/services/RDSAuroraMySQLProxyService/disconnectMySQLProxyClient.d.ts +2 -0
- package/dist/services/RDSAuroraMySQLProxyService/disconnectMySQLProxyClient.js +60 -0
- package/dist/services/RDSAuroraMySQLProxyService/getMySQLProxyClient.d.ts +8 -0
- package/dist/services/RDSAuroraMySQLProxyService/getMySQLProxyClient.js +87 -0
- package/dist/services/RDSAuroraMySQLProxyService/index.d.ts +3 -0
- package/dist/services/RDSAuroraMySQLProxyService/index.js +3 -0
- package/dist/services/RDSAuroraMySQLProxyService/query.d.ts +4 -0
- package/dist/services/RDSAuroraMySQLProxyService/query.js +63 -0
- package/dist/services/S3Service/getClient.d.ts +4 -0
- package/dist/services/S3Service/getClient.js +28 -0
- package/dist/services/S3Service/getDownloadSignedUrl.d.ts +7 -0
- package/dist/services/S3Service/getDownloadSignedUrl.js +58 -0
- package/dist/services/S3Service/getHeadObject.d.ts +13 -0
- package/dist/services/S3Service/getHeadObject.js +83 -0
- package/dist/services/S3Service/getObject.d.ts +10 -0
- package/dist/services/S3Service/getObject.js +89 -0
- package/dist/services/S3Service/getUploadSignedUrl.d.ts +7 -0
- package/dist/services/S3Service/getUploadSignedUrl.js +61 -0
- package/dist/services/S3Service/index.d.ts +6 -0
- package/dist/services/S3Service/index.js +6 -0
- package/dist/services/S3Service/putObject.d.ts +9 -0
- package/dist/services/S3Service/putObject.js +77 -0
- package/dist/services/SQSService/deleteMessage.d.ts +9 -0
- package/dist/services/SQSService/deleteMessage.js +69 -0
- package/dist/services/SQSService/dispatch.d.ts +9 -0
- package/dist/services/SQSService/dispatch.js +71 -0
- package/dist/services/SQSService/getClient.d.ts +4 -0
- package/dist/services/SQSService/getClient.js +28 -0
- package/dist/services/SQSService/getQueueUrl.d.ts +7 -0
- package/dist/services/SQSService/getQueueUrl.js +25 -0
- package/dist/services/SQSService/index.d.ts +4 -0
- package/dist/services/SQSService/index.js +4 -0
- package/dist/services/SQSService/receiveMessages.d.ts +8 -0
- package/dist/services/SQSService/receiveMessages.js +65 -0
- package/dist/services/SecretsManagerService/getClient.d.ts +7 -0
- package/dist/services/SecretsManagerService/getClient.js +28 -0
- package/dist/services/SecretsManagerService/getSecretValue.d.ts +7 -0
- package/dist/services/SecretsManagerService/getSecretValue.js +65 -0
- package/dist/services/SecretsManagerService/index.d.ts +2 -0
- package/dist/services/SecretsManagerService/index.js +2 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.js +1 -0
- package/dist/types/aws.d.ts +8 -0
- package/dist/types/aws.js +1 -0
- package/dist/utils/cache/redis/deleteCache.d.ts +19 -0
- package/dist/utils/cache/redis/deleteCache.js +21 -0
- package/dist/utils/cache/redis/getCache.d.ts +22 -0
- package/dist/utils/cache/redis/getCache.js +24 -0
- package/dist/utils/cache/redis/getClient.d.ts +30 -0
- package/dist/utils/cache/redis/getClient.js +32 -0
- package/dist/utils/cache/redis/index.d.ts +4 -0
- package/dist/utils/cache/redis/index.js +4 -0
- package/dist/utils/cache/redis/setCache.d.ts +25 -0
- package/dist/utils/cache/redis/setCache.js +26 -0
- package/dist/utils/crypto/decrypt.d.ts +33 -0
- package/dist/utils/crypto/decrypt.js +59 -0
- package/dist/utils/crypto/encrypt.d.ts +31 -0
- package/dist/utils/crypto/encrypt.js +41 -0
- package/dist/utils/crypto/hash.d.ts +31 -0
- package/dist/utils/crypto/hash.js +56 -0
- package/dist/utils/crypto/index.d.ts +3 -0
- package/dist/utils/crypto/index.js +3 -0
- package/dist/utils/crypto/validateEncryptionFields.d.ts +19 -0
- package/dist/utils/crypto/validateEncryptionFields.js +71 -0
- package/dist/utils/db/mysql/proxy/disconnect.d.ts +2 -0
- package/dist/utils/db/mysql/proxy/disconnect.js +5 -0
- package/dist/utils/db/mysql/proxy/disconnectDb.d.ts +2 -0
- package/dist/utils/db/mysql/proxy/disconnectDb.js +5 -0
- package/dist/utils/db/mysql/proxy/getClient.d.ts +4 -0
- package/dist/utils/db/mysql/proxy/getClient.js +5 -0
- package/dist/utils/db/mysql/proxy/index.d.ts +3 -0
- package/dist/utils/db/mysql/proxy/index.js +3 -0
- package/dist/utils/db/mysql/proxy/query.d.ts +4 -0
- package/dist/utils/db/mysql/proxy/query.js +45 -0
- package/dist/utils/dynamodb/deleteRecord.d.ts +5 -0
- package/dist/utils/dynamodb/deleteRecord.js +39 -0
- package/dist/utils/dynamodb/getClient.d.ts +3 -0
- package/dist/utils/dynamodb/getClient.js +5 -0
- package/dist/utils/dynamodb/index.d.ts +6 -0
- package/dist/utils/dynamodb/index.js +6 -0
- package/dist/utils/dynamodb/putRecord.d.ts +4 -0
- package/dist/utils/dynamodb/putRecord.js +39 -0
- package/dist/utils/dynamodb/query.d.ts +5 -0
- package/dist/utils/dynamodb/query.js +52 -0
- package/dist/utils/dynamodb/scan.d.ts +4 -0
- package/dist/utils/dynamodb/scan.js +40 -0
- package/dist/utils/dynamodb/updateRecord.d.ts +5 -0
- package/dist/utils/dynamodb/updateRecord.js +53 -0
- package/dist/utils/formatUnixTimestamp.d.ts +8 -0
- package/dist/utils/formatUnixTimestamp.js +17 -0
- package/dist/utils/generateUid.d.ts +13 -0
- package/{src → dist}/utils/generateUid.js +9 -4
- package/dist/utils/getCurrentDatetime.d.ts +2 -0
- package/dist/utils/getCurrentDatetime.js +4 -0
- package/dist/utils/getCurrentTimestamp.d.ts +7 -0
- package/dist/utils/getCurrentTimestamp.js +9 -0
- package/dist/utils/getJwtSubFromAuthHeader.d.ts +9 -0
- package/dist/utils/getJwtSubFromAuthHeader.js +24 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/isDecimal.d.ts +8 -0
- package/dist/utils/isDecimal.js +9 -0
- package/dist/utils/isEmail.d.ts +9 -0
- package/{src → dist}/utils/isEmail.js +9 -4
- package/dist/utils/isEmpty.d.ts +8 -0
- package/dist/utils/isEmpty.js +19 -0
- package/dist/utils/jwt/index.d.ts +2 -0
- package/dist/utils/jwt/index.js +2 -0
- package/dist/utils/jwt/sign.d.ts +3 -0
- package/dist/utils/jwt/sign.js +5 -0
- package/dist/utils/jwt/verify.d.ts +3 -0
- package/dist/utils/jwt/verify.js +12 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.js +38 -0
- package/dist/utils/s3/getClient.d.ts +3 -0
- package/dist/utils/s3/getClient.js +5 -0
- package/dist/utils/s3/getDownloadSignedUrl.d.ts +5 -0
- package/dist/utils/s3/getDownloadSignedUrl.js +39 -0
- package/dist/utils/s3/getHeadObject.d.ts +10 -0
- package/dist/utils/s3/getHeadObject.js +39 -0
- package/dist/utils/s3/getObject.d.ts +13 -0
- package/dist/utils/s3/getObject.js +51 -0
- package/dist/utils/s3/getUploadSignedUrl.d.ts +5 -0
- package/dist/utils/s3/getUploadSignedUrl.js +39 -0
- package/dist/utils/s3/index.d.ts +6 -0
- package/dist/utils/s3/index.js +6 -0
- package/dist/utils/s3/putObject.d.ts +5 -0
- package/dist/utils/s3/putObject.js +39 -0
- package/dist/utils/secretsmanager/getClient.d.ts +3 -0
- package/dist/utils/secretsmanager/getClient.js +5 -0
- package/dist/utils/secretsmanager/getSecretValue.d.ts +4 -0
- package/dist/utils/secretsmanager/getSecretValue.js +68 -0
- package/dist/utils/secretsmanager/index.d.ts +2 -0
- package/dist/utils/secretsmanager/index.js +2 -0
- package/dist/utils/sqs/deleteMessage.d.ts +5 -0
- package/dist/utils/sqs/deleteMessage.js +39 -0
- package/dist/utils/sqs/dispatch.d.ts +5 -0
- package/dist/utils/sqs/dispatch.js +39 -0
- package/dist/utils/sqs/getClient.d.ts +3 -0
- package/dist/utils/sqs/getClient.js +5 -0
- package/dist/utils/sqs/index.d.ts +4 -0
- package/dist/utils/sqs/index.js +4 -0
- package/dist/utils/sqs/receiveMessages.d.ts +5 -0
- package/dist/utils/sqs/receiveMessages.js +39 -0
- package/dist/utils/validateFields.d.ts +22 -0
- package/{src → dist}/utils/validateFields.js +13 -19
- package/package.json +145 -34
- package/CHANGELOG.md +0 -9
- package/src/exceptions/__tests__/LesgoException.spec.js +0 -24
- package/src/exceptions/index.js +0 -4
- package/src/index.js +0 -4
- package/src/middlewares/__mocks__/ValidationErrorException.js +0 -18
- package/src/middlewares/__tests__/basicAuthMiddleware.spec.js +0 -225
- package/src/middlewares/__tests__/clientAuthMiddleware.spec.js +0 -137
- package/src/middlewares/__tests__/errorHttpResponseMiddleware.spec.js +0 -190
- package/src/middlewares/__tests__/gzipHttpResponse.spec.js +0 -185
- package/src/middlewares/__tests__/httpNoOutputMiddleware.spec.js +0 -199
- package/src/middlewares/__tests__/normalizeHttpRequestMiddleware.spec.js +0 -181
- package/src/middlewares/__tests__/normalizeSQSMessageMiddleware.spec.js +0 -120
- package/src/middlewares/__tests__/serverAuthMiddleware.spec.js +0 -170
- package/src/middlewares/__tests__/successHttpResponseMiddleware.spec.js +0 -159
- package/src/middlewares/__tests__/verifyJwtMiddleware.spec.js +0 -222
- package/src/middlewares/basicAuthMiddleware.js +0 -145
- package/src/middlewares/clientAuthMiddleware.js +0 -82
- package/src/middlewares/errorHttpResponseMiddleware.js +0 -99
- package/src/middlewares/gzipHttpResponse.js +0 -98
- package/src/middlewares/httpMiddleware.js +0 -19
- package/src/middlewares/httpNoOutputMiddleware.js +0 -87
- package/src/middlewares/index.js +0 -15
- package/src/middlewares/normalizeHttpRequestMiddleware.js +0 -101
- package/src/middlewares/normalizeSQSMessageMiddleware.js +0 -67
- package/src/middlewares/serverAuthMiddleware.js +0 -29
- package/src/middlewares/successHttpResponseMiddleware.js +0 -83
- package/src/middlewares/verifyJwtMiddleware.js +0 -62
- package/src/services/AuroraDbRDSProxyService.js +0 -182
- package/src/services/AuroraDbService.js +0 -111
- package/src/services/DynamoDbService.js +0 -177
- package/src/services/ElastiCacheService.js +0 -17
- package/src/services/ElasticsearchService.js +0 -181
- package/src/services/FirebaseAdminService.js +0 -108
- package/src/services/JwtService.js +0 -52
- package/src/services/S3Service.js +0 -59
- package/src/services/SQSService.js +0 -65
- package/src/services/__tests__/AuroraDbRDSProxyService.spec.js +0 -278
- package/src/services/__tests__/AuroraDbService.spec.js +0 -211
- package/src/services/__tests__/AwsElasticsearchConnection.spec.js +0 -89
- package/src/services/__tests__/DynamoDbService.spec.js +0 -314
- package/src/services/__tests__/ElasticsearchService.spec.js +0 -201
- package/src/services/__tests__/FirebaseAdminService.spec.js +0 -356
- package/src/services/__tests__/JwtService.spec.js +0 -35
- package/src/services/__tests__/LengthAwarePaginator.spec.js +0 -223
- package/src/services/__tests__/LoggerService.spec.js +0 -252
- package/src/services/__tests__/Paginator.spec.js +0 -383
- package/src/services/__tests__/S3Service.spec.js +0 -55
- package/src/services/__tests__/SQSService.spec.js +0 -47
- package/src/services/__tests__/SignedRequest.spec.js +0 -103
- package/src/services/aws/AwsElasticsearchConnection.js +0 -59
- package/src/services/aws/SignedRequest.js +0 -158
- package/src/services/index.js +0 -19
- package/src/services/pagination/LengthAwarePaginator.js +0 -49
- package/src/services/pagination/Paginator.js +0 -260
- package/src/utils/__mocks__/db.js +0 -109
- package/src/utils/__tests__/cache.spec.js +0 -131
- package/src/utils/__tests__/crypto.spec.js +0 -122
- package/src/utils/__tests__/db.spec.js +0 -70
- package/src/utils/__tests__/dynamodb.spec.js +0 -27
- package/src/utils/__tests__/elasticsearch.spec.js +0 -43
- package/src/utils/__tests__/generateUid.spec.js +0 -36
- package/src/utils/__tests__/getJwtSubFromAuthHeader.spec.js +0 -20
- package/src/utils/__tests__/isDecimal.spec.js +0 -12
- package/src/utils/__tests__/isEmail.spec.js +0 -28
- package/src/utils/__tests__/isEmpty.spec.js +0 -31
- package/src/utils/__tests__/logger.spec.js +0 -11
- package/src/utils/__tests__/objectStore.spec.js +0 -67
- package/src/utils/__tests__/prepSQLInsertParams.spec.js +0 -46
- package/src/utils/__tests__/prepSQLUpdateParams.spec.js +0 -36
- package/src/utils/__tests__/queue.spec.js +0 -54
- package/src/utils/__tests__/validateFields.spec.js +0 -374
- package/src/utils/cache.js +0 -215
- package/src/utils/crypto.js +0 -77
- package/src/utils/db.js +0 -17
- package/src/utils/dynamodb.js +0 -6
- package/src/utils/elasticsearch.js +0 -20
- package/src/utils/getJwtSubFromAuthHeader.js +0 -18
- package/src/utils/index.js +0 -26
- package/src/utils/isDecimal.js +0 -2
- package/src/utils/isEmpty.js +0 -6
- package/src/utils/logger.js +0 -25
- package/src/utils/objectStore.js +0 -11
- package/src/utils/prepSQLInsertParams.js +0 -21
- package/src/utils/prepSQLUpdateParams.js +0 -25
- package/src/utils/queue.js +0 -11
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import serverAuthMiddleware, {
|
|
2
|
-
serverAuthBeforeHandler,
|
|
3
|
-
} from '../serverAuthMiddleware';
|
|
4
|
-
import { generateBasicAuthorizationHash } from '../basicAuthMiddleware';
|
|
5
|
-
import client from '../../../tests/__mocks__/config/client';
|
|
6
|
-
|
|
7
|
-
describe('test serverAuthMiddleware middleware', () => {
|
|
8
|
-
test.each`
|
|
9
|
-
clientObj
|
|
10
|
-
${undefined}
|
|
11
|
-
${{}}
|
|
12
|
-
${{
|
|
13
|
-
default: {
|
|
14
|
-
key: '1111-1111-1111-1111',
|
|
15
|
-
secret: '1111-1111-1111-1111',
|
|
16
|
-
},
|
|
17
|
-
}}
|
|
18
|
-
`('should return object', ({ clientObj }) => {
|
|
19
|
-
const result = serverAuthMiddleware({
|
|
20
|
-
client: clientObj,
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
expect(result).toHaveProperty('before');
|
|
24
|
-
expect(result).toHaveProperty('onError');
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
// eslint-disable-next-line
|
|
29
|
-
const next = () => {};
|
|
30
|
-
|
|
31
|
-
describe('test serverAuthBeforeHandler with valid credentials', () => {
|
|
32
|
-
const validBasicAuth = Buffer.from(
|
|
33
|
-
generateBasicAuthorizationHash(
|
|
34
|
-
client.platform_2.key,
|
|
35
|
-
client.platform_2.secret
|
|
36
|
-
)
|
|
37
|
-
).toString('base64');
|
|
38
|
-
|
|
39
|
-
test.each`
|
|
40
|
-
clientObj
|
|
41
|
-
${undefined}
|
|
42
|
-
${{}}
|
|
43
|
-
${{
|
|
44
|
-
platform_2: {
|
|
45
|
-
key: '2222-2222-2222-2222',
|
|
46
|
-
secret: '2222-2222-2222-2222',
|
|
47
|
-
},
|
|
48
|
-
}}
|
|
49
|
-
`('should return undefined when successful', ({ clientObj }) => {
|
|
50
|
-
const handler = {
|
|
51
|
-
event: {
|
|
52
|
-
headers: {
|
|
53
|
-
Authorization: `basic ${validBasicAuth}`,
|
|
54
|
-
},
|
|
55
|
-
site: {
|
|
56
|
-
id: 'platform_2',
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
let hasError = false;
|
|
62
|
-
|
|
63
|
-
try {
|
|
64
|
-
serverAuthBeforeHandler(handler, next, {
|
|
65
|
-
client: clientObj,
|
|
66
|
-
});
|
|
67
|
-
} catch (e) {
|
|
68
|
-
hasError = true;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
expect(hasError).toBeFalsy();
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
test.each`
|
|
75
|
-
Authorization | blacklistMode
|
|
76
|
-
${undefined} | ${false}
|
|
77
|
-
${`basic ${validBasicAuth}`} | ${false}
|
|
78
|
-
${`Basic ${validBasicAuth}`} | ${false}
|
|
79
|
-
${`basic ${validBasicAuth}`} | ${true}
|
|
80
|
-
${`Basic ${validBasicAuth}`} | ${true}
|
|
81
|
-
`(
|
|
82
|
-
'test Exception with valid credentials',
|
|
83
|
-
({ Authorization, blacklistMode }) => {
|
|
84
|
-
const handler = {
|
|
85
|
-
event: {
|
|
86
|
-
headers: {
|
|
87
|
-
Authorization,
|
|
88
|
-
},
|
|
89
|
-
site: {
|
|
90
|
-
id: 'platform_2',
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
let hasError = false;
|
|
96
|
-
|
|
97
|
-
try {
|
|
98
|
-
serverAuthBeforeHandler(handler, next, {
|
|
99
|
-
blacklistMode,
|
|
100
|
-
});
|
|
101
|
-
} catch (e) {
|
|
102
|
-
hasError = true;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
expect(hasError).toBeFalsy();
|
|
106
|
-
}
|
|
107
|
-
);
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
describe('test serverAuthBeforeHandler error handling', () => {
|
|
111
|
-
const invalidClientKey = Buffer.from('client_key:secret_key').toString(
|
|
112
|
-
'base64'
|
|
113
|
-
);
|
|
114
|
-
const invalidSecretKey = Buffer.from(
|
|
115
|
-
`${client.platform_2.key}:secret_key`
|
|
116
|
-
).toString('base64');
|
|
117
|
-
|
|
118
|
-
test.each`
|
|
119
|
-
headers | errorName | errorMessage | errorStatusCode | errorCode | blacklistMode
|
|
120
|
-
${{}} | ${'LesgoException'} | ${'Authorization Header is required!'} | ${403} | ${'JWT_MISSING_AUTHORIZATION_HEADER'} | ${undefined}
|
|
121
|
-
${{ Authorization: 'auth' }} | ${'LesgoException'} | ${'Missing Bearer token!'} | ${403} | ${'JWT_MISSING_BEARER_TOKEN'} | ${undefined}
|
|
122
|
-
${{ Authorization: 'basic ' }} | ${'LesgoException'} | ${'Empty basic authentication hash provided'} | ${403} | ${'Middlewares/basicAuthMiddleware::AUTH_EMPTY_BASIC_HASH'} | ${undefined}
|
|
123
|
-
${{ Authorization: `basic ${invalidClientKey}` }} | ${'LesgoException'} | ${'Invalid client key or secret provided'} | ${403} | ${'Middlewares/basicAuthMiddleware::AUTH_INVALID_CLIENT_OR_SECRET_KEY'} | ${undefined}
|
|
124
|
-
${{ Authorization: `basic ${invalidSecretKey}` }} | ${'LesgoException'} | ${'Invalid client key or secret provided'} | ${403} | ${'Middlewares/basicAuthMiddleware::AUTH_INVALID_CLIENT_OR_SECRET_KEY'} | ${undefined}
|
|
125
|
-
${{ Authorization: `Basic ${invalidSecretKey}` }} | ${'LesgoException'} | ${'Invalid client key or secret provided'} | ${403} | ${'Middlewares/basicAuthMiddleware::AUTH_INVALID_CLIENT_OR_SECRET_KEY'} | ${undefined}
|
|
126
|
-
${{}} | ${'LesgoException'} | ${'Authorization Header is required!'} | ${403} | ${'JWT_MISSING_AUTHORIZATION_HEADER'} | ${true}
|
|
127
|
-
${{ Authorization: 'auth' }} | ${'LesgoException'} | ${'Missing Bearer token!'} | ${403} | ${'JWT_MISSING_BEARER_TOKEN'} | ${true}
|
|
128
|
-
${{ Authorization: 'basic ' }} | ${'LesgoException'} | ${'Empty basic authentication hash provided'} | ${403} | ${'Middlewares/basicAuthMiddleware::AUTH_EMPTY_BASIC_HASH'} | ${true}
|
|
129
|
-
${{ Authorization: `basic ${invalidClientKey}` }} | ${'LesgoException'} | ${'Invalid client key or secret provided'} | ${403} | ${'Middlewares/basicAuthMiddleware::AUTH_INVALID_CLIENT_OR_SECRET_KEY'} | ${true}
|
|
130
|
-
${{ Authorization: `basic ${invalidSecretKey}` }} | ${'LesgoException'} | ${'Invalid client key or secret provided'} | ${403} | ${'Middlewares/basicAuthMiddleware::AUTH_INVALID_CLIENT_OR_SECRET_KEY'} | ${true}
|
|
131
|
-
${{ Authorization: `Basic ${invalidSecretKey}` }} | ${'LesgoException'} | ${'Invalid client key or secret provided'} | ${403} | ${'Middlewares/basicAuthMiddleware::AUTH_INVALID_CLIENT_OR_SECRET_KEY'} | ${true}
|
|
132
|
-
${{ Authorization: 'auth' }} | ${'LesgoException'} | ${'Missing Bearer token!'} | ${403} | ${'JWT_MISSING_BEARER_TOKEN'} | ${false}
|
|
133
|
-
${{ Authorization: 'basic ' }} | ${'LesgoException'} | ${'Empty basic authentication hash provided'} | ${403} | ${'Middlewares/basicAuthMiddleware::AUTH_EMPTY_BASIC_HASH'} | ${false}
|
|
134
|
-
${{ Authorization: `basic ${invalidClientKey}` }} | ${'LesgoException'} | ${'Invalid client key or secret provided'} | ${403} | ${'Middlewares/basicAuthMiddleware::AUTH_INVALID_CLIENT_OR_SECRET_KEY'} | ${false}
|
|
135
|
-
${{ Authorization: `basic ${invalidSecretKey}` }} | ${'LesgoException'} | ${'Invalid client key or secret provided'} | ${403} | ${'Middlewares/basicAuthMiddleware::AUTH_INVALID_CLIENT_OR_SECRET_KEY'} | ${false}
|
|
136
|
-
${{ Authorization: `Basic ${invalidSecretKey}` }} | ${'LesgoException'} | ${'Invalid client key or secret provided'} | ${403} | ${'Middlewares/basicAuthMiddleware::AUTH_INVALID_CLIENT_OR_SECRET_KEY'} | ${false}
|
|
137
|
-
`(
|
|
138
|
-
'should throw $errorMessage when authorization header is $headers',
|
|
139
|
-
async ({
|
|
140
|
-
headers,
|
|
141
|
-
errorName,
|
|
142
|
-
errorMessage,
|
|
143
|
-
errorStatusCode,
|
|
144
|
-
errorCode,
|
|
145
|
-
blacklistMode,
|
|
146
|
-
}) => {
|
|
147
|
-
const handler = {
|
|
148
|
-
event: {
|
|
149
|
-
headers,
|
|
150
|
-
site: {
|
|
151
|
-
id: 'platform_1',
|
|
152
|
-
},
|
|
153
|
-
},
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
try {
|
|
157
|
-
expect(
|
|
158
|
-
serverAuthBeforeHandler(handler, next, {
|
|
159
|
-
blacklistMode,
|
|
160
|
-
})
|
|
161
|
-
).toThrow();
|
|
162
|
-
} catch (error) {
|
|
163
|
-
expect(error.name).toBe(errorName);
|
|
164
|
-
expect(error.message).toBe(errorMessage);
|
|
165
|
-
expect(error.statusCode).toBe(errorStatusCode);
|
|
166
|
-
expect(error.code).toBe(errorCode);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
);
|
|
170
|
-
});
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
successHttpResponseHandler,
|
|
3
|
-
successHttpResponseAfterHandler,
|
|
4
|
-
} from '../successHttpResponseMiddleware';
|
|
5
|
-
|
|
6
|
-
describe('MiddlewareGroup: test successHttpResponseHandler middleware', () => {
|
|
7
|
-
it('test default without parameters', async () => {
|
|
8
|
-
const data = await successHttpResponseHandler();
|
|
9
|
-
|
|
10
|
-
expect(data.headers['Access-Control-Allow-Origin']).toBe('*');
|
|
11
|
-
expect(data.headers['Cache-Control']).toBe('no-cache');
|
|
12
|
-
|
|
13
|
-
expect(data.statusCode).toBe(200);
|
|
14
|
-
|
|
15
|
-
expect(typeof data.body).toBe('string');
|
|
16
|
-
|
|
17
|
-
const dataBody = JSON.parse(data.body);
|
|
18
|
-
expect(dataBody).toHaveProperty('status', 'success');
|
|
19
|
-
expect(dataBody).toHaveProperty('data', '');
|
|
20
|
-
expect(dataBody).toHaveProperty('_meta', {});
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('test default', async () => {
|
|
24
|
-
const data = await successHttpResponseHandler({ response: 'Some message' });
|
|
25
|
-
|
|
26
|
-
expect(data.headers['Access-Control-Allow-Origin']).toBe('*');
|
|
27
|
-
expect(data.headers['Cache-Control']).toBe('no-cache');
|
|
28
|
-
|
|
29
|
-
expect(data.statusCode).toBe(200);
|
|
30
|
-
|
|
31
|
-
expect(typeof data.body).toBe('string');
|
|
32
|
-
|
|
33
|
-
const dataBody = JSON.parse(data.body);
|
|
34
|
-
expect(dataBody).toHaveProperty('status', 'success');
|
|
35
|
-
expect(dataBody).toHaveProperty('data', 'Some message');
|
|
36
|
-
expect(dataBody).toHaveProperty('_meta', {});
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it('test with status code and event', async () => {
|
|
40
|
-
const data = await successHttpResponseHandler({
|
|
41
|
-
response: 'Some message',
|
|
42
|
-
statusCode: 201,
|
|
43
|
-
event: {
|
|
44
|
-
someEventKey: 'someEventValue',
|
|
45
|
-
},
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
expect(data.statusCode).toBe(201);
|
|
49
|
-
|
|
50
|
-
const dataBody = JSON.parse(data.body);
|
|
51
|
-
expect(dataBody).toHaveProperty('status', 'success');
|
|
52
|
-
expect(dataBody).toHaveProperty('data', 'Some message');
|
|
53
|
-
expect(dataBody).toHaveProperty('_meta', {});
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it('test with status code and event in debug mode', async () => {
|
|
57
|
-
const data = await successHttpResponseHandler({
|
|
58
|
-
response: 'Some message',
|
|
59
|
-
statusCode: 201,
|
|
60
|
-
event: {
|
|
61
|
-
someEventKey: 'someEventValue',
|
|
62
|
-
},
|
|
63
|
-
debugMode: true,
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
expect(data.statusCode).toBe(201);
|
|
67
|
-
|
|
68
|
-
const dataBody = JSON.parse(data.body);
|
|
69
|
-
expect(dataBody).toHaveProperty('status', 'success');
|
|
70
|
-
expect(dataBody).toHaveProperty('data', 'Some message');
|
|
71
|
-
expect(dataBody).toHaveProperty('_meta', {
|
|
72
|
-
someEventKey: 'someEventValue',
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
it('test with configurable header', async () => {
|
|
77
|
-
const data = await successHttpResponseHandler({
|
|
78
|
-
response: 'Some message',
|
|
79
|
-
headers: {
|
|
80
|
-
'Access-Control-Allow-Credentials': false,
|
|
81
|
-
'X-Token-Id': 'token',
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
expect(data.headers['Access-Control-Allow-Credentials']).toBe(false);
|
|
86
|
-
expect(data.headers['Access-Control-Allow-Origin']).toBe('*');
|
|
87
|
-
expect(data.headers['Cache-Control']).toBe('no-cache');
|
|
88
|
-
expect(data.headers['X-Token-Id']).toBe('token');
|
|
89
|
-
|
|
90
|
-
expect(data.statusCode).toBe(200);
|
|
91
|
-
|
|
92
|
-
expect(typeof data.body).toBe('string');
|
|
93
|
-
|
|
94
|
-
const dataBody = JSON.parse(data.body);
|
|
95
|
-
expect(dataBody).toHaveProperty('status', 'success');
|
|
96
|
-
expect(dataBody).toHaveProperty('data', 'Some message');
|
|
97
|
-
expect(dataBody).toHaveProperty('_meta', {});
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it('should call db.end() whenever a db options is set', async () => {
|
|
101
|
-
const end = jest.fn().mockResolvedValue();
|
|
102
|
-
await successHttpResponseHandler({
|
|
103
|
-
response: 'Some message',
|
|
104
|
-
headers: {
|
|
105
|
-
'Access-Control-Allow-Credentials': false,
|
|
106
|
-
'X-Token-Id': 'token',
|
|
107
|
-
},
|
|
108
|
-
db: {
|
|
109
|
-
end,
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
expect(end).toHaveBeenCalledTimes(1);
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('should call dbRead.end() whenever a dbRead options is set', async () => {
|
|
117
|
-
const end = jest.fn().mockResolvedValue();
|
|
118
|
-
await successHttpResponseHandler({
|
|
119
|
-
response: 'Some message',
|
|
120
|
-
headers: {
|
|
121
|
-
'Access-Control-Allow-Credentials': false,
|
|
122
|
-
'X-Token-Id': 'token',
|
|
123
|
-
},
|
|
124
|
-
dbRead: {
|
|
125
|
-
end,
|
|
126
|
-
},
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
expect(end).toHaveBeenCalledTimes(1);
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
it('should call cache.end() whenever a cache options is set', async () => {
|
|
133
|
-
const end = jest.fn().mockResolvedValue();
|
|
134
|
-
await successHttpResponseHandler({
|
|
135
|
-
response: 'Some message',
|
|
136
|
-
headers: {
|
|
137
|
-
'Access-Control-Allow-Credentials': false,
|
|
138
|
-
'X-Token-Id': 'token',
|
|
139
|
-
},
|
|
140
|
-
cache: {
|
|
141
|
-
end,
|
|
142
|
-
},
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
expect(end).toHaveBeenCalledTimes(1);
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
describe('MiddlewareGroup: test successHttpResponseAfterHandler', () => {
|
|
150
|
-
it('test with default parameters', async () => {
|
|
151
|
-
const handler = {
|
|
152
|
-
response: {},
|
|
153
|
-
event: {},
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
await successHttpResponseAfterHandler(handler, () => {});
|
|
157
|
-
expect(handler.response).toHaveProperty('statusCode', 200);
|
|
158
|
-
});
|
|
159
|
-
});
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
import config from 'Config/jwt'; // eslint-disable-line import/no-unresolved
|
|
2
|
-
import verifyJwtMiddleware, {
|
|
3
|
-
verifyJwtMiddlewareBeforeHandler,
|
|
4
|
-
} from '../verifyJwtMiddleware';
|
|
5
|
-
import LesgoException from '../../exceptions/LesgoException';
|
|
6
|
-
|
|
7
|
-
describe('MiddlewareGroup: test verifyJwtMiddleware middleware', () => {
|
|
8
|
-
const handler = {
|
|
9
|
-
event: {
|
|
10
|
-
headers: {},
|
|
11
|
-
queryStringParameters: null,
|
|
12
|
-
body: null,
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
it('should return before object', () => {
|
|
17
|
-
const newHandler = {
|
|
18
|
-
event: {
|
|
19
|
-
...handler.event,
|
|
20
|
-
headers: {
|
|
21
|
-
Authorization:
|
|
22
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJkb21haW4uY29tIiwiZGVwYXJ0bWVudF9pZCI6MX0.pa2TBRqdVSFUhmiglB8SD8ImthqhqZBn0stAdNRcJ3w',
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
const result = verifyJwtMiddleware(newHandler, () => {});
|
|
27
|
-
|
|
28
|
-
expect(result).toHaveProperty('before');
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('test without authorization header', () => {
|
|
32
|
-
expect(() => verifyJwtMiddlewareBeforeHandler(handler, () => {})).toThrow(
|
|
33
|
-
new LesgoException(
|
|
34
|
-
'Authorization Header is required!',
|
|
35
|
-
'JWT_MISSING_AUTHORIZATION_HEADER',
|
|
36
|
-
403
|
|
37
|
-
)
|
|
38
|
-
);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('test with missing bearer token', () => {
|
|
42
|
-
const newHandler = {
|
|
43
|
-
event: {
|
|
44
|
-
...handler.event,
|
|
45
|
-
headers: {
|
|
46
|
-
Authorization: '',
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
expect(() =>
|
|
52
|
-
verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
53
|
-
).toThrow(
|
|
54
|
-
new LesgoException(
|
|
55
|
-
'Authorization Header is required!',
|
|
56
|
-
'JWT_MISSING_AUTHORIZATION_HEADER',
|
|
57
|
-
403
|
|
58
|
-
)
|
|
59
|
-
);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it('test with invalid token', () => {
|
|
63
|
-
const newHandler = {
|
|
64
|
-
event: {
|
|
65
|
-
...handler.event,
|
|
66
|
-
headers: {
|
|
67
|
-
Authorization: 'asdasd',
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
expect(() =>
|
|
73
|
-
verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
74
|
-
).toThrow(
|
|
75
|
-
new LesgoException(
|
|
76
|
-
'Missing Bearer token!',
|
|
77
|
-
'JWT_MISSING_BEARER_TOKEN',
|
|
78
|
-
403
|
|
79
|
-
)
|
|
80
|
-
);
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it('test with malformed token', () => {
|
|
84
|
-
const newHandler = {
|
|
85
|
-
event: {
|
|
86
|
-
...handler.event,
|
|
87
|
-
headers: {
|
|
88
|
-
Authorization: 'Bearer sdawdasdawdawdsd',
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
expect(() =>
|
|
94
|
-
verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
95
|
-
).toThrow(new LesgoException('jwt malformed', 'JWT_ERROR', 403));
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it('test with incorrect secret key', () => {
|
|
99
|
-
const newHandler = {
|
|
100
|
-
event: {
|
|
101
|
-
...handler.event,
|
|
102
|
-
headers: {
|
|
103
|
-
Authorization:
|
|
104
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c',
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
expect(() =>
|
|
110
|
-
verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
111
|
-
).toThrow(new LesgoException('invalid signature', 'JWT_ERROR', 403));
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it('test with invalid ISS', () => {
|
|
115
|
-
const newHandler = {
|
|
116
|
-
event: {
|
|
117
|
-
...handler.event,
|
|
118
|
-
headers: {
|
|
119
|
-
Authorization:
|
|
120
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.2r0UHtMWMcLH3VJVDtVGP2_MT8npWy-w2lsUiZSBFFI',
|
|
121
|
-
},
|
|
122
|
-
},
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
expect(() =>
|
|
126
|
-
verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
127
|
-
).toThrow(
|
|
128
|
-
new LesgoException(
|
|
129
|
-
"Token's [iss] is not valid!",
|
|
130
|
-
'JWT_ISS_NOT_VALID',
|
|
131
|
-
403
|
|
132
|
-
)
|
|
133
|
-
);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
it('test with missing custom claim', () => {
|
|
137
|
-
const newHandler = {
|
|
138
|
-
event: {
|
|
139
|
-
...handler.event,
|
|
140
|
-
headers: {
|
|
141
|
-
Authorization:
|
|
142
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJkb21haW4uY29tIn0.grz7RVA9XuOj4TUKLefvblt6bnSz0yfFpwee1MgMnN0',
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
expect(() =>
|
|
148
|
-
verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
149
|
-
).toThrow(
|
|
150
|
-
new LesgoException(
|
|
151
|
-
`Token's custom claim [${config.customClaims.data[0]}] not found!`,
|
|
152
|
-
'JWT_CUSTOM_CLAIM_NOT_FOUND',
|
|
153
|
-
403
|
|
154
|
-
)
|
|
155
|
-
);
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
it('test with expired token', () => {
|
|
159
|
-
const newHandler = {
|
|
160
|
-
event: {
|
|
161
|
-
...handler.event,
|
|
162
|
-
headers: {
|
|
163
|
-
Authorization:
|
|
164
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJkb21haW4uY29tIiwiZXhwIjoxNTE2MjM5MDIyfQ.-S3Ym5HiC5GPiW1Zjjt4j6L-skqP4PVV5f4fIScgPTE',
|
|
165
|
-
},
|
|
166
|
-
},
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
expect(() =>
|
|
170
|
-
verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
171
|
-
).toThrow(new LesgoException('jwt expired', 'JWT_EXPIRED', 403));
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
it('test with valid token', () => {
|
|
175
|
-
const newHandler = {
|
|
176
|
-
event: {
|
|
177
|
-
...handler.event,
|
|
178
|
-
headers: {
|
|
179
|
-
Authorization:
|
|
180
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJkb21haW4uY29tIiwiZGVwYXJ0bWVudF9pZCI6MX0.pa2TBRqdVSFUhmiglB8SD8ImthqhqZBn0stAdNRcJ3w',
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
verifyJwtMiddlewareBeforeHandler(newHandler, () => {});
|
|
186
|
-
expect(newHandler.event.decodedJwt).toMatchObject({
|
|
187
|
-
sub: '1234567890',
|
|
188
|
-
iss: config.iss.data[0],
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
it('test with custom config', () => {
|
|
193
|
-
const newHandler = {
|
|
194
|
-
event: {
|
|
195
|
-
...handler.event,
|
|
196
|
-
headers: {
|
|
197
|
-
Authorization:
|
|
198
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJkb21haW4uY29tIiwiZGVwYXJ0bWVudF9pZCI6MX0.pa2TBRqdVSFUhmiglB8SD8ImthqhqZBn0stAdNRcJ3w',
|
|
199
|
-
},
|
|
200
|
-
},
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
verifyJwtMiddlewareBeforeHandler(newHandler, () => {}, {
|
|
204
|
-
jwtConfig: {
|
|
205
|
-
secret:
|
|
206
|
-
'c4156b94c80b7f163feabd4ff268c99eb11ce8995df370a4fd872afb4377b273',
|
|
207
|
-
iss: {
|
|
208
|
-
validate: true,
|
|
209
|
-
data: ['domain.com'],
|
|
210
|
-
},
|
|
211
|
-
customClaims: {
|
|
212
|
-
validate: true,
|
|
213
|
-
data: ['department_id'],
|
|
214
|
-
},
|
|
215
|
-
},
|
|
216
|
-
});
|
|
217
|
-
expect(newHandler.event.decodedJwt).toMatchObject({
|
|
218
|
-
sub: '1234567890',
|
|
219
|
-
iss: config.iss.data[0],
|
|
220
|
-
});
|
|
221
|
-
});
|
|
222
|
-
});
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import client from 'Config/client'; // eslint-disable-line import/no-unresolved
|
|
2
|
-
import crypto from 'crypto';
|
|
3
|
-
import LesgoException from '../exceptions/LesgoException';
|
|
4
|
-
import { errorHttpResponseAfterHandler } from './errorHttpResponseMiddleware';
|
|
5
|
-
|
|
6
|
-
const FILE = 'Middlewares/basicAuthMiddleware';
|
|
7
|
-
|
|
8
|
-
const blacklistMode = opts => {
|
|
9
|
-
if (opts && typeof opts.blacklistMode !== 'undefined') {
|
|
10
|
-
return !!opts.blacklistMode;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
return true;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export const generateBasicAuthorizationHash = (key, secret) => {
|
|
17
|
-
return crypto
|
|
18
|
-
.createHash('sha1')
|
|
19
|
-
.update(`${key}:${secret}`)
|
|
20
|
-
.digest('hex');
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
const getSiteId = event => {
|
|
24
|
-
let siteId;
|
|
25
|
-
|
|
26
|
-
if (event.site && event.site.id) {
|
|
27
|
-
siteId = event.site.id;
|
|
28
|
-
} else if (
|
|
29
|
-
event.requestContext &&
|
|
30
|
-
event.requestContext.site &&
|
|
31
|
-
event.requestContext.site.id
|
|
32
|
-
) {
|
|
33
|
-
siteId = event.requestContext.site.id;
|
|
34
|
-
} else if (event.platform) {
|
|
35
|
-
siteId = event.platform;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
if (typeof siteId === 'undefined') {
|
|
39
|
-
throw new LesgoException(
|
|
40
|
-
'Site ID could not be found',
|
|
41
|
-
`${FILE}::SITE_ID_NOT_FOUND`,
|
|
42
|
-
403,
|
|
43
|
-
'Ensure that clientAuthMiddleware() is called before this Middleware'
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return siteId;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
const getClient = opts => {
|
|
51
|
-
if (opts && opts.client && Object.keys(opts.client).length > 0) {
|
|
52
|
-
return opts.client;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return client;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const getHashFromHeaders = (headers, opts) => {
|
|
59
|
-
const basicAuth = headers.Authorization || headers.authorization;
|
|
60
|
-
|
|
61
|
-
if (typeof basicAuth === 'undefined') {
|
|
62
|
-
if (blacklistMode(opts)) {
|
|
63
|
-
throw new LesgoException(
|
|
64
|
-
'Authorization header not found',
|
|
65
|
-
`${FILE}::AUTHORIZATION_HEADER_NOT_FOUND`,
|
|
66
|
-
403,
|
|
67
|
-
'Ensure you are have provided the basic authentication code using Authorization header'
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return '';
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
typeof basicAuth !== 'undefined' &&
|
|
76
|
-
!basicAuth.startsWith('basic ') &&
|
|
77
|
-
!basicAuth.startsWith('Basic ')
|
|
78
|
-
) {
|
|
79
|
-
throw new LesgoException(
|
|
80
|
-
'Invalid authorization type provided',
|
|
81
|
-
`${FILE}::AUTH_INVALID_AUTHORIZATION_TYPE`,
|
|
82
|
-
403,
|
|
83
|
-
'Use the basic authorization method'
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const authEncoded = basicAuth.startsWith('basic ')
|
|
88
|
-
? basicAuth.replace('basic ', '')
|
|
89
|
-
: basicAuth.replace('Basic ', '');
|
|
90
|
-
|
|
91
|
-
if (authEncoded.length <= 0) {
|
|
92
|
-
throw new LesgoException(
|
|
93
|
-
'Empty basic authentication hash provided',
|
|
94
|
-
`${FILE}::AUTH_EMPTY_BASIC_HASH`,
|
|
95
|
-
403,
|
|
96
|
-
'Ensure basic authentication has is provided along with the keyword "Basic"'
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const buff = Buffer.from(authEncoded, 'base64');
|
|
101
|
-
|
|
102
|
-
return buff.toString('utf-8');
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
const validateBasicAuth = (hash, siteId, clientObject, opts) => {
|
|
106
|
-
const site = Object.keys(clientObject).find(clientCode => {
|
|
107
|
-
const hashIsEquals =
|
|
108
|
-
generateBasicAuthorizationHash(
|
|
109
|
-
clientObject[clientCode].key,
|
|
110
|
-
clientObject[clientCode].secret
|
|
111
|
-
) === hash;
|
|
112
|
-
|
|
113
|
-
return siteId === clientCode && hashIsEquals;
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
if (!site && (hash.length > 0 || (hash.length <= 0 && blacklistMode(opts)))) {
|
|
117
|
-
throw new LesgoException(
|
|
118
|
-
'Invalid client key or secret provided',
|
|
119
|
-
`${FILE}::AUTH_INVALID_CLIENT_OR_SECRET_KEY`,
|
|
120
|
-
403,
|
|
121
|
-
'Ensure you are using the correct client key or secret key provided'
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
export const verifyBasicAuthBeforeHandler = (handler, next, opts) => {
|
|
127
|
-
const siteId = getSiteId(handler.event);
|
|
128
|
-
const finalClient = getClient(opts);
|
|
129
|
-
const hashFromHeader = getHashFromHeaders(handler.event.headers, opts);
|
|
130
|
-
|
|
131
|
-
validateBasicAuth(hashFromHeader, siteId, finalClient, opts);
|
|
132
|
-
|
|
133
|
-
next();
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
/* istanbul ignore next */
|
|
137
|
-
const basicAuthMiddleware = opts => {
|
|
138
|
-
return {
|
|
139
|
-
before: (handler, next) =>
|
|
140
|
-
verifyBasicAuthBeforeHandler(handler, next, opts),
|
|
141
|
-
onError: (handler, next) => errorHttpResponseAfterHandler(handler, next),
|
|
142
|
-
};
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
export default basicAuthMiddleware;
|