lesgo 1.0.0 → 2.1.1

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.
Files changed (315) hide show
  1. package/README.md +5 -4
  2. package/bin/lesgo-scripts.sh +4 -4
  3. package/dist/config/app.d.ts +7 -0
  4. package/dist/config/app.js +9 -0
  5. package/dist/config/aws.d.ts +5 -0
  6. package/dist/config/aws.js +4 -0
  7. package/dist/config/basicAuth.d.ts +7 -0
  8. package/dist/config/basicAuth.js +8 -0
  9. package/dist/config/crypto.d.ts +10 -0
  10. package/dist/config/crypto.js +9 -0
  11. package/dist/config/dynamodb.d.ts +8 -0
  12. package/dist/config/dynamodb.js +14 -0
  13. package/dist/config/elasticache.d.ts +7 -0
  14. package/dist/config/elasticache.js +6 -0
  15. package/dist/config/index.d.ts +11 -0
  16. package/dist/config/index.js +11 -0
  17. package/dist/config/jwt.d.ts +12 -0
  18. package/dist/config/jwt.js +16 -0
  19. package/dist/config/rds.d.ts +12 -0
  20. package/dist/config/rds.js +13 -0
  21. package/dist/config/s3.d.ts +5 -0
  22. package/dist/config/s3.js +5 -0
  23. package/dist/config/secretsManager.d.ts +4 -0
  24. package/dist/config/secretsManager.js +4 -0
  25. package/dist/config/sqs.d.ts +9 -0
  26. package/dist/config/sqs.js +18 -0
  27. package/dist/exceptions/LesgoException.d.ts +6 -0
  28. package/{src → dist}/exceptions/LesgoException.js +5 -4
  29. package/dist/exceptions/index.d.ts +1 -0
  30. package/dist/exceptions/index.js +1 -0
  31. package/dist/middlewares/disconnectMiddleware.d.ts +8 -0
  32. package/dist/middlewares/disconnectMiddleware.js +78 -0
  33. package/dist/middlewares/httpMiddleware.d.ts +12 -0
  34. package/dist/middlewares/httpMiddleware.js +74 -0
  35. package/dist/middlewares/httpResponseMiddleware.d.ts +7 -0
  36. package/dist/middlewares/httpResponseMiddleware.js +128 -0
  37. package/dist/middlewares/index.d.ts +7 -0
  38. package/dist/middlewares/index.js +7 -0
  39. package/dist/middlewares/invokeCommandMiddleware.d.ts +12 -0
  40. package/dist/middlewares/invokeCommandMiddleware.js +70 -0
  41. package/dist/middlewares/sqsMiddleware.d.ts +10 -0
  42. package/dist/middlewares/sqsMiddleware.js +70 -0
  43. package/dist/middlewares/verifyBasicAuthMiddleware.d.ts +8 -0
  44. package/dist/middlewares/verifyBasicAuthMiddleware.js +59 -0
  45. package/dist/middlewares/verifyJwtMiddleware.d.ts +6 -0
  46. package/dist/middlewares/verifyJwtMiddleware.js +37 -0
  47. package/dist/services/DynamoDbService/deleteRecord.d.ts +8 -0
  48. package/dist/services/DynamoDbService/deleteRecord.js +69 -0
  49. package/dist/services/DynamoDbService/getClient.d.ts +7 -0
  50. package/dist/services/DynamoDbService/getClient.js +30 -0
  51. package/dist/services/DynamoDbService/getTableName.d.ts +2 -0
  52. package/dist/services/DynamoDbService/getTableName.js +15 -0
  53. package/dist/services/DynamoDbService/index.d.ts +6 -0
  54. package/dist/services/DynamoDbService/index.js +6 -0
  55. package/dist/services/DynamoDbService/putRecord.d.ts +8 -0
  56. package/dist/services/DynamoDbService/putRecord.js +64 -0
  57. package/dist/services/DynamoDbService/query.d.ts +7 -0
  58. package/dist/services/DynamoDbService/query.js +78 -0
  59. package/dist/services/DynamoDbService/scan.d.ts +7 -0
  60. package/dist/services/DynamoDbService/scan.js +60 -0
  61. package/dist/services/DynamoDbService/updateRecord.d.ts +9 -0
  62. package/dist/services/DynamoDbService/updateRecord.js +89 -0
  63. package/dist/services/ElastiCacheRedisService/deleteRedisCache.d.ts +3 -0
  64. package/dist/services/ElastiCacheRedisService/deleteRedisCache.js +62 -0
  65. package/dist/services/ElastiCacheRedisService/disconnectElastiCacheRedisClient.d.ts +11 -0
  66. package/dist/services/ElastiCacheRedisService/disconnectElastiCacheRedisClient.js +69 -0
  67. package/dist/services/ElastiCacheRedisService/getElastiCacheRedisClient.d.ts +12 -0
  68. package/dist/services/ElastiCacheRedisService/getElastiCacheRedisClient.js +114 -0
  69. package/dist/services/ElastiCacheRedisService/getRedisCache.d.ts +3 -0
  70. package/dist/services/ElastiCacheRedisService/getRedisCache.js +70 -0
  71. package/dist/services/ElastiCacheRedisService/index.d.ts +5 -0
  72. package/dist/services/ElastiCacheRedisService/index.js +5 -0
  73. package/dist/services/ElastiCacheRedisService/setRedisCache.d.ts +6 -0
  74. package/dist/services/ElastiCacheRedisService/setRedisCache.js +77 -0
  75. package/dist/services/JWTService/decodeJwt.d.ts +7 -0
  76. package/dist/services/JWTService/decodeJwt.js +9 -0
  77. package/dist/services/JWTService/getJwtSecret.d.ts +13 -0
  78. package/dist/services/JWTService/getJwtSecret.js +54 -0
  79. package/dist/services/JWTService/index.d.ts +2 -0
  80. package/dist/services/JWTService/index.js +2 -0
  81. package/dist/services/JWTService/sign.d.ts +3 -0
  82. package/dist/services/JWTService/sign.js +31 -0
  83. package/dist/services/JWTService/verify.d.ts +7 -0
  84. package/dist/services/JWTService/verify.js +61 -0
  85. package/dist/services/LoggerService.d.ts +46 -0
  86. package/{src → dist}/services/LoggerService.js +29 -60
  87. package/dist/services/RDSAuroraMySQLProxyService/disconnectMySQLProxyClient.d.ts +2 -0
  88. package/dist/services/RDSAuroraMySQLProxyService/disconnectMySQLProxyClient.js +60 -0
  89. package/dist/services/RDSAuroraMySQLProxyService/getMySQLProxyClient.d.ts +8 -0
  90. package/dist/services/RDSAuroraMySQLProxyService/getMySQLProxyClient.js +87 -0
  91. package/dist/services/RDSAuroraMySQLProxyService/index.d.ts +3 -0
  92. package/dist/services/RDSAuroraMySQLProxyService/index.js +3 -0
  93. package/dist/services/RDSAuroraMySQLProxyService/query.d.ts +4 -0
  94. package/dist/services/RDSAuroraMySQLProxyService/query.js +63 -0
  95. package/dist/services/S3Service/getClient.d.ts +4 -0
  96. package/dist/services/S3Service/getClient.js +28 -0
  97. package/dist/services/S3Service/getDownloadSignedUrl.d.ts +7 -0
  98. package/dist/services/S3Service/getDownloadSignedUrl.js +58 -0
  99. package/dist/services/S3Service/getHeadObject.d.ts +13 -0
  100. package/dist/services/S3Service/getHeadObject.js +83 -0
  101. package/dist/services/S3Service/getObject.d.ts +10 -0
  102. package/dist/services/S3Service/getObject.js +89 -0
  103. package/dist/services/S3Service/getUploadSignedUrl.d.ts +7 -0
  104. package/dist/services/S3Service/getUploadSignedUrl.js +61 -0
  105. package/dist/services/S3Service/index.d.ts +6 -0
  106. package/dist/services/S3Service/index.js +6 -0
  107. package/dist/services/S3Service/putObject.d.ts +9 -0
  108. package/dist/services/S3Service/putObject.js +77 -0
  109. package/dist/services/SQSService/deleteMessage.d.ts +9 -0
  110. package/dist/services/SQSService/deleteMessage.js +69 -0
  111. package/dist/services/SQSService/dispatch.d.ts +9 -0
  112. package/dist/services/SQSService/dispatch.js +71 -0
  113. package/dist/services/SQSService/getClient.d.ts +4 -0
  114. package/dist/services/SQSService/getClient.js +28 -0
  115. package/dist/services/SQSService/getQueueUrl.d.ts +7 -0
  116. package/dist/services/SQSService/getQueueUrl.js +25 -0
  117. package/dist/services/SQSService/index.d.ts +4 -0
  118. package/dist/services/SQSService/index.js +4 -0
  119. package/dist/services/SQSService/receiveMessages.d.ts +8 -0
  120. package/dist/services/SQSService/receiveMessages.js +65 -0
  121. package/dist/services/SecretsManagerService/getClient.d.ts +7 -0
  122. package/dist/services/SecretsManagerService/getClient.js +28 -0
  123. package/dist/services/SecretsManagerService/getSecretValue.d.ts +7 -0
  124. package/dist/services/SecretsManagerService/getSecretValue.js +65 -0
  125. package/dist/services/SecretsManagerService/index.d.ts +2 -0
  126. package/dist/services/SecretsManagerService/index.js +2 -0
  127. package/dist/services/index.d.ts +1 -0
  128. package/dist/services/index.js +1 -0
  129. package/dist/types/aws.d.ts +8 -0
  130. package/dist/types/aws.js +1 -0
  131. package/dist/utils/cache/redis/deleteCache.d.ts +19 -0
  132. package/dist/utils/cache/redis/deleteCache.js +21 -0
  133. package/dist/utils/cache/redis/getCache.d.ts +22 -0
  134. package/dist/utils/cache/redis/getCache.js +24 -0
  135. package/dist/utils/cache/redis/getClient.d.ts +30 -0
  136. package/dist/utils/cache/redis/getClient.js +32 -0
  137. package/dist/utils/cache/redis/index.d.ts +4 -0
  138. package/dist/utils/cache/redis/index.js +4 -0
  139. package/dist/utils/cache/redis/setCache.d.ts +25 -0
  140. package/dist/utils/cache/redis/setCache.js +26 -0
  141. package/dist/utils/crypto/decrypt.d.ts +33 -0
  142. package/dist/utils/crypto/decrypt.js +59 -0
  143. package/dist/utils/crypto/encrypt.d.ts +31 -0
  144. package/dist/utils/crypto/encrypt.js +41 -0
  145. package/dist/utils/crypto/hash.d.ts +31 -0
  146. package/dist/utils/crypto/hash.js +56 -0
  147. package/dist/utils/crypto/index.d.ts +3 -0
  148. package/dist/utils/crypto/index.js +3 -0
  149. package/dist/utils/crypto/validateEncryptionFields.d.ts +19 -0
  150. package/dist/utils/crypto/validateEncryptionFields.js +71 -0
  151. package/dist/utils/db/mysql/proxy/disconnect.d.ts +2 -0
  152. package/dist/utils/db/mysql/proxy/disconnect.js +5 -0
  153. package/dist/utils/db/mysql/proxy/disconnectDb.d.ts +2 -0
  154. package/dist/utils/db/mysql/proxy/disconnectDb.js +5 -0
  155. package/dist/utils/db/mysql/proxy/getClient.d.ts +4 -0
  156. package/dist/utils/db/mysql/proxy/getClient.js +5 -0
  157. package/dist/utils/db/mysql/proxy/index.d.ts +3 -0
  158. package/dist/utils/db/mysql/proxy/index.js +3 -0
  159. package/dist/utils/db/mysql/proxy/query.d.ts +4 -0
  160. package/dist/utils/db/mysql/proxy/query.js +45 -0
  161. package/dist/utils/dynamodb/deleteRecord.d.ts +5 -0
  162. package/dist/utils/dynamodb/deleteRecord.js +39 -0
  163. package/dist/utils/dynamodb/getClient.d.ts +3 -0
  164. package/dist/utils/dynamodb/getClient.js +5 -0
  165. package/dist/utils/dynamodb/index.d.ts +6 -0
  166. package/dist/utils/dynamodb/index.js +6 -0
  167. package/dist/utils/dynamodb/putRecord.d.ts +4 -0
  168. package/dist/utils/dynamodb/putRecord.js +39 -0
  169. package/dist/utils/dynamodb/query.d.ts +5 -0
  170. package/dist/utils/dynamodb/query.js +52 -0
  171. package/dist/utils/dynamodb/scan.d.ts +4 -0
  172. package/dist/utils/dynamodb/scan.js +40 -0
  173. package/dist/utils/dynamodb/updateRecord.d.ts +5 -0
  174. package/dist/utils/dynamodb/updateRecord.js +53 -0
  175. package/dist/utils/formatUnixTimestamp.d.ts +8 -0
  176. package/dist/utils/formatUnixTimestamp.js +17 -0
  177. package/dist/utils/generateUid.d.ts +13 -0
  178. package/{src → dist}/utils/generateUid.js +9 -4
  179. package/dist/utils/getCurrentDatetime.d.ts +2 -0
  180. package/dist/utils/getCurrentDatetime.js +4 -0
  181. package/dist/utils/getCurrentTimestamp.d.ts +7 -0
  182. package/dist/utils/getCurrentTimestamp.js +9 -0
  183. package/dist/utils/getJwtSubFromAuthHeader.d.ts +9 -0
  184. package/dist/utils/getJwtSubFromAuthHeader.js +24 -0
  185. package/dist/utils/index.d.ts +9 -0
  186. package/dist/utils/index.js +9 -0
  187. package/dist/utils/isDecimal.d.ts +8 -0
  188. package/dist/utils/isDecimal.js +9 -0
  189. package/dist/utils/isEmail.d.ts +9 -0
  190. package/{src → dist}/utils/isEmail.js +9 -4
  191. package/dist/utils/isEmpty.d.ts +8 -0
  192. package/dist/utils/isEmpty.js +19 -0
  193. package/dist/utils/jwt/index.d.ts +2 -0
  194. package/dist/utils/jwt/index.js +2 -0
  195. package/dist/utils/jwt/sign.d.ts +3 -0
  196. package/dist/utils/jwt/sign.js +5 -0
  197. package/dist/utils/jwt/verify.d.ts +3 -0
  198. package/dist/utils/jwt/verify.js +12 -0
  199. package/dist/utils/logger.d.ts +20 -0
  200. package/dist/utils/logger.js +38 -0
  201. package/dist/utils/s3/getClient.d.ts +3 -0
  202. package/dist/utils/s3/getClient.js +5 -0
  203. package/dist/utils/s3/getDownloadSignedUrl.d.ts +5 -0
  204. package/dist/utils/s3/getDownloadSignedUrl.js +39 -0
  205. package/dist/utils/s3/getHeadObject.d.ts +10 -0
  206. package/dist/utils/s3/getHeadObject.js +39 -0
  207. package/dist/utils/s3/getObject.d.ts +13 -0
  208. package/dist/utils/s3/getObject.js +51 -0
  209. package/dist/utils/s3/getUploadSignedUrl.d.ts +5 -0
  210. package/dist/utils/s3/getUploadSignedUrl.js +39 -0
  211. package/dist/utils/s3/index.d.ts +6 -0
  212. package/dist/utils/s3/index.js +6 -0
  213. package/dist/utils/s3/putObject.d.ts +5 -0
  214. package/dist/utils/s3/putObject.js +39 -0
  215. package/dist/utils/secretsmanager/getClient.d.ts +3 -0
  216. package/dist/utils/secretsmanager/getClient.js +5 -0
  217. package/dist/utils/secretsmanager/getSecretValue.d.ts +4 -0
  218. package/dist/utils/secretsmanager/getSecretValue.js +68 -0
  219. package/dist/utils/secretsmanager/index.d.ts +2 -0
  220. package/dist/utils/secretsmanager/index.js +2 -0
  221. package/dist/utils/sqs/deleteMessage.d.ts +5 -0
  222. package/dist/utils/sqs/deleteMessage.js +39 -0
  223. package/dist/utils/sqs/dispatch.d.ts +5 -0
  224. package/dist/utils/sqs/dispatch.js +39 -0
  225. package/dist/utils/sqs/getClient.d.ts +3 -0
  226. package/dist/utils/sqs/getClient.js +5 -0
  227. package/dist/utils/sqs/index.d.ts +4 -0
  228. package/dist/utils/sqs/index.js +4 -0
  229. package/dist/utils/sqs/receiveMessages.d.ts +5 -0
  230. package/dist/utils/sqs/receiveMessages.js +39 -0
  231. package/dist/utils/validateFields.d.ts +22 -0
  232. package/{src → dist}/utils/validateFields.js +13 -19
  233. package/package.json +145 -34
  234. package/src/exceptions/__tests__/LesgoException.spec.js +0 -24
  235. package/src/exceptions/index.js +0 -4
  236. package/src/index.js +0 -4
  237. package/src/middlewares/__mocks__/ValidationErrorException.js +0 -18
  238. package/src/middlewares/__tests__/basicAuthMiddleware.spec.js +0 -264
  239. package/src/middlewares/__tests__/clientAuthMiddleware.spec.js +0 -235
  240. package/src/middlewares/__tests__/errorHttpResponseMiddleware.spec.js +0 -203
  241. package/src/middlewares/__tests__/gzipHttpResponse.spec.js +0 -185
  242. package/src/middlewares/__tests__/httpNoOutputMiddleware.spec.js +0 -201
  243. package/src/middlewares/__tests__/normalizeHttpRequestMiddleware.spec.js +0 -181
  244. package/src/middlewares/__tests__/normalizeSQSMessageMiddleware.spec.js +0 -120
  245. package/src/middlewares/__tests__/successHttpResponseMiddleware.spec.js +0 -172
  246. package/src/middlewares/__tests__/verifyJwtMiddleware.spec.js +0 -297
  247. package/src/middlewares/basicAuthMiddleware.js +0 -125
  248. package/src/middlewares/clientAuthMiddleware.js +0 -103
  249. package/src/middlewares/errorHttpResponseMiddleware.js +0 -101
  250. package/src/middlewares/gzipHttpResponse.js +0 -98
  251. package/src/middlewares/httpMiddleware.js +0 -19
  252. package/src/middlewares/httpNoOutputMiddleware.js +0 -91
  253. package/src/middlewares/index.js +0 -19
  254. package/src/middlewares/normalizeHttpRequestMiddleware.js +0 -101
  255. package/src/middlewares/normalizeSQSMessageMiddleware.js +0 -67
  256. package/src/middlewares/successHttpResponseMiddleware.js +0 -85
  257. package/src/middlewares/verifyJwtMiddleware.js +0 -73
  258. package/src/services/AuroraDbRDSProxyService.js +0 -182
  259. package/src/services/AuroraDbService.js +0 -111
  260. package/src/services/DynamoDbService.js +0 -177
  261. package/src/services/ElastiCacheService.js +0 -17
  262. package/src/services/ElasticsearchService.js +0 -181
  263. package/src/services/FirebaseAdminService.js +0 -108
  264. package/src/services/JwtService.js +0 -52
  265. package/src/services/S3Service.js +0 -59
  266. package/src/services/SQSService.js +0 -65
  267. package/src/services/__tests__/AuroraDbRDSProxyService.spec.js +0 -278
  268. package/src/services/__tests__/AuroraDbService.spec.js +0 -211
  269. package/src/services/__tests__/AwsElasticsearchConnection.spec.js +0 -89
  270. package/src/services/__tests__/DynamoDbService.spec.js +0 -314
  271. package/src/services/__tests__/ElasticsearchService.spec.js +0 -201
  272. package/src/services/__tests__/FirebaseAdminService.spec.js +0 -356
  273. package/src/services/__tests__/JwtService.spec.js +0 -35
  274. package/src/services/__tests__/LengthAwarePaginator.spec.js +0 -223
  275. package/src/services/__tests__/LoggerService.spec.js +0 -267
  276. package/src/services/__tests__/Paginator.spec.js +0 -383
  277. package/src/services/__tests__/S3Service.spec.js +0 -55
  278. package/src/services/__tests__/SQSService.spec.js +0 -47
  279. package/src/services/__tests__/SignedRequest.spec.js +0 -103
  280. package/src/services/aws/AwsElasticsearchConnection.js +0 -59
  281. package/src/services/aws/SignedRequest.js +0 -158
  282. package/src/services/index.js +0 -19
  283. package/src/services/pagination/LengthAwarePaginator.js +0 -49
  284. package/src/services/pagination/Paginator.js +0 -260
  285. package/src/utils/__mocks__/db.js +0 -109
  286. package/src/utils/__tests__/cache.spec.js +0 -131
  287. package/src/utils/__tests__/crypto.spec.js +0 -122
  288. package/src/utils/__tests__/db.spec.js +0 -70
  289. package/src/utils/__tests__/dynamodb.spec.js +0 -27
  290. package/src/utils/__tests__/elasticsearch.spec.js +0 -43
  291. package/src/utils/__tests__/generateUid.spec.js +0 -36
  292. package/src/utils/__tests__/getJwtSubFromAuthHeader.spec.js +0 -20
  293. package/src/utils/__tests__/isDecimal.spec.js +0 -12
  294. package/src/utils/__tests__/isEmail.spec.js +0 -28
  295. package/src/utils/__tests__/isEmpty.spec.js +0 -31
  296. package/src/utils/__tests__/logger.spec.js +0 -11
  297. package/src/utils/__tests__/objectStore.spec.js +0 -67
  298. package/src/utils/__tests__/prepSQLInsertParams.spec.js +0 -46
  299. package/src/utils/__tests__/prepSQLUpdateParams.spec.js +0 -36
  300. package/src/utils/__tests__/queue.spec.js +0 -54
  301. package/src/utils/__tests__/validateFields.spec.js +0 -374
  302. package/src/utils/cache.js +0 -215
  303. package/src/utils/crypto.js +0 -77
  304. package/src/utils/db.js +0 -17
  305. package/src/utils/dynamodb.js +0 -6
  306. package/src/utils/elasticsearch.js +0 -20
  307. package/src/utils/getJwtSubFromAuthHeader.js +0 -18
  308. package/src/utils/index.js +0 -26
  309. package/src/utils/isDecimal.js +0 -2
  310. package/src/utils/isEmpty.js +0 -6
  311. package/src/utils/logger.js +0 -25
  312. package/src/utils/objectStore.js +0 -11
  313. package/src/utils/prepSQLInsertParams.js +0 -21
  314. package/src/utils/prepSQLUpdateParams.js +0 -25
  315. 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;