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,82 +0,0 @@
|
|
|
1
|
-
import client from 'Config/client'; // eslint-disable-line import/no-unresolved
|
|
2
|
-
import { errorHttpResponseAfterHandler } from './errorHttpResponseMiddleware';
|
|
3
|
-
import validateFields from '../utils/validateFields';
|
|
4
|
-
import { LesgoException } from '../exceptions';
|
|
5
|
-
|
|
6
|
-
const FILE = 'Middlewares/clientAuthMiddleware';
|
|
7
|
-
|
|
8
|
-
const validateParams = params => {
|
|
9
|
-
const validFields = [
|
|
10
|
-
{ key: 'x-client-id', type: 'string', required: true },
|
|
11
|
-
{ key: 'client', type: 'object', required: true },
|
|
12
|
-
];
|
|
13
|
-
|
|
14
|
-
try {
|
|
15
|
-
return validateFields(params, validFields);
|
|
16
|
-
} catch (error) {
|
|
17
|
-
throw new LesgoException(error.message, `${FILE}::INVALID_AUTH_DATA`, 403, {
|
|
18
|
-
error,
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
const getClientKey = event => {
|
|
24
|
-
if (typeof event.headers['x-client-id'] === 'string') {
|
|
25
|
-
return event.headers['x-client-id'];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (event.input && typeof event.input.clientid === 'string') {
|
|
29
|
-
return event.input.clientid;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return undefined;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
export const clientAuthMiddlewareBeforeHandler = (
|
|
36
|
-
handler,
|
|
37
|
-
next,
|
|
38
|
-
opt = undefined
|
|
39
|
-
) => {
|
|
40
|
-
const validated = validateParams({
|
|
41
|
-
'x-client-id': getClientKey(handler.event),
|
|
42
|
-
client,
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
const clientKey = validated['x-client-id'];
|
|
46
|
-
|
|
47
|
-
const platform = Object.keys(validated.client).filter(clientPlatform => {
|
|
48
|
-
return validated.client[clientPlatform].key === clientKey;
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
if (platform.length === 0) {
|
|
52
|
-
throw new LesgoException(
|
|
53
|
-
'Invalid ClientId provided',
|
|
54
|
-
`${FILE}::INVALID_CLIENT_ID`,
|
|
55
|
-
403,
|
|
56
|
-
'Ensure you are using the correct Client Id provided'
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// eslint-disable-next-line no-param-reassign,prefer-destructuring
|
|
61
|
-
handler.event.platform = platform[0];
|
|
62
|
-
|
|
63
|
-
if (typeof opt === 'function') {
|
|
64
|
-
opt(handler);
|
|
65
|
-
} else if (typeof opt === 'object') {
|
|
66
|
-
const { callback } = opt;
|
|
67
|
-
if (typeof callback === 'function') callback(handler);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
next();
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
/* istanbul ignore next */
|
|
74
|
-
const clientAuthMiddleware = opt => {
|
|
75
|
-
return {
|
|
76
|
-
before: (handler, next) =>
|
|
77
|
-
clientAuthMiddlewareBeforeHandler(handler, next, opt),
|
|
78
|
-
onError: (handler, next) => errorHttpResponseAfterHandler(handler, next),
|
|
79
|
-
};
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
export default clientAuthMiddleware;
|
|
@@ -1,99 +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: JSON.stringify(jsonBody),
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
export const errorHttpResponseAfterHandler = async (handler, next, opts) => {
|
|
74
|
-
const defaults = {
|
|
75
|
-
error: handler.error,
|
|
76
|
-
event: handler.event,
|
|
77
|
-
logger: console.error, // eslint-disable-line no-console
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
const options = { ...defaults, ...opts };
|
|
81
|
-
|
|
82
|
-
// eslint-disable-next-line no-param-reassign
|
|
83
|
-
handler.response = await errorHttpResponseHandler(options);
|
|
84
|
-
/* istanbul ignore next */
|
|
85
|
-
next();
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Formats response for error responses
|
|
90
|
-
*/
|
|
91
|
-
/* istanbul ignore next */
|
|
92
|
-
const errorHttpResponseMiddleware = opts => {
|
|
93
|
-
return {
|
|
94
|
-
onError: (handler, next) =>
|
|
95
|
-
errorHttpResponseAfterHandler(handler, next, opts),
|
|
96
|
-
};
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
export default errorHttpResponseMiddleware;
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import zlib from 'zlib';
|
|
2
|
-
import LesgoException from '../exceptions/LesgoException';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Perform zipping and add neccessary header
|
|
6
|
-
*/
|
|
7
|
-
export const gzip = async response => {
|
|
8
|
-
return new Promise((resolve, reject) => {
|
|
9
|
-
try {
|
|
10
|
-
zlib.gzip(response.body, (error, gzippedResponse) => {
|
|
11
|
-
if (error) {
|
|
12
|
-
reject(new LesgoException(error.message, 'GZIP_LIB_ERROR'));
|
|
13
|
-
} else {
|
|
14
|
-
response.body = gzippedResponse.toString('base64');
|
|
15
|
-
response.isBase64Encoded = true;
|
|
16
|
-
response.headers = {
|
|
17
|
-
...response.headers,
|
|
18
|
-
'Content-Encoding': 'gzip',
|
|
19
|
-
};
|
|
20
|
-
resolve(response);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
} catch (err) {
|
|
24
|
-
/* istanbul ignore next */
|
|
25
|
-
reject(new LesgoException(err.message, 'GZIP_UNKNOWN_ERROR', 500));
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Determine request origin
|
|
32
|
-
*/
|
|
33
|
-
export const determineRequestOrigin = handler => {
|
|
34
|
-
const { requestContext = {} } = handler.event;
|
|
35
|
-
let requestFrom = 'APIGATEWAY';
|
|
36
|
-
|
|
37
|
-
if (requestContext.elb) {
|
|
38
|
-
requestFrom = 'ELB';
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (requestContext.apiId) {
|
|
42
|
-
requestFrom = 'APIGATEWAY';
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return requestFrom;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Determine headers Accept-Encoding exist
|
|
50
|
-
*/
|
|
51
|
-
export const determineRequestAcceptEncoding = handler => {
|
|
52
|
-
const { headers } = handler.event;
|
|
53
|
-
|
|
54
|
-
let acceptEncoding =
|
|
55
|
-
headers['Accept-encoding'] ||
|
|
56
|
-
headers['accept-encoding'] ||
|
|
57
|
-
headers['Accept-Encoding'];
|
|
58
|
-
|
|
59
|
-
if (acceptEncoding) {
|
|
60
|
-
// normalise header
|
|
61
|
-
const re = / /g;
|
|
62
|
-
acceptEncoding = acceptEncoding
|
|
63
|
-
.replace(re, '')
|
|
64
|
-
.toLowerCase()
|
|
65
|
-
.split(',');
|
|
66
|
-
|
|
67
|
-
if (acceptEncoding.includes('gzip')) {
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return false;
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export const gzipHttpResponse = async (handler, options = {}) => {
|
|
76
|
-
/*
|
|
77
|
-
* By default we zip on ELB request only, but you also add APIGATEWAY
|
|
78
|
-
* Supported Request [ELB, APIGATEWAY]
|
|
79
|
-
*/
|
|
80
|
-
let zipWhenRequest = ['ELB'];
|
|
81
|
-
if (options.zipWhenRequest) {
|
|
82
|
-
zipWhenRequest = options.zipWhenRequest;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const requestFrom = determineRequestOrigin(handler);
|
|
86
|
-
|
|
87
|
-
if (
|
|
88
|
-
zipWhenRequest.includes(requestFrom) &&
|
|
89
|
-
determineRequestAcceptEncoding(handler)
|
|
90
|
-
) {
|
|
91
|
-
// eslint-disable-next-line no-param-reassign
|
|
92
|
-
handler.response = await gzip(handler.response);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return handler.response;
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
export default gzipHttpResponse;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { normalizeHttpRequestBeforeHandler } from './normalizeHttpRequestMiddleware';
|
|
2
|
-
import { successHttpResponseAfterHandler } from './successHttpResponseMiddleware';
|
|
3
|
-
import { errorHttpResponseAfterHandler } from './errorHttpResponseMiddleware';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Combines all http middlewares into a single middleware
|
|
7
|
-
*/
|
|
8
|
-
/* istanbul ignore next */
|
|
9
|
-
const httpMiddleware = opts => {
|
|
10
|
-
return {
|
|
11
|
-
before: (handler, next) => normalizeHttpRequestBeforeHandler(handler, next),
|
|
12
|
-
after: (handler, next) =>
|
|
13
|
-
successHttpResponseAfterHandler(handler, next, opts),
|
|
14
|
-
onError: (handler, next) =>
|
|
15
|
-
errorHttpResponseAfterHandler(handler, next, opts),
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export default httpMiddleware;
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import app from 'Config/app'; // eslint-disable-line import/no-unresolved
|
|
2
|
-
import { normalizeHttpRequestBeforeHandler } from './normalizeHttpRequestMiddleware';
|
|
3
|
-
import { successHttpResponseHandler } from './successHttpResponseMiddleware';
|
|
4
|
-
import { errorHttpResponseHandler } from './errorHttpResponseMiddleware';
|
|
5
|
-
|
|
6
|
-
const successHttpNoOutputResponseHandler = async opts => {
|
|
7
|
-
const { queryStringParameters } = opts.event;
|
|
8
|
-
const debug =
|
|
9
|
-
queryStringParameters && queryStringParameters.debug && app.debug;
|
|
10
|
-
const response = await successHttpResponseHandler(opts);
|
|
11
|
-
|
|
12
|
-
/* istanbul ignore next */
|
|
13
|
-
if (!debug && !opts.allowResponse(opts)) {
|
|
14
|
-
response.body = null;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
return response;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export const successHttpNoOutputResponseAfterHandler = async (
|
|
21
|
-
handler,
|
|
22
|
-
next,
|
|
23
|
-
opts
|
|
24
|
-
) => {
|
|
25
|
-
const defaults = {
|
|
26
|
-
response: handler.response,
|
|
27
|
-
event: handler.event,
|
|
28
|
-
allowResponse: () => false,
|
|
29
|
-
};
|
|
30
|
-
const options = { ...defaults, ...opts };
|
|
31
|
-
|
|
32
|
-
// eslint-disable-next-line no-param-reassign
|
|
33
|
-
handler.response = await successHttpNoOutputResponseHandler(options);
|
|
34
|
-
|
|
35
|
-
/* istanbul ignore next */
|
|
36
|
-
next();
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const errorHttpResponseNoOutputHandler = async opts => {
|
|
40
|
-
const { queryStringParameters } = opts.event;
|
|
41
|
-
const debug =
|
|
42
|
-
queryStringParameters && queryStringParameters.debug && app.debug;
|
|
43
|
-
const response = await errorHttpResponseHandler({
|
|
44
|
-
...opts,
|
|
45
|
-
debugMode: opts.debugMode || debug,
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
if (!debug && !opts.allowResponse(opts)) {
|
|
49
|
-
response.statusCode = 200;
|
|
50
|
-
response.body = null;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return response;
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
export const errorHttpNoOutputResponseAfterHandler = async (
|
|
57
|
-
handler,
|
|
58
|
-
next,
|
|
59
|
-
opts
|
|
60
|
-
) => {
|
|
61
|
-
const defaults = {
|
|
62
|
-
error: handler.error,
|
|
63
|
-
event: handler.event,
|
|
64
|
-
logger: console.error, // eslint-disable-line no-console
|
|
65
|
-
allowResponse: () => false,
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const options = { ...defaults, ...opts };
|
|
69
|
-
|
|
70
|
-
// eslint-disable-next-line no-param-reassign
|
|
71
|
-
handler.response = await errorHttpResponseNoOutputHandler(options);
|
|
72
|
-
/* istanbul ignore next */
|
|
73
|
-
next();
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
/* istanbul ignore next */
|
|
77
|
-
const httpNoOutputMiddleware = opts => {
|
|
78
|
-
return {
|
|
79
|
-
before: (handler, next) => normalizeHttpRequestBeforeHandler(handler, next),
|
|
80
|
-
after: (handler, next) =>
|
|
81
|
-
successHttpNoOutputResponseAfterHandler(handler, next, opts),
|
|
82
|
-
onError: (handler, next) =>
|
|
83
|
-
errorHttpNoOutputResponseAfterHandler(handler, next, opts),
|
|
84
|
-
};
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
export default httpNoOutputMiddleware;
|
package/src/middlewares/index.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import httpMiddleware from './httpMiddleware';
|
|
2
|
-
import normalizeHttpRequestMiddleware from './normalizeHttpRequestMiddleware';
|
|
3
|
-
import successHttpResponseMiddleware from './successHttpResponseMiddleware';
|
|
4
|
-
import errorHttpResponseMiddleware from './errorHttpResponseMiddleware';
|
|
5
|
-
import normalizeSQSMessageMiddleware from './normalizeSQSMessageMiddleware';
|
|
6
|
-
import verifyJwtMiddleware from './verifyJwtMiddleware';
|
|
7
|
-
|
|
8
|
-
export {
|
|
9
|
-
httpMiddleware,
|
|
10
|
-
normalizeHttpRequestMiddleware,
|
|
11
|
-
successHttpResponseMiddleware,
|
|
12
|
-
errorHttpResponseMiddleware,
|
|
13
|
-
normalizeSQSMessageMiddleware,
|
|
14
|
-
verifyJwtMiddleware,
|
|
15
|
-
};
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import app from 'Config/app'; // eslint-disable-line import/no-unresolved
|
|
2
|
-
import getJwtSubFromAuthHeader from '../utils/getJwtSubFromAuthHeader';
|
|
3
|
-
import logger from '../utils/logger';
|
|
4
|
-
|
|
5
|
-
export const normalizeRequest = opts => {
|
|
6
|
-
const { headers, body } = opts;
|
|
7
|
-
let { qs } = opts;
|
|
8
|
-
let input = null;
|
|
9
|
-
|
|
10
|
-
// to be consistent with api gateway, we convert empty object to null
|
|
11
|
-
if (JSON.stringify(qs) === '{}') qs = null;
|
|
12
|
-
|
|
13
|
-
if (!headers && qs === null) return input;
|
|
14
|
-
|
|
15
|
-
if (qs !== null) input = qs;
|
|
16
|
-
|
|
17
|
-
const contentType = headers['Content-Type'] || headers['content-type'];
|
|
18
|
-
|
|
19
|
-
if (!contentType) return input;
|
|
20
|
-
|
|
21
|
-
/* istanbul ignore else */
|
|
22
|
-
if (contentType.startsWith('application/json')) {
|
|
23
|
-
try {
|
|
24
|
-
input = { ...input, ...JSON.parse(body) };
|
|
25
|
-
} catch (err) {
|
|
26
|
-
throw new Error(
|
|
27
|
-
'Content type defined as JSON but an invalid JSON was provided'
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return input;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
export const normalizeHttpRequestBeforeHandler = (handler, next) => {
|
|
36
|
-
const options = {
|
|
37
|
-
headers: handler.event.headers,
|
|
38
|
-
qs: handler.event.queryStringParameters,
|
|
39
|
-
body: handler.event.body,
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
// eslint-disable-next-line no-param-reassign
|
|
43
|
-
handler.event.input = normalizeRequest(options);
|
|
44
|
-
|
|
45
|
-
const authHeader =
|
|
46
|
-
options.headers.Authorization || options.headers.authorization;
|
|
47
|
-
|
|
48
|
-
const auth = {};
|
|
49
|
-
if (authHeader) {
|
|
50
|
-
auth.sub = getJwtSubFromAuthHeader(authHeader);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// eslint-disable-next-line no-param-reassign
|
|
54
|
-
handler.event.auth = auth;
|
|
55
|
-
|
|
56
|
-
const tags = {};
|
|
57
|
-
switch (handler.event.version) {
|
|
58
|
-
case '2.0': {
|
|
59
|
-
if (handler.event.requestContext && handler.event.requestContext.http) {
|
|
60
|
-
tags.path = handler.event.requestContext.http.path;
|
|
61
|
-
tags.httpMethod = handler.event.requestContext.http.method;
|
|
62
|
-
}
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
default:
|
|
66
|
-
tags.path = handler.event.path;
|
|
67
|
-
tags.httpMethod = handler.event.httpMethod;
|
|
68
|
-
break;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
logger.addMeta({
|
|
72
|
-
requestId: handler.event.requestContext
|
|
73
|
-
? handler.event.requestContext.requestId
|
|
74
|
-
: null,
|
|
75
|
-
tags,
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
if (app.debug) {
|
|
79
|
-
logger.addMeta({
|
|
80
|
-
auth: handler.event.auth,
|
|
81
|
-
queryStringParameters: options.qs,
|
|
82
|
-
body: options.body,
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/* istanbul ignore next */
|
|
87
|
-
next();
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Normalizes handler.event.body and handler.event.queryStringParameters
|
|
92
|
-
* as handler.event.input Object
|
|
93
|
-
*/
|
|
94
|
-
/* istanbul ignore next */
|
|
95
|
-
const normalizeHttpRequestMiddleware = () => {
|
|
96
|
-
return {
|
|
97
|
-
before: (handler, next) => normalizeHttpRequestBeforeHandler(handler, next),
|
|
98
|
-
};
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
export default normalizeHttpRequestMiddleware;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import logger from '../utils/logger';
|
|
2
|
-
import isEmpty from '../utils/isEmpty';
|
|
3
|
-
|
|
4
|
-
const FILE = 'Lesgo/middlewares/normalizeSQSMessageMiddleware';
|
|
5
|
-
|
|
6
|
-
export const normalizeHandler = records => {
|
|
7
|
-
let recordCount = 0;
|
|
8
|
-
|
|
9
|
-
if (!records || records === null || Object.keys(records).length === 0) {
|
|
10
|
-
recordCount = null;
|
|
11
|
-
} else {
|
|
12
|
-
recordCount = Object.keys(records).length;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
logger.addMeta({ recordCount });
|
|
16
|
-
|
|
17
|
-
if (recordCount === null) return null;
|
|
18
|
-
|
|
19
|
-
return Object.values(records).map(record => ({
|
|
20
|
-
messageId: record.messageId,
|
|
21
|
-
receiptHandle: record.receiptHandle,
|
|
22
|
-
...JSON.parse(record.body),
|
|
23
|
-
}));
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export const disconnectConnections = async opts => {
|
|
27
|
-
try {
|
|
28
|
-
const disconnect = [];
|
|
29
|
-
if (opts) {
|
|
30
|
-
if (!isEmpty(opts.cache)) disconnect.push(opts.cache.end());
|
|
31
|
-
if (!isEmpty(opts.db)) disconnect.push(opts.db.end());
|
|
32
|
-
if (!isEmpty(opts.dbRead)) disconnect.push(opts.dbRead.end());
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (disconnect.length > 0) {
|
|
36
|
-
await Promise.all(disconnect);
|
|
37
|
-
}
|
|
38
|
-
} catch (err) {
|
|
39
|
-
logger.error(`${FILE}::Failed to end connection`, err);
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Normalizes handler.event.Records as handler.event.collections Object.
|
|
45
|
-
* This type of request is received by SQS listeners
|
|
46
|
-
*/
|
|
47
|
-
/* istanbul ignore next */
|
|
48
|
-
const normalizeSQSMessageMiddleware /* istanbul ignore next */ = opts => {
|
|
49
|
-
return {
|
|
50
|
-
before: (handler, next) => {
|
|
51
|
-
const { Records } = handler.event;
|
|
52
|
-
// eslint-disable-next-line no-param-reassign
|
|
53
|
-
handler.event.collection = normalizeHandler(Records);
|
|
54
|
-
next();
|
|
55
|
-
},
|
|
56
|
-
after: async (handler, next) => {
|
|
57
|
-
await disconnectConnections(opts);
|
|
58
|
-
next();
|
|
59
|
-
},
|
|
60
|
-
onError: async (handler, next) => {
|
|
61
|
-
await disconnectConnections(opts);
|
|
62
|
-
next();
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
export default normalizeSQSMessageMiddleware;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { verifyBasicAuthBeforeHandler } from './basicAuthMiddleware';
|
|
2
|
-
import { verifyJwtMiddlewareBeforeHandler } from './verifyJwtMiddleware';
|
|
3
|
-
import { errorHttpResponseAfterHandler } from './errorHttpResponseMiddleware';
|
|
4
|
-
|
|
5
|
-
export const serverAuthBeforeHandler = (handler, next, opts) => {
|
|
6
|
-
try {
|
|
7
|
-
return verifyBasicAuthBeforeHandler(handler, next, opts);
|
|
8
|
-
} catch (e) {
|
|
9
|
-
if (
|
|
10
|
-
e.code !==
|
|
11
|
-
`Middlewares/basicAuthMiddleware::AUTH_INVALID_AUTHORIZATION_TYPE` &&
|
|
12
|
-
e.code !==
|
|
13
|
-
`Middlewares/basicAuthMiddleware::AUTHORIZATION_HEADER_NOT_FOUND`
|
|
14
|
-
)
|
|
15
|
-
throw e;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return verifyJwtMiddlewareBeforeHandler(handler, next, opts);
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
/* istanbul ignore next */
|
|
22
|
-
const serverAuthMiddleware = opts => {
|
|
23
|
-
return {
|
|
24
|
-
before: (handler, next) => serverAuthBeforeHandler(handler, next, opts),
|
|
25
|
-
onError: (handler, next) => errorHttpResponseAfterHandler(handler, next),
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export default serverAuthMiddleware;
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import gzipHttpResponse from './gzipHttpResponse';
|
|
2
|
-
import isEmpty from '../utils/isEmpty';
|
|
3
|
-
import logger from '../utils/logger';
|
|
4
|
-
|
|
5
|
-
const FILE = 'Lesgo/middlewares/successHttpResponseMiddleware';
|
|
6
|
-
|
|
7
|
-
export const successHttpResponseHandler = async opts => {
|
|
8
|
-
const defaults = {
|
|
9
|
-
response: '',
|
|
10
|
-
statusCode: 200,
|
|
11
|
-
event: {},
|
|
12
|
-
debugMode: false,
|
|
13
|
-
headers: {
|
|
14
|
-
'Access-Control-Allow-Origin': '*',
|
|
15
|
-
'Cache-Control': 'no-cache',
|
|
16
|
-
'Content-Type': 'application/json',
|
|
17
|
-
},
|
|
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
|
-
try {
|
|
31
|
-
const disconnect = [];
|
|
32
|
-
if (!isEmpty(opts.cache)) disconnect.push(opts.cache.end());
|
|
33
|
-
if (!isEmpty(opts.db)) disconnect.push(opts.db.end());
|
|
34
|
-
if (!isEmpty(opts.dbRead)) disconnect.push(opts.dbRead.end());
|
|
35
|
-
|
|
36
|
-
if (disconnect.length > 0) {
|
|
37
|
-
await Promise.all(disconnect);
|
|
38
|
-
}
|
|
39
|
-
} catch (err) {
|
|
40
|
-
logger.error(`${FILE}::Failed to end connection`, err);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return {
|
|
44
|
-
headers: options.headers,
|
|
45
|
-
statusCode: options.statusCode,
|
|
46
|
-
body: JSON.stringify({
|
|
47
|
-
status: 'success',
|
|
48
|
-
data: options.response,
|
|
49
|
-
_meta: options.debugMode ? options.event : {},
|
|
50
|
-
}),
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export const successHttpResponseAfterHandler = async (handler, next, opts) => {
|
|
55
|
-
const defaults = {
|
|
56
|
-
response: handler.response,
|
|
57
|
-
event: handler.event,
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
const options = { ...defaults, ...opts };
|
|
61
|
-
|
|
62
|
-
// eslint-disable-next-line no-param-reassign
|
|
63
|
-
handler.response = await successHttpResponseHandler(options);
|
|
64
|
-
|
|
65
|
-
// eslint-disable-next-line no-param-reassign
|
|
66
|
-
handler.response = await gzipHttpResponse(handler, opts);
|
|
67
|
-
|
|
68
|
-
/* istanbul ignore next */
|
|
69
|
-
next();
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Formats response for successful responses
|
|
74
|
-
*/
|
|
75
|
-
/* istanbul ignore next */
|
|
76
|
-
const successHttpResponseMiddleware = opts => {
|
|
77
|
-
return {
|
|
78
|
-
after: (handler, next) =>
|
|
79
|
-
successHttpResponseAfterHandler(handler, next, opts),
|
|
80
|
-
};
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
export default successHttpResponseMiddleware;
|