Backend half
This commit is contained in:
+77
@@ -0,0 +1,77 @@
|
||||
var AWS = require('../core');
|
||||
var inherit = AWS.util.inherit;
|
||||
|
||||
/**
|
||||
* @api private
|
||||
*/
|
||||
AWS.Signers.V3 = inherit(AWS.Signers.RequestSigner, {
|
||||
addAuthorization: function addAuthorization(credentials, date) {
|
||||
|
||||
var datetime = AWS.util.date.rfc822(date);
|
||||
|
||||
this.request.headers['X-Amz-Date'] = datetime;
|
||||
|
||||
if (credentials.sessionToken) {
|
||||
this.request.headers['x-amz-security-token'] = credentials.sessionToken;
|
||||
}
|
||||
|
||||
this.request.headers['X-Amzn-Authorization'] =
|
||||
this.authorization(credentials, datetime);
|
||||
|
||||
},
|
||||
|
||||
authorization: function authorization(credentials) {
|
||||
return 'AWS3 ' +
|
||||
'AWSAccessKeyId=' + credentials.accessKeyId + ',' +
|
||||
'Algorithm=HmacSHA256,' +
|
||||
'SignedHeaders=' + this.signedHeaders() + ',' +
|
||||
'Signature=' + this.signature(credentials);
|
||||
},
|
||||
|
||||
signedHeaders: function signedHeaders() {
|
||||
var headers = [];
|
||||
AWS.util.arrayEach(this.headersToSign(), function iterator(h) {
|
||||
headers.push(h.toLowerCase());
|
||||
});
|
||||
return headers.sort().join(';');
|
||||
},
|
||||
|
||||
canonicalHeaders: function canonicalHeaders() {
|
||||
var headers = this.request.headers;
|
||||
var parts = [];
|
||||
AWS.util.arrayEach(this.headersToSign(), function iterator(h) {
|
||||
parts.push(h.toLowerCase().trim() + ':' + String(headers[h]).trim());
|
||||
});
|
||||
return parts.sort().join('\n') + '\n';
|
||||
},
|
||||
|
||||
headersToSign: function headersToSign() {
|
||||
var headers = [];
|
||||
AWS.util.each(this.request.headers, function iterator(k) {
|
||||
if (k === 'Host' || k === 'Content-Encoding' || k.match(/^X-Amz/i)) {
|
||||
headers.push(k);
|
||||
}
|
||||
});
|
||||
return headers;
|
||||
},
|
||||
|
||||
signature: function signature(credentials) {
|
||||
return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');
|
||||
},
|
||||
|
||||
stringToSign: function stringToSign() {
|
||||
var parts = [];
|
||||
parts.push(this.request.method);
|
||||
parts.push('/');
|
||||
parts.push('');
|
||||
parts.push(this.canonicalHeaders());
|
||||
parts.push(this.request.body);
|
||||
return AWS.util.crypto.sha256(parts.join('\n'));
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* @api private
|
||||
*/
|
||||
module.exports = AWS.Signers.V3;
|
||||
Reference in New Issue
Block a user