split aws code into storage backends

This commit is contained in:
Girish Ramakrishnan
2015-11-06 18:22:29 -08:00
parent a853afc407
commit 12200f2e0d
3 changed files with 105 additions and 33 deletions
+3 -2
View File
@@ -12,9 +12,10 @@ exports = module.exports = {
}; };
var assert = require('assert'), var assert = require('assert'),
aws = require('./aws.js'), caas = require('./storage/caas.js'),
config = require('./config.js'), config = require('./config.js'),
debug = require('debug')('box:backups'), debug = require('debug')('box:backups'),
s3 = require('./storage/s3.js'),
superagent = require('superagent'), superagent = require('superagent'),
util = require('util'); util = require('util');
@@ -43,7 +44,7 @@ BackupsError.MISSING_CREDENTIALS = 'missing credentials';
// choose which storage backend we use for test purpose we use s3 // choose which storage backend we use for test purpose we use s3
function api() { function api() {
return aws; return config.token() ? caas : s3;
} }
function getAllPaged(page, perPage, callback) { function getAllPaged(page, perPage, callback) {
+2 -22
View File
@@ -11,16 +11,13 @@ exports = module.exports = {
var assert = require('assert'), var assert = require('assert'),
AWS = require('aws-sdk'), AWS = require('aws-sdk'),
config = require('./config.js'), config = require('../config.js'),
debug = require('debug')('box:aws'),
BackupError = require('./backups.js').BackupError,
superagent = require('superagent'); superagent = require('superagent');
function getBackupCredentials(callback) { function getBackupCredentials(callback) {
assert.strictEqual(typeof callback, 'function'); assert.strictEqual(typeof callback, 'function');
assert(config.token());
// CaaS
if (config.token()) {
var url = config.apiServerOrigin() + '/api/v1/boxes/' + config.fqdn() + '/awscredentials'; var url = config.apiServerOrigin() + '/api/v1/boxes/' + config.fqdn() + '/awscredentials';
superagent.post(url).query({ token: config.token() }).end(function (error, result) { superagent.post(url).query({ token: config.token() }).end(function (error, result) {
if (error) return callback(error); if (error) return callback(error);
@@ -38,27 +35,12 @@ function getBackupCredentials(callback) {
callback(null, credentials); callback(null, credentials);
}); });
} else {
if (!config.aws().accessKeyId || !config.aws().secretAccessKey) return callback(new BackupError(BackupError.MISSING_CREDENTIALS));
var credentials = {
accessKeyId: config.aws().accessKeyId,
secretAccessKey: config.aws().secretAccessKey,
region: 'us-east-1'
};
if (config.aws().endpoint) credentials.endpoint = new AWS.Endpoint(config.aws().endpoint);
callback(null, credentials);
}
} }
function getSignedUploadUrl(filename, callback) { function getSignedUploadUrl(filename, callback) {
assert.strictEqual(typeof filename, 'string'); assert.strictEqual(typeof filename, 'string');
assert.strictEqual(typeof callback, 'function'); assert.strictEqual(typeof callback, 'function');
debug('getSignedUploadUrl: %s', filename);
getBackupCredentials(function (error, credentials) { getBackupCredentials(function (error, credentials) {
if (error) return callback(error); if (error) return callback(error);
@@ -80,8 +62,6 @@ function getSignedDownloadUrl(filename, callback) {
assert.strictEqual(typeof filename, 'string'); assert.strictEqual(typeof filename, 'string');
assert.strictEqual(typeof callback, 'function'); assert.strictEqual(typeof callback, 'function');
debug('getSignedDownloadUrl: %s', filename);
getBackupCredentials(function (error, credentials) { getBackupCredentials(function (error, credentials) {
if (error) return callback(error); if (error) return callback(error);
+91
View File
@@ -0,0 +1,91 @@
/* jslint node:true */
'use strict';
exports = module.exports = {
getSignedUploadUrl: getSignedUploadUrl,
getSignedDownloadUrl: getSignedDownloadUrl,
copyObject: copyObject
};
var assert = require('assert'),
AWS = require('aws-sdk'),
config = require('../config.js');
function getBackupCredentials(callback) {
assert.strictEqual(typeof callback, 'function');
if (!config.aws().accessKeyId || !config.aws().secretAccessKey) return callback(new Error('missing credentials'));
var credentials = {
accessKeyId: config.aws().accessKeyId,
secretAccessKey: config.aws().secretAccessKey,
region: 'us-east-1'
};
if (config.aws().endpoint) credentials.endpoint = new AWS.Endpoint(config.aws().endpoint);
callback(null, credentials);
}
function getSignedUploadUrl(filename, callback) {
assert.strictEqual(typeof filename, 'string');
assert.strictEqual(typeof callback, 'function');
getBackupCredentials(function (error, credentials) {
if (error) return callback(error);
var s3 = new AWS.S3(credentials);
var params = {
Bucket: config.aws().backupBucket,
Key: config.aws().backupPrefix + '/' + filename,
Expires: 60 * 30 /* 30 minutes */
};
var url = s3.getSignedUrl('putObject', params);
callback(null, { url : url, sessionToken: credentials.sessionToken });
});
}
function getSignedDownloadUrl(filename, callback) {
assert.strictEqual(typeof filename, 'string');
assert.strictEqual(typeof callback, 'function');
getBackupCredentials(function (error, credentials) {
if (error) return callback(error);
var s3 = new AWS.S3(credentials);
var params = {
Bucket: config.aws().backupBucket,
Key: config.aws().backupPrefix + '/' + filename,
Expires: 60 * 30 /* 30 minutes */
};
var url = s3.getSignedUrl('getObject', params);
callback(null, { url: url, sessionToken: credentials.sessionToken });
});
}
function copyObject(from, to, callback) {
assert.strictEqual(typeof from, 'string');
assert.strictEqual(typeof to, 'string');
assert.strictEqual(typeof callback, 'function');
getBackupCredentials(function (error, credentials) {
if (error) return callback(error);
var params = {
Bucket: config.aws().backupBucket, // target bucket
Key: config.aws().backupPrefix + '/' + to, // target file
CopySource: config.aws().backupBucket + '/' + config.aws().backupPrefix + '/' + from, // source
};
var s3 = new AWS.S3(credentials);
s3.copyObject(params, callback);
});
}