deep-package-manager
Version:
DEEP Package Manager
167 lines (136 loc) • 3.77 kB
JavaScript
/**
* Created by AlexanderC on 11/24/15.
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.S3Driver = undefined;
var _AbstractDriver = require('./AbstractDriver');
var _tmp = require('tmp');
var _tmp2 = _interopRequireDefault(_tmp);
var _os = require('os');
var _os2 = _interopRequireDefault(_os);
var _fsExtra = require('fs-extra');
var _fsExtra2 = _interopRequireDefault(_fsExtra);
var _Exec = require('../../Helpers/Exec');
var _MissingCredentialsException = require('./Exception/MissingCredentialsException');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class S3Driver extends _AbstractDriver.AbstractDriver {
/**
* @param {*} args
*/
constructor(...args) {
super(...args);
}
/**
* @returns {String}
*/
service() {
return 'S3';
}
/**
* @param {String} resourceId
* @param {Object} resourceData
* @param {Function} cb
* @private
*/
_removeResource(resourceId, resourceData, cb) {
this._removeWebsite(resourceId, error => {
if (error) {
this._log(`No public website bound to ${resourceId}`);
}
//this._remove(resourceId, cb);
this._removeUsingAwsCli(resourceId, cb);
});
}
/**
* @param {String} bucketName
* @param {Function} cb
* @private
*/
_removeWebsite(bucketName, cb) {
this._awsService.deleteBucketWebsite({
Bucket: bucketName
}, error => {
cb(error);
});
}
/**
* @todo: remove this hook when fixing s3 sync functionality
*
* @param {String} bucketName
* @param {Function} cb
* @private
*/
_removeUsingAwsCli(bucketName, cb) {
this._getBucketRegion(bucketName, (error, region) => {
if (error) {
cb(error);
return;
}
_tmp2.default.tmpName((error, credentialsFile) => {
if (error) {
cb(error);
return;
}
let credentials = this._credentials;
if (!credentials) {
cb(new _MissingCredentialsException.MissingCredentialsException(this));
return;
}
let credentialsContent = `[profile _deep_]${_os2.default.EOL}`;
credentialsContent += `aws_access_key_id=${credentials.accessKeyId}${_os2.default.EOL}`;
credentialsContent += `aws_secret_access_key=${credentials.secretAccessKey}${_os2.default.EOL}`;
_fsExtra2.default.outputFile(credentialsFile, credentialsContent, error => {
if (error) {
cb(error);
return;
}
let regionPart = region ? `--region '${region}'` : '';
let removeCommand = `export AWS_CONFIG_FILE=${credentialsFile};`;
removeCommand += `aws --profile _deep_ ${regionPart} s3 rb --force 's3://${bucketName}'`;
new _Exec.Exec(removeCommand).avoidBufferOverflow().run(result => {
_fsExtra2.default.removeSync(credentialsFile);
if (result.failed) {
cb(result.error);
return;
}
cb(null);
});
});
});
});
}
/**
* @param {String} bucketName
* @param {Function} cb
* @private
*/
_getBucketRegion(bucketName, cb) {
this._awsService.getBucketLocation({
Bucket: bucketName
}, (error, data) => {
if (error) {
cb(error, null);
return;
}
cb(null, data.LocationConstraint);
});
}
/**
* does not work because of buckets' objects...
*
* @param {String} bucketName
* @param {Function} cb
* @private
*/
_remove(bucketName, cb) {
this._awsService.deleteBucket({
Bucket: bucketName
}, error => {
cb(error);
});
}
}
exports.S3Driver = S3Driver;