git-off

git off handles large files in git repos
git clone https://noulin.net/git/git-off.git
Log | Files | Refs | README

sqs.js (3835B)


      1 var AWS = require('../core');
      2 
      3 AWS.util.update(AWS.SQS.prototype, {
      4   /**
      5    * @api private
      6    */
      7   setupRequestListeners: function setupRequestListeners(request) {
      8     request.addListener('build', this.buildEndpoint);
      9 
     10     if (request.service.config.computeChecksums) {
     11       if (request.operation === 'sendMessage') {
     12         request.addListener('extractData', this.verifySendMessageChecksum);
     13       } else if (request.operation === 'sendMessageBatch') {
     14         request.addListener('extractData', this.verifySendMessageBatchChecksum);
     15       } else if (request.operation === 'receiveMessage') {
     16         request.addListener('extractData', this.verifyReceiveMessageChecksum);
     17       }
     18     }
     19   },
     20 
     21   /**
     22    * @api private
     23    */
     24   verifySendMessageChecksum: function verifySendMessageChecksum(response) {
     25     if (!response.data) return;
     26 
     27     var md5 = response.data.MD5OfMessageBody;
     28     var body = this.params.MessageBody;
     29     var calculatedMd5 = this.service.calculateChecksum(body);
     30     if (calculatedMd5 !== md5) {
     31       var msg = 'Got "' + response.data.MD5OfMessageBody +
     32         '", expecting "' + calculatedMd5 + '".';
     33       this.service.throwInvalidChecksumError(response,
     34         [response.data.MessageId], msg);
     35     }
     36   },
     37 
     38   /**
     39    * @api private
     40    */
     41   verifySendMessageBatchChecksum: function verifySendMessageBatchChecksum(response) {
     42     if (!response.data) return;
     43 
     44     var service = this.service;
     45     var entries = {};
     46     var errors = [];
     47     var messageIds = [];
     48     AWS.util.arrayEach(response.data.Successful, function (entry) {
     49       entries[entry.Id] = entry;
     50     });
     51     AWS.util.arrayEach(this.params.Entries, function (entry) {
     52       if (entries[entry.Id]) {
     53         var md5 = entries[entry.Id].MD5OfMessageBody;
     54         var body = entry.MessageBody;
     55         if (!service.isChecksumValid(md5, body)) {
     56           errors.push(entry.Id);
     57           messageIds.push(entries[entry.Id].MessageId);
     58         }
     59       }
     60     });
     61 
     62     if (errors.length > 0) {
     63       service.throwInvalidChecksumError(response, messageIds,
     64         'Invalid messages: ' + errors.join(', '));
     65     }
     66   },
     67 
     68   /**
     69    * @api private
     70    */
     71   verifyReceiveMessageChecksum: function verifyReceiveMessageChecksum(response) {
     72     if (!response.data) return;
     73 
     74     var service = this.service;
     75     var messageIds = [];
     76     AWS.util.arrayEach(response.data.Messages, function(message) {
     77       var md5 = message.MD5OfBody;
     78       var body = message.Body;
     79       if (!service.isChecksumValid(md5, body)) {
     80         messageIds.push(message.MessageId);
     81       }
     82     });
     83 
     84     if (messageIds.length > 0) {
     85       service.throwInvalidChecksumError(response, messageIds,
     86         'Invalid messages: ' + messageIds.join(', '));
     87     }
     88   },
     89 
     90   /**
     91    * @api private
     92    */
     93   throwInvalidChecksumError: function throwInvalidChecksumError(response, ids, message) {
     94     response.error = AWS.util.error(new Error(), {
     95       retryable: true,
     96       code: 'InvalidChecksum',
     97       messageIds: ids,
     98       message: response.request.operation +
     99                ' returned an invalid MD5 response. ' + message
    100     });
    101   },
    102 
    103   /**
    104    * @api private
    105    */
    106   isChecksumValid: function isChecksumValid(checksum, data) {
    107     return this.calculateChecksum(data) === checksum;
    108   },
    109 
    110   /**
    111    * @api private
    112    */
    113   calculateChecksum: function calculateChecksum(data) {
    114     return AWS.util.crypto.md5(data, 'hex');
    115   },
    116 
    117   /**
    118    * @api private
    119    */
    120   buildEndpoint: function buildEndpoint(request) {
    121     var url = request.httpRequest.params.QueueUrl;
    122     if (url) {
    123       request.httpRequest.endpoint = new AWS.Endpoint(url);
    124 
    125       // signature version 4 requires the region name to be set,
    126       // sqs queue urls contain the region name
    127       var matches = request.httpRequest.endpoint.host.match(/^sqs\.(.+?)\./);
    128       if (matches) request.httpRequest.region = matches[1];
    129     }
    130   }
    131 });