rdsutil.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. var AWS = require('../core');
  2. var rdsutil = {
  3. /**
  4. * @api private
  5. */
  6. setupRequestListeners: function setupRequestListeners(service, request, crossRegionOperations) {
  7. if (crossRegionOperations.indexOf(request.operation) !== -1 &&
  8. request.params.SourceRegion) {
  9. request.params = AWS.util.copy(request.params);
  10. if (request.params.PreSignedUrl ||
  11. request.params.SourceRegion === service.config.region) {
  12. delete request.params.SourceRegion;
  13. } else {
  14. var doesParamValidation = !!service.config.paramValidation;
  15. // remove the validate parameters listener so we can re-add it after we build the URL
  16. if (doesParamValidation) {
  17. request.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);
  18. }
  19. request.onAsync('validate', rdsutil.buildCrossRegionPresignedUrl);
  20. if (doesParamValidation) {
  21. request.addListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);
  22. }
  23. }
  24. }
  25. },
  26. /**
  27. * @api private
  28. */
  29. buildCrossRegionPresignedUrl: function buildCrossRegionPresignedUrl(req, done) {
  30. var config = AWS.util.copy(req.service.config);
  31. config.region = req.params.SourceRegion;
  32. delete req.params.SourceRegion;
  33. delete config.endpoint;
  34. // relevant params for the operation will already be in req.params
  35. delete config.params;
  36. config.signatureVersion = 'v4';
  37. var destinationRegion = req.service.config.region;
  38. var svc = new req.service.constructor(config);
  39. var newReq = svc[req.operation](AWS.util.copy(req.params));
  40. newReq.on('build', function addDestinationRegionParam(request) {
  41. var httpRequest = request.httpRequest;
  42. httpRequest.params.DestinationRegion = destinationRegion;
  43. httpRequest.body = AWS.util.queryParamsToString(httpRequest.params);
  44. });
  45. newReq.presign(function(err, url) {
  46. if (err) done(err);
  47. else {
  48. req.params.PreSignedUrl = url;
  49. done();
  50. }
  51. });
  52. }
  53. };
  54. /**
  55. * @api private
  56. */
  57. module.exports = rdsutil;