UNPKG

deep-package-manager

Version:
167 lines (136 loc) 3.77 kB
/** * Created by AlexanderC on 11/24/15. */ 'use strict'; 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;