Guest User

Untitled

a guest
Jan 21st, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. const aws4 = require("aws4");
  2.  
  3. const signCloudFrontOriginRequest = (request) => {
  4. const searchString = request.querystring === "" ? "" : `?${request.querystring}`;
  5.  
  6. // Utilize a dummy request because the structure of the CloudFront origin request
  7. // is different than the signing client expects
  8. const dummyRequest = {
  9. host: request.origin.custom.domainName,
  10. method: request.method,
  11. path: `${request.origin.custom.path}${request.uri}${searchString}`,
  12. };
  13.  
  14. if (Object.hasOwnProperty.call(request, 'body')) {
  15. const { data, encoding } = request.body;
  16. const buffer = Buffer.from(data, encoding);
  17. const decodedBody = buffer.toString('utf8');
  18.  
  19. if (decodedBody !== '') {
  20. dummyRequest.body = decodedBody;
  21. dummyRequest.headers = { 'content-type': request.headers['content-type'][0].value };
  22. }
  23. }
  24.  
  25. // Use the Lambda's execution role credentials
  26. const credentials = {
  27. accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  28. secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  29. sessionToken: process.env.AWS_SESSION_TOKEN
  30. };
  31.  
  32. aws4.sign(dummyRequest, credentials); // Signs the dummyRequest object
  33.  
  34. // Sign a clone of the CloudFront origin request with appropriate headers from the signed dummyRequest
  35. const signedRequest = JSON.parse(JSON.stringify(request));
  36. signedRequest.headers.authorization = [ { key: "Authorization", value: dummyRequest.headers.Authorization } ];
  37. signedRequest.headers["x-amz-date"] = [ { key: "X-Amz-Date", value: dummyRequest.headers["X-Amz-Date"] } ];
  38. signedRequest.headers["x-amz-security-token"] = [ { key: "X-Amz-Security-Token", value: dummyRequest.headers["X-Amz-Security-Token"] } ];
  39.  
  40. return signedRequest;
  41. };
  42.  
  43. const handler = (event, context, callback) => {
  44. const request = event.Records[0].cf.request;
  45. const signedRequest = signCloudFrontOriginRequest(request);
  46.  
  47. callback(null, signedRequest);
  48. };
  49.  
  50. module.exports.handler = handler;
Add Comment
Please, Sign In to add comment