Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
/.settings
/node_modules
*.komodoproject
.idea
26 changes: 18 additions & 8 deletions lib/aws.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
// we aren't unescaping URLs in the first place, therefore there's no URL decoding to break
/*global unescape*/
/*jslint regexp: true*/
/*jslint todo: true*/

// TODO: refactor

Expand Down Expand Up @@ -284,18 +285,27 @@ var client = function (config, httpOptions) {
query = {};
}
internals.checkConfig(config);
path = internals.checkPath(path, callback, query);

query = lodash.clone(query);
var additionalHeaders = {};
if (query.headers) {
additionalHeaders = query.headers;
delete query.headers;
}

path = internals.checkPath(path, callback, query);
if ( ! path) {
return;
}

internals.standardHeaders(config, 'GET', {}, path, function (err, headers) {
if (err) {
callback(err);
} else {
var options = lodash.clone(httpOptions);
options.method = 'GET';
options.path = path;
options.headers = headers;
options.headers = tools.merge(headers, additionalHeaders);
internals.makeRequest(config, options, false, handler, callback);
}
}
Expand Down Expand Up @@ -792,7 +802,7 @@ var client = function (config, httpOptions) {
* @param {Function} callback
*/
config.moveObject = function (source, destination, acl, headers, callback) {
config.copyObject(source, destination, acl, headers, function(error, response) {
config.copyObject(source, destination, acl, headers, function(error) {
if (error) {
callback(error);
} else {
Expand Down Expand Up @@ -822,7 +832,7 @@ var client = function (config, httpOptions) {
}
absSource = '/' + config.useBucket + absSource;

config.copyObject(absSource, destination, acl, headers, function (error, response) {
config.copyObject(absSource, destination, acl, headers, function (error) {
if (error) {
callback(error);
} else {
Expand Down Expand Up @@ -1140,7 +1150,7 @@ var client = function (config, httpOptions) {
errors[partNumber]++;
if (errors[partNumber] === 10) {
aborted = true;
config.abortUpload(path, uploadId, function (err, res) {
config.abortUpload(path, uploadId, function (err) {
if ( ! err) {
err = new Error('Part ' + partNumber + ' failed the upload 10 times. Aborting the multipart upload.');
err.partNumber = partNumber;
Expand Down Expand Up @@ -1209,10 +1219,10 @@ var client = function (config, httpOptions) {
xml += '<Quiet>true</Quiet>';
}

var idx;
var idx, object;
var count = objects.length;
for (idx = 0; idx < count; idx++) {
var object = objects[idx];
object = objects[idx];
if (typeof object.key === 'string') {
xml += '<Object><Key>' + object.key + '</Key>';

Expand Down Expand Up @@ -1267,7 +1277,7 @@ exports.load = function (service, accessKeyId, secretAccessKey, sessionToken, ht
console.error('Warning: aws2js under node.js v0.8.4 and below is deprecated. Only node.js v0.8.5+ will be supported.');
}

var clientTemplate = cfg.clients[service], key;
var clientTemplate = cfg.clients[service];
if ( ! clientTemplate) {
throw new Error('Invalid AWS client');
}
Expand Down
31 changes: 16 additions & 15 deletions lib/internals.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
'use strict';
/*jslint todo: true*/

/* the internally used modules */
var cfg = require('../config/aws.js');
Expand Down Expand Up @@ -138,7 +139,7 @@ exports.filterByteRange = filterByteRange;
*/
var makeRequest = function (config, options, body, handler, callback, requestId) {
var transfer = new EventEmitter();
var file, json, haveBodyHandler, bfile;
var file, json, haveBodyHandler, bfile, error;

if (requestId === undefined) {
requestId = 0;
Expand Down Expand Up @@ -294,7 +295,7 @@ var makeRequest = function (config, options, body, handler, callback, requestId)
makeRequest(config, options, body, handler, callback, requestId);
}, 500 * requestId);
} else {
var error = new Error('Redirect loop detected after 10 retries.');
error = new Error('Redirect loop detected after 10 retries.');
error.headers = response.headers;
error.code = response.statusCode;
callback(error);
Expand All @@ -311,11 +312,11 @@ var makeRequest = function (config, options, body, handler, callback, requestId)
aborted = true;
request.abort();

var err = new Error('Buffer too large. node.js limits the SlowBuffer implementation to 1073741823 bytes.');
err.headers = response.headers;
err.code = response.statusCode;
error = new Error('Buffer too large. node.js limits the SlowBuffer implementation to 1073741823 bytes.');
error.headers = response.headers;
error.code = response.statusCode;

callback(err);
callback(error);
}
};

Expand Down Expand Up @@ -377,11 +378,11 @@ var makeRequest = function (config, options, body, handler, callback, requestId)

case 'json':
try {
var json = JSON.parse(Buffer.concat(data).toString());
json = JSON.parse(Buffer.concat(data).toString());
if (response.statusCode === 200) {
callback(null, json);
} else {
var error = new Error('API error with HTTP Code: ' + response.statusCode);
error = new Error('API error with HTTP Code: ' + response.statusCode);
error.headers = response.headers;
error.code = response.statusCode;
error.document = json;
Expand Down Expand Up @@ -424,7 +425,7 @@ var makeRequest = function (config, options, body, handler, callback, requestId)
} else if (response.statusCode === 204) {
callback(null);
} else {
var error = new Error('The server prematurely closed the connection and there was no data.');
error = new Error('The server prematurely closed the connection and there was no data.');
error.headers = response.headers;
error.code = response.statusCode;
callback(error);
Expand Down Expand Up @@ -619,14 +620,14 @@ var authorize = function (config, method, headers, path, query) {

toSign += '\n';

var n, key, keys = [];
var n, key, keys = [], amzPrefix, type;
var sorted = {};

for (key in headers) {
if (headers.hasOwnProperty(key)) {
var amzPrefix = key.substr(0, 5);
amzPrefix = key.substr(0, 5);
if (amzPrefix === 'x-amz') {
var type = typeof headers[key];
type = typeof headers[key];
if (type === 'string' || type === 'number') {
keys.push(key);
} else {
Expand Down Expand Up @@ -691,12 +692,12 @@ var contentLength = function (file, config, method, headers, path, callback) {
* @returns {Object}
*/
var normalizeHeaders = function (headers) {
var name;
var name, lowName, val;

for (name in headers) {
if (headers.hasOwnProperty(name)) {
var lowName = name.toLowerCase();
var val = headers[name];
lowName = name.toLowerCase();
val = headers[name];
delete (headers[name]);
headers[lowName] = val;
}
Expand Down
1 change: 1 addition & 0 deletions lib/tools.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
'use strict';
/*jslint todo: true*/

/* core module */
var util = require('util');
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "aws2js",
"main": "./lib/aws.js",
"version": "0.8.3",
"version": "0.8.3vyclone",
"description": "AWS (Amazon Web Services) APIs client implementation for node.js",
"dependencies": {
"lodash": ">=0.6.x",
Expand Down
6 changes: 3 additions & 3 deletions tests/endpoints.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ var clients = {
sdb: config.clients.sdb.prefix
};

var client;
var client, prefix, cl;
for (client in clients) {
if (clients.hasOwnProperty(client)) {
var prefix = clients[client];
var cl = aws.load(client);
prefix = clients[client];
cl = aws.load(client);
assert.deepEqual(cl.getEndPoint(), prefix + suffix);
cl.setRegion('eu-west-1');
assert.deepEqual(cl.getEndPoint(), prefix + '.eu-west-1' + suffix);
Expand Down
8 changes: 4 additions & 4 deletions tests/s3-copy-object.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ var callbacks = {
s3.setCredentials(process.env.AWS_ACCEESS_KEY_ID, process.env.AWS_SECRET_ACCESS_KEY);
s3.setBucket(process.env.AWS2JS_S3_BUCKET);

s3.putFile(source, './data/foo.png', false, {}, function (err, res) {
s3.putFile(source, './data/foo.png', false, {}, function (err) {
callbacks.putFile++;
assert.ifError(err);

s3.copyObject(s3.getBucket() + '/' + source, destination, false, {}, function (err, res) {
s3.copyObject(s3.getBucket() + '/' + source, destination, false, {}, function (err) {
callbacks.copyObject++;
assert.ifError(err);

Expand All @@ -31,12 +31,12 @@ s3.putFile(source, './data/foo.png', false, {}, function (err, res) {
assert.ifError(err);
assert.deepEqual(res['content-type'], 'image/png');

s3.del(source, function (err, res) {
s3.del(source, function (err) {
callbacks.delSource++;
assert.ifError(err);
});

s3.del(destination, function (err, res) {
s3.del(destination, function (err) {
callbacks.delDestination++;
assert.ifError(err);
});
Expand Down
4 changes: 2 additions & 2 deletions tests/s3-del-multi-objects.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ var callbacks = {
s3.setCredentials(process.env.AWS_ACCEESS_KEY_ID, process.env.AWS_SECRET_ACCESS_KEY);
s3.setBucket(process.env.AWS2JS_S3_BUCKET);

s3.putFile(path1, './data/foo.png', false, {}, function (err, res) {
s3.putFile(path1, './data/foo.png', false, {}, function (err) {
callbacks.put1++;
assert.ifError(err);

Expand All @@ -27,7 +27,7 @@ s3.putFile(path1, './data/foo.png', false, {}, function (err, res) {
assert.ifError(err);
assert.deepEqual(res['content-type'], 'image/png');

s3.putFile(path2, './data/foo.png', false, {}, function (err, res) {
s3.putFile(path2, './data/foo.png', false, {}, function (err) {
callbacks.put2++;
assert.ifError(err);

Expand Down
2 changes: 1 addition & 1 deletion tests/s3-get-stream.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ var callbacks = {
s3.setCredentials(process.env.AWS_ACCEESS_KEY_ID, process.env.AWS_SECRET_ACCESS_KEY);
s3.setBucket(process.env.AWS2JS_S3_BUCKET);

s3.putFile(path, './data/foo.txt', false, {}, function (err, res) {
s3.putFile(path, './data/foo.txt', false, {}, function (err) {
callbacks.put++;
assert.ifError(err);
s3.get(path, 'stream', function (err, res) {
Expand Down
4 changes: 1 addition & 3 deletions tests/s3-get-subresource-request-parameter.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,14 @@
var common = require('./includes/common.js');

var assert = require('assert');
var s3 = require('../').load('s3');
var s3 = require('../').load('s3', process.env.AWS_ACCEESS_KEY_ID, process.env.AWS_SECRET_ACCESS_KEY);

var callbacks = {
query: 0,
path: 0,
queryOnly: 0
};

s3.setCredentials(process.env.AWS_ACCEESS_KEY_ID, process.env.AWS_SECRET_ACCESS_KEY);
s3.setBucket(process.env.AWS2JS_S3_BUCKET);

var s3ProcessResponse = function (err, res) {
Expand All @@ -25,7 +24,6 @@ s3.get('?uploads', {'max-uploads': 1}, 'xml', function (err, res) {
s3ProcessResponse(err, res);
});


s3.get('?uploads&max-uploads=1', 'xml', function (err, res) {
callbacks.path++;
s3ProcessResponse(err, res);
Expand Down
6 changes: 3 additions & 3 deletions tests/s3-lifecycle.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,21 @@ var showError = function (err) {
s3.setCredentials(process.env.AWS_ACCEESS_KEY_ID, process.env.AWS_SECRET_ACCESS_KEY);
s3.setBucket(process.env.AWS2JS_S3_BUCKET);

s3.delLifeCycle(function (error, response) {
s3.delLifeCycle(function (error) {
callbacks.delLifeCycle++;

console.log('s3.delLifeCycle');
showError(error);
assert.ifError(error);

s3.putLifeCycleRule('id', 'prefix-' + timestamp, 5, function (error, response) {
s3.putLifeCycleRule('id', 'prefix-' + timestamp, 5, function (error) {
callbacks.putLifeCycleRule++;

console.log('s3.putLifeCycleRule: id, prefix-' + timestamp);
showError(error);
assert.ifError(error);

s3.delLifeCycleRule('id', function(error, response) {
s3.delLifeCycleRule('id', function(error) {
callbacks.delLifeCycleRule++;

console.log('s3.delLifeCycleRule: id');
Expand Down
6 changes: 3 additions & 3 deletions tests/s3-move-object.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ var callbacks = {
s3.setCredentials(process.env.AWS_ACCEESS_KEY_ID, process.env.AWS_SECRET_ACCESS_KEY);
s3.setBucket(process.env.AWS2JS_S3_BUCKET);

s3.putFile(source, './data/foo.png', false, {}, function (err, res) {
s3.putFile(source, './data/foo.png', false, {}, function (err) {
callbacks.putFile++;
assert.ifError(err);

s3.moveObject(s3.getBucket() + '/' + source, destination, false, {}, function (err, res) {
s3.moveObject(s3.getBucket() + '/' + source, destination, false, {}, function (err) {
callbacks.renameObject++;
assert.ifError(err);

Expand All @@ -30,7 +30,7 @@ s3.putFile(source, './data/foo.png', false, {}, function (err, res) {
assert.ifError(err);
assert.deepEqual(res['content-type'], 'image/png');

s3.del(destination, function (err, res) {
s3.del(destination, function (err) {
callbacks.delDestination++;
assert.ifError(err);
});
Expand Down
6 changes: 3 additions & 3 deletions tests/s3-multipart-upload.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ crypto.randomBytes(6291456, function (err, buf) {
assert.ifError(err);
util.log('wrote the random data file');

s3.putFileMultipart(file, file, false, {}, 5242880, function (err, res) {
s3.putFileMultipart(file, file, false, {}, 5242880, function (err) {
assert.ifError(err);
callbacks.putFileMultipart++;

util.log('uploaded the 6M.tmp file to S3');

s3.get(file, {file: file}, function (err, res) {
s3.get(file, {file: file}, function (err) {
assert.ifError(err);

util.log('got the file back from S3');
Expand All @@ -57,7 +57,7 @@ crypto.randomBytes(6291456, function (err, buf) {
fs.unlink(file, function (err) {
assert.ifError(err);

s3.del(file, function (err, res) {
s3.del(file, function (err) {
assert.ifError(err);
util.log('cleaned up the S3 remote');
});
Expand Down
2 changes: 1 addition & 1 deletion tests/s3-put-buffer.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ s3.setBucket(process.env.AWS2JS_S3_BUCKET);
fs.readFile('./data/foo.txt', function (err, buffer) {
assert.ifError(err);

s3.putBuffer(path, buffer, false, {'content-type': 'text/plain'}, function (err, res) {
s3.putBuffer(path, buffer, false, {'content-type': 'text/plain'}, function (err) {
callbacks.put++;
assert.ifError(err);
s3.get(path, 'buffer', function (err, res) {
Expand Down
2 changes: 1 addition & 1 deletion tests/s3-put-file-special-chars.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ s3.setBucket(process.env.AWS2JS_S3_BUCKET);
s3.putFile(path, './data/foo.txt', false, {
'content-type': 'text/plain',
'content-length': 4
}, function (err, res) {
}, function (err) {
callbacks.put++;
assert.ifError(err);
s3.get(path, 'buffer', function (err, res) {
Expand Down
Loading