lesgo 1.0.0 → 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 +4 -4
- 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 +29 -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/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 -264
- package/src/middlewares/__tests__/clientAuthMiddleware.spec.js +0 -235
- package/src/middlewares/__tests__/errorHttpResponseMiddleware.spec.js +0 -203
- package/src/middlewares/__tests__/gzipHttpResponse.spec.js +0 -185
- package/src/middlewares/__tests__/httpNoOutputMiddleware.spec.js +0 -201
- package/src/middlewares/__tests__/normalizeHttpRequestMiddleware.spec.js +0 -181
- package/src/middlewares/__tests__/normalizeSQSMessageMiddleware.spec.js +0 -120
- package/src/middlewares/__tests__/successHttpResponseMiddleware.spec.js +0 -172
- package/src/middlewares/__tests__/verifyJwtMiddleware.spec.js +0 -297
- package/src/middlewares/basicAuthMiddleware.js +0 -125
- package/src/middlewares/clientAuthMiddleware.js +0 -103
- package/src/middlewares/errorHttpResponseMiddleware.js +0 -101
- package/src/middlewares/gzipHttpResponse.js +0 -98
- package/src/middlewares/httpMiddleware.js +0 -19
- package/src/middlewares/httpNoOutputMiddleware.js +0 -91
- package/src/middlewares/index.js +0 -19
- package/src/middlewares/normalizeHttpRequestMiddleware.js +0 -101
- package/src/middlewares/normalizeSQSMessageMiddleware.js +0 -67
- package/src/middlewares/successHttpResponseMiddleware.js +0 -85
- package/src/middlewares/verifyJwtMiddleware.js +0 -73
- 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 -267
- 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,297 +0,0 @@
|
|
|
1
|
-
import config from 'Config/jwt'; // eslint-disable-line import/no-unresolved
|
|
2
|
-
import verifyJwtMiddleware, {
|
|
3
|
-
verifyJwtMiddlewareBeforeHandler,
|
|
4
|
-
} from '../verifyJwtMiddleware';
|
|
5
|
-
|
|
6
|
-
describe('MiddlewareGroup: test verifyJwtMiddleware middleware', () => {
|
|
7
|
-
const handler = {
|
|
8
|
-
event: {
|
|
9
|
-
headers: {},
|
|
10
|
-
queryStringParameters: null,
|
|
11
|
-
body: null,
|
|
12
|
-
},
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
it('should return before object', () => {
|
|
16
|
-
const newHandler = {
|
|
17
|
-
event: {
|
|
18
|
-
...handler.event,
|
|
19
|
-
headers: {
|
|
20
|
-
Authorization:
|
|
21
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJkb21haW4uY29tIiwiZGVwYXJ0bWVudF9pZCI6MX0.pa2TBRqdVSFUhmiglB8SD8ImthqhqZBn0stAdNRcJ3w',
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
const result = verifyJwtMiddleware(newHandler, () => {});
|
|
26
|
-
|
|
27
|
-
expect(result).toHaveProperty('before');
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('test without authorization header', async () => {
|
|
31
|
-
try {
|
|
32
|
-
expect(
|
|
33
|
-
await verifyJwtMiddlewareBeforeHandler(handler, () => {})
|
|
34
|
-
).toThrow();
|
|
35
|
-
} catch (e) {
|
|
36
|
-
expect(e.name).toEqual('LesgoException');
|
|
37
|
-
expect(e.message).toEqual('Authorization Header is required!');
|
|
38
|
-
expect(e.code).toEqual('JWT_MISSING_AUTHORIZATION_HEADER');
|
|
39
|
-
expect(e.statusCode).toEqual(403);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('test with missing bearer token', async () => {
|
|
44
|
-
const newHandler = {
|
|
45
|
-
event: {
|
|
46
|
-
...handler.event,
|
|
47
|
-
headers: {
|
|
48
|
-
Authorization: '',
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
try {
|
|
54
|
-
expect(
|
|
55
|
-
await verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
56
|
-
).toThrow();
|
|
57
|
-
} catch (e) {
|
|
58
|
-
expect(e.name).toEqual('LesgoException');
|
|
59
|
-
expect(e.message).toEqual('Authorization Header is required!');
|
|
60
|
-
expect(e.code).toEqual('JWT_MISSING_AUTHORIZATION_HEADER');
|
|
61
|
-
expect(e.statusCode).toEqual(403);
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('test with invalid token', async () => {
|
|
66
|
-
const newHandler = {
|
|
67
|
-
event: {
|
|
68
|
-
...handler.event,
|
|
69
|
-
headers: {
|
|
70
|
-
Authorization: 'asdasd',
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
try {
|
|
76
|
-
expect(
|
|
77
|
-
await verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
78
|
-
).toThrow();
|
|
79
|
-
} catch (e) {
|
|
80
|
-
expect(e.name).toEqual('LesgoException');
|
|
81
|
-
expect(e.message).toEqual('Missing Bearer token!');
|
|
82
|
-
expect(e.code).toEqual('JWT_MISSING_BEARER_TOKEN');
|
|
83
|
-
expect(e.statusCode).toEqual(403);
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('test with malformed token', async () => {
|
|
88
|
-
const newHandler = {
|
|
89
|
-
event: {
|
|
90
|
-
...handler.event,
|
|
91
|
-
headers: {
|
|
92
|
-
Authorization: 'Bearer sdawdasdawdawdsd',
|
|
93
|
-
},
|
|
94
|
-
},
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
try {
|
|
98
|
-
expect(
|
|
99
|
-
await verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
100
|
-
).toThrow();
|
|
101
|
-
} catch (e) {
|
|
102
|
-
expect(e.name).toEqual('LesgoException');
|
|
103
|
-
expect(e.message).toEqual('jwt malformed');
|
|
104
|
-
expect(e.code).toEqual('JWT_ERROR');
|
|
105
|
-
expect(e.statusCode).toEqual(403);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('test with incorrect secret key', async () => {
|
|
110
|
-
const newHandler = {
|
|
111
|
-
event: {
|
|
112
|
-
...handler.event,
|
|
113
|
-
headers: {
|
|
114
|
-
Authorization:
|
|
115
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c',
|
|
116
|
-
},
|
|
117
|
-
},
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
try {
|
|
121
|
-
expect(
|
|
122
|
-
await verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
123
|
-
).toThrow();
|
|
124
|
-
} catch (e) {
|
|
125
|
-
expect(e.name).toEqual('LesgoException');
|
|
126
|
-
expect(e.message).toEqual('invalid signature');
|
|
127
|
-
expect(e.code).toEqual('JWT_ERROR');
|
|
128
|
-
expect(e.statusCode).toEqual(403);
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
it('test with invalid ISS', async () => {
|
|
133
|
-
const newHandler = {
|
|
134
|
-
event: {
|
|
135
|
-
...handler.event,
|
|
136
|
-
headers: {
|
|
137
|
-
Authorization:
|
|
138
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.2r0UHtMWMcLH3VJVDtVGP2_MT8npWy-w2lsUiZSBFFI',
|
|
139
|
-
},
|
|
140
|
-
},
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
try {
|
|
144
|
-
expect(
|
|
145
|
-
await verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
146
|
-
).toThrow();
|
|
147
|
-
} catch (e) {
|
|
148
|
-
expect(e.name).toEqual('LesgoException');
|
|
149
|
-
expect(e.message).toEqual("Token's [iss] is not valid!");
|
|
150
|
-
expect(e.code).toEqual('JWT_ISS_NOT_VALID');
|
|
151
|
-
expect(e.statusCode).toEqual(403);
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
it('test with missing custom claim', async () => {
|
|
156
|
-
const newHandler = {
|
|
157
|
-
event: {
|
|
158
|
-
...handler.event,
|
|
159
|
-
headers: {
|
|
160
|
-
Authorization:
|
|
161
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJkb21haW4uY29tIn0.grz7RVA9XuOj4TUKLefvblt6bnSz0yfFpwee1MgMnN0',
|
|
162
|
-
},
|
|
163
|
-
},
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
try {
|
|
167
|
-
expect(
|
|
168
|
-
await verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
169
|
-
).toThrow();
|
|
170
|
-
} catch (e) {
|
|
171
|
-
expect(e.name).toEqual('LesgoException');
|
|
172
|
-
expect(e.message).toEqual(
|
|
173
|
-
`Token's custom claim [${config.customClaims.data[0]}] not found!`
|
|
174
|
-
);
|
|
175
|
-
expect(e.code).toEqual('JWT_CUSTOM_CLAIM_NOT_FOUND');
|
|
176
|
-
expect(e.statusCode).toEqual(403);
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
it('test with expired token', async () => {
|
|
181
|
-
const newHandler = {
|
|
182
|
-
event: {
|
|
183
|
-
...handler.event,
|
|
184
|
-
headers: {
|
|
185
|
-
Authorization:
|
|
186
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJkb21haW4uY29tIiwiZXhwIjoxNTE2MjM5MDIyfQ.-S3Ym5HiC5GPiW1Zjjt4j6L-skqP4PVV5f4fIScgPTE',
|
|
187
|
-
},
|
|
188
|
-
},
|
|
189
|
-
};
|
|
190
|
-
|
|
191
|
-
try {
|
|
192
|
-
expect(
|
|
193
|
-
await verifyJwtMiddlewareBeforeHandler(newHandler, () => {})
|
|
194
|
-
).toThrow();
|
|
195
|
-
} catch (e) {
|
|
196
|
-
expect(e.name).toEqual('LesgoException');
|
|
197
|
-
expect(e.message).toEqual('jwt expired');
|
|
198
|
-
expect(e.code).toEqual('JWT_EXPIRED');
|
|
199
|
-
expect(e.statusCode).toEqual(403);
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
it('test with valid token', async () => {
|
|
204
|
-
const newHandler = {
|
|
205
|
-
event: {
|
|
206
|
-
...handler.event,
|
|
207
|
-
headers: {
|
|
208
|
-
Authorization:
|
|
209
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJkb21haW4uY29tIiwiZGVwYXJ0bWVudF9pZCI6MX0.pa2TBRqdVSFUhmiglB8SD8ImthqhqZBn0stAdNRcJ3w',
|
|
210
|
-
},
|
|
211
|
-
},
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
await verifyJwtMiddlewareBeforeHandler(newHandler, () => {});
|
|
215
|
-
expect(newHandler.event.decodedJwt).toMatchObject({
|
|
216
|
-
sub: '1234567890',
|
|
217
|
-
iss: config.iss.data[0],
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
it('test with secret as a function argument', async () => {
|
|
222
|
-
const { secret } = config;
|
|
223
|
-
config.secret = secretHandler => {
|
|
224
|
-
return `111${secretHandler.key}`;
|
|
225
|
-
};
|
|
226
|
-
const newHandler = {
|
|
227
|
-
key: '1',
|
|
228
|
-
event: {
|
|
229
|
-
...handler.event,
|
|
230
|
-
headers: {
|
|
231
|
-
Authorization:
|
|
232
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJkb21haW4uY29tIiwiZGVwYXJ0bWVudF9pZCI6MX0.7RdbXJhzrn_yV7CPqkuX0Yvtms0xaIw1q4LPe8O0BDY',
|
|
233
|
-
},
|
|
234
|
-
},
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
await verifyJwtMiddlewareBeforeHandler(newHandler, () => {});
|
|
238
|
-
expect(newHandler.event.decodedJwt).toMatchObject({
|
|
239
|
-
sub: '1234567890',
|
|
240
|
-
iss: config.iss.data[0],
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
config.secret = secret;
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
it('test with callback argument', async () => {
|
|
247
|
-
const callback = jest.fn();
|
|
248
|
-
config.callback = callback;
|
|
249
|
-
const newHandler = {
|
|
250
|
-
event: {
|
|
251
|
-
...handler.event,
|
|
252
|
-
headers: {
|
|
253
|
-
Authorization:
|
|
254
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJkb21haW4uY29tIiwiZGVwYXJ0bWVudF9pZCI6MX0.pa2TBRqdVSFUhmiglB8SD8ImthqhqZBn0stAdNRcJ3w',
|
|
255
|
-
},
|
|
256
|
-
},
|
|
257
|
-
};
|
|
258
|
-
|
|
259
|
-
await verifyJwtMiddlewareBeforeHandler(newHandler, () => {});
|
|
260
|
-
expect(newHandler.event.decodedJwt).toMatchObject({
|
|
261
|
-
sub: '1234567890',
|
|
262
|
-
iss: config.iss.data[0],
|
|
263
|
-
});
|
|
264
|
-
expect(callback).toHaveBeenCalledWith(newHandler);
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
it('test with custom config', async () => {
|
|
268
|
-
const newHandler = {
|
|
269
|
-
event: {
|
|
270
|
-
...handler.event,
|
|
271
|
-
headers: {
|
|
272
|
-
Authorization:
|
|
273
|
-
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJkb21haW4uY29tIiwiZGVwYXJ0bWVudF9pZCI6MX0.pa2TBRqdVSFUhmiglB8SD8ImthqhqZBn0stAdNRcJ3w',
|
|
274
|
-
},
|
|
275
|
-
},
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
await verifyJwtMiddlewareBeforeHandler(newHandler, () => {}, {
|
|
279
|
-
jwtConfig: {
|
|
280
|
-
secret:
|
|
281
|
-
'c4156b94c80b7f163feabd4ff268c99eb11ce8995df370a4fd872afb4377b273',
|
|
282
|
-
iss: {
|
|
283
|
-
validate: true,
|
|
284
|
-
data: ['domain.com'],
|
|
285
|
-
},
|
|
286
|
-
customClaims: {
|
|
287
|
-
validate: true,
|
|
288
|
-
data: ['department_id'],
|
|
289
|
-
},
|
|
290
|
-
},
|
|
291
|
-
});
|
|
292
|
-
expect(newHandler.event.decodedJwt).toMatchObject({
|
|
293
|
-
sub: '1234567890',
|
|
294
|
-
iss: config.iss.data[0],
|
|
295
|
-
});
|
|
296
|
-
});
|
|
297
|
-
});
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import client from 'Config/client'; // eslint-disable-line import/no-unresolved
|
|
2
|
-
import LesgoException from '../exceptions/LesgoException';
|
|
3
|
-
|
|
4
|
-
const FILE = 'Middlewares/basicAuthMiddleware';
|
|
5
|
-
|
|
6
|
-
export const generateBasicAuthorizationHash = (key, secret, opts = {}) => {
|
|
7
|
-
const { getPreHashString } = {
|
|
8
|
-
...client,
|
|
9
|
-
...opts,
|
|
10
|
-
};
|
|
11
|
-
const preHashString =
|
|
12
|
-
typeof getPreHashString === 'function'
|
|
13
|
-
? getPreHashString(key, secret)
|
|
14
|
-
: `${key}:${secret}`;
|
|
15
|
-
|
|
16
|
-
return Buffer.from(preHashString).toString('base64');
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
const getClient = opts => {
|
|
20
|
-
if (opts && opts.client && Object.keys(opts.client).length > 0) {
|
|
21
|
-
return opts.client;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return client.clients;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const getHashFromHeaders = headers => {
|
|
28
|
-
const basicAuth = headers.Authorization || headers.authorization;
|
|
29
|
-
|
|
30
|
-
if (typeof basicAuth === 'undefined') {
|
|
31
|
-
return '';
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
if (
|
|
35
|
-
typeof basicAuth !== 'undefined' &&
|
|
36
|
-
!basicAuth.startsWith('basic ') &&
|
|
37
|
-
!basicAuth.startsWith('Basic ')
|
|
38
|
-
) {
|
|
39
|
-
throw new LesgoException(
|
|
40
|
-
'Invalid authorization type provided',
|
|
41
|
-
`${FILE}::AUTH_INVALID_AUTHORIZATION_TYPE`,
|
|
42
|
-
403,
|
|
43
|
-
'Use the basic authorization method'
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const authEncoded = basicAuth.startsWith('basic ')
|
|
48
|
-
? basicAuth.replace('basic ', '')
|
|
49
|
-
: basicAuth.replace('Basic ', '');
|
|
50
|
-
|
|
51
|
-
if (authEncoded.length <= 0) {
|
|
52
|
-
throw new LesgoException(
|
|
53
|
-
'Empty basic authentication hash provided',
|
|
54
|
-
`${FILE}::AUTH_EMPTY_BASIC_HASH`,
|
|
55
|
-
403,
|
|
56
|
-
'Ensure basic authentication has is provided along with the keyword "Basic"'
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return authEncoded;
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
const validateBasicAuth = (hash, clientObject, opts, siteId = undefined) => {
|
|
64
|
-
const site = Object.keys(clientObject).find(clientCode => {
|
|
65
|
-
const hashIsEquals =
|
|
66
|
-
generateBasicAuthorizationHash(
|
|
67
|
-
clientObject[clientCode].key,
|
|
68
|
-
clientObject[clientCode].secret,
|
|
69
|
-
opts
|
|
70
|
-
) === hash;
|
|
71
|
-
|
|
72
|
-
return siteId ? siteId === clientCode && hashIsEquals : hashIsEquals;
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
if (!site) {
|
|
76
|
-
throw new LesgoException(
|
|
77
|
-
'Invalid client key or secret provided',
|
|
78
|
-
`${FILE}::AUTH_INVALID_CLIENT_OR_SECRET_KEY`,
|
|
79
|
-
403,
|
|
80
|
-
'Ensure you are using the correct client key or secret key provided'
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
export const verifyBasicAuthBeforeHandler = async (handler, next, opts) => {
|
|
86
|
-
const { headers, platform } = handler.event;
|
|
87
|
-
const finalClient = getClient(opts);
|
|
88
|
-
const hashFromHeader = getHashFromHeaders(headers);
|
|
89
|
-
let isAuthOptional = platform ? platform.isAuthOptional : false;
|
|
90
|
-
if (isAuthOptional && typeof isAuthOptional.then === 'function') {
|
|
91
|
-
isAuthOptional = await isAuthOptional;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (hashFromHeader) {
|
|
95
|
-
validateBasicAuth(
|
|
96
|
-
hashFromHeader,
|
|
97
|
-
finalClient,
|
|
98
|
-
opts,
|
|
99
|
-
platform ? platform.id : undefined
|
|
100
|
-
);
|
|
101
|
-
} else if (!platform || !isAuthOptional) {
|
|
102
|
-
/**
|
|
103
|
-
* An error will occur only when either the platform could not be determined, assuming a basic auth is needed.
|
|
104
|
-
* Or whenever the platform could be determined, but `isAuthOptional` is not true for that platform
|
|
105
|
-
*/
|
|
106
|
-
throw new LesgoException(
|
|
107
|
-
'Authorization header not found',
|
|
108
|
-
`${FILE}::AUTHORIZATION_HEADER_NOT_FOUND`,
|
|
109
|
-
403,
|
|
110
|
-
'Ensure you are have provided the basic authentication code using Authorization header'
|
|
111
|
-
);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
next();
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
/* istanbul ignore next */
|
|
118
|
-
const basicAuthMiddleware = opts => {
|
|
119
|
-
return {
|
|
120
|
-
before: (handler, next) =>
|
|
121
|
-
verifyBasicAuthBeforeHandler(handler, next, opts),
|
|
122
|
-
};
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
export default basicAuthMiddleware;
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import client from 'Config/client'; // eslint-disable-line import/no-unresolved
|
|
2
|
-
import validateFields from '../utils/validateFields';
|
|
3
|
-
import { LesgoException } from '../exceptions';
|
|
4
|
-
|
|
5
|
-
const FILE = 'Middlewares/clientAuthMiddleware';
|
|
6
|
-
|
|
7
|
-
const validateParams = params => {
|
|
8
|
-
const validFields = [
|
|
9
|
-
{ key: 'clientKey', type: 'string', required: true },
|
|
10
|
-
{ key: 'client', type: 'object', required: true },
|
|
11
|
-
];
|
|
12
|
-
|
|
13
|
-
try {
|
|
14
|
-
return validateFields(params, validFields);
|
|
15
|
-
} catch (error) {
|
|
16
|
-
throw new LesgoException(error.message, `${FILE}::INVALID_AUTH_DATA`, 403, {
|
|
17
|
-
error,
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const getClientKey = event => {
|
|
23
|
-
const foundExistingKey = client.headerKeys.find(headerKey => {
|
|
24
|
-
if (event.headers && typeof event.headers[headerKey] === 'string') {
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (
|
|
29
|
-
event.queryStringParameters &&
|
|
30
|
-
typeof event.queryStringParameters[headerKey] === 'string'
|
|
31
|
-
) {
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return false;
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
if (foundExistingKey) {
|
|
39
|
-
if (event.headers && event.headers[foundExistingKey]) {
|
|
40
|
-
return event.headers[foundExistingKey];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// There will always be one where this is found existing
|
|
44
|
-
return event.queryStringParameters[foundExistingKey];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (event.input && typeof event.input.clientid === 'string') {
|
|
48
|
-
return event.input.clientid;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return undefined;
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export const clientAuthMiddlewareBeforeHandler = async (
|
|
55
|
-
handler,
|
|
56
|
-
next,
|
|
57
|
-
opt = {}
|
|
58
|
-
) => {
|
|
59
|
-
const { clients, callback } = {
|
|
60
|
-
...client,
|
|
61
|
-
...(typeof opt === 'function' ? { callback: opt } : opt),
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
const { client: validatedClient, clientKey } = validateParams({
|
|
65
|
-
clientKey: getClientKey(handler.event),
|
|
66
|
-
client: clients,
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
const platform = Object.keys(validatedClient).filter(clientPlatform => {
|
|
70
|
-
return validatedClient[clientPlatform].key === clientKey;
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
if (platform.length === 0) {
|
|
74
|
-
throw new LesgoException(
|
|
75
|
-
'Invalid ClientId provided',
|
|
76
|
-
`${FILE}::INVALID_CLIENT_ID`,
|
|
77
|
-
403,
|
|
78
|
-
'Ensure you are using the correct Client Id provided'
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// eslint-disable-next-line no-param-reassign,prefer-destructuring
|
|
83
|
-
handler.event.platform = {
|
|
84
|
-
id: platform[0],
|
|
85
|
-
...client.clients[platform[0]],
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
if (typeof callback === 'function') {
|
|
89
|
-
await callback(handler);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
next();
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
/* istanbul ignore next */
|
|
96
|
-
const clientAuthMiddleware = opt => {
|
|
97
|
-
return {
|
|
98
|
-
before: (handler, next) =>
|
|
99
|
-
clientAuthMiddlewareBeforeHandler(handler, next, opt),
|
|
100
|
-
};
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
export default clientAuthMiddleware;
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import logger from '../utils/logger';
|
|
2
|
-
import isEmpty from '../utils/isEmpty';
|
|
3
|
-
|
|
4
|
-
const FILE = 'Lesgo/middlewares/errorHttpResponseMiddleware';
|
|
5
|
-
|
|
6
|
-
export const errorHttpResponseHandler = async opts => {
|
|
7
|
-
const defaults = {
|
|
8
|
-
response: '',
|
|
9
|
-
statusCode: 500,
|
|
10
|
-
event: {},
|
|
11
|
-
debugMode: false,
|
|
12
|
-
headers: {
|
|
13
|
-
'Access-Control-Allow-Origin': '*',
|
|
14
|
-
'Cache-Control': 'no-cache',
|
|
15
|
-
'Content-Type': 'application/json',
|
|
16
|
-
},
|
|
17
|
-
error: '',
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const optionsHeadersMerged =
|
|
21
|
-
opts === undefined
|
|
22
|
-
? { ...defaults.headers }
|
|
23
|
-
: {
|
|
24
|
-
...opts,
|
|
25
|
-
headers: { ...defaults.headers, ...opts.headers },
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
const options = { ...defaults, ...optionsHeadersMerged };
|
|
29
|
-
|
|
30
|
-
const jsonBody = {
|
|
31
|
-
status: 'error',
|
|
32
|
-
data: null,
|
|
33
|
-
error: {
|
|
34
|
-
code: options.error.code || 'UNHANDLED_ERROR',
|
|
35
|
-
message: options.error.name
|
|
36
|
-
? `${options.error.name}: ${options.error.message}`
|
|
37
|
-
: options.error.message || options.error,
|
|
38
|
-
details: options.error.extra || '',
|
|
39
|
-
},
|
|
40
|
-
_meta: options.debugMode ? options.event : {},
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const statusCode = options.error.statusCode || options.statusCode;
|
|
44
|
-
|
|
45
|
-
if (!isEmpty(options.error)) {
|
|
46
|
-
logger.log(statusCode === 500 ? 'error' : 'warn', options.error);
|
|
47
|
-
} else {
|
|
48
|
-
logger.log(statusCode === 500 ? 'error' : 'warn', jsonBody.error.message, {
|
|
49
|
-
error: jsonBody.error,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
try {
|
|
54
|
-
const disconnect = [];
|
|
55
|
-
if (!isEmpty(opts.cache)) disconnect.push(opts.cache.end());
|
|
56
|
-
if (!isEmpty(opts.db)) disconnect.push(opts.db.end());
|
|
57
|
-
if (!isEmpty(opts.dbRead)) disconnect.push(opts.dbRead.end());
|
|
58
|
-
|
|
59
|
-
if (disconnect.length > 0) {
|
|
60
|
-
await Promise.all(disconnect);
|
|
61
|
-
}
|
|
62
|
-
} catch (err) {
|
|
63
|
-
logger.error(`${FILE}::Failed to end connection`, err);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return {
|
|
67
|
-
headers: options.headers,
|
|
68
|
-
statusCode,
|
|
69
|
-
body: options.formatError
|
|
70
|
-
? options.formatError(options)
|
|
71
|
-
: JSON.stringify(jsonBody),
|
|
72
|
-
};
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export const errorHttpResponseAfterHandler = async (handler, next, opts) => {
|
|
76
|
-
const defaults = {
|
|
77
|
-
error: handler.error,
|
|
78
|
-
event: handler.event,
|
|
79
|
-
logger: console.error, // eslint-disable-line no-console
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
const options = { ...defaults, ...opts };
|
|
83
|
-
|
|
84
|
-
// eslint-disable-next-line no-param-reassign
|
|
85
|
-
handler.response = await errorHttpResponseHandler(options);
|
|
86
|
-
/* istanbul ignore next */
|
|
87
|
-
next();
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Formats response for error responses
|
|
92
|
-
*/
|
|
93
|
-
/* istanbul ignore next */
|
|
94
|
-
const errorHttpResponseMiddleware = opts => {
|
|
95
|
-
return {
|
|
96
|
-
onError: (handler, next) =>
|
|
97
|
-
errorHttpResponseAfterHandler(handler, next, opts),
|
|
98
|
-
};
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
export default errorHttpResponseMiddleware;
|