v2.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. var AWS = require('../core');
  2. var inherit = AWS.util.inherit;
  3. /**
  4. * @api private
  5. */
  6. AWS.Signers.V2 = inherit(AWS.Signers.RequestSigner, {
  7. addAuthorization: function addAuthorization(credentials, date) {
  8. if (!date) date = AWS.util.date.getDate();
  9. var r = this.request;
  10. r.params.Timestamp = AWS.util.date.iso8601(date);
  11. r.params.SignatureVersion = '2';
  12. r.params.SignatureMethod = 'HmacSHA256';
  13. r.params.AWSAccessKeyId = credentials.accessKeyId;
  14. if (credentials.sessionToken) {
  15. r.params.SecurityToken = credentials.sessionToken;
  16. }
  17. delete r.params.Signature; // delete old Signature for re-signing
  18. r.params.Signature = this.signature(credentials);
  19. r.body = AWS.util.queryParamsToString(r.params);
  20. r.headers['Content-Length'] = r.body.length;
  21. },
  22. signature: function signature(credentials) {
  23. return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');
  24. },
  25. stringToSign: function stringToSign() {
  26. var parts = [];
  27. parts.push(this.request.method);
  28. parts.push(this.request.endpoint.host.toLowerCase());
  29. parts.push(this.request.pathname());
  30. parts.push(AWS.util.queryParamsToString(this.request.params));
  31. return parts.join('\n');
  32. }
  33. });
  34. /**
  35. * @api private
  36. */
  37. module.exports = AWS.Signers.V2;