Skip to content
Merged
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
20 changes: 10 additions & 10 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"@babel/polyfill": "^7.7.0",
"@babel/preset-env": "^7.7.1",
"@babel/runtime": "^7.7.2",
"aws-sdk": "^2.616.0",
"aws-sdk": "^2.680.0",
"commander": "^2.20.3",
"deepforge-user-management-page": "github:deepforge-dev/user-management-page",
"dotenv": "^2.0.0",
Expand Down
48 changes: 10 additions & 38 deletions src/common/storage/backends/s3/Client.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ define([

S3Storage.prototype = Object.create(StorageClient.prototype);


S3Storage.prototype.initialize = async function () {
if (require.isBrowser) {
await new Promise((resolve, reject) => {
Expand All @@ -29,27 +28,16 @@ define([
}
};

S3Storage.prototype.initializeS3Client = function (AWS, config) {
const s3Client = new AWS.S3(config);
promisifyMethod(s3Client, 'createBucket');
promisifyMethod(s3Client, 'getObject');
promisifyMethod(s3Client, 'putObject');
promisifyMethod(s3Client, 'deleteObject');
promisifyMethod(s3Client, 'headObject');
promisifyMethod(s3Client, 'listObjectsV2');
return s3Client;
};

S3Storage.prototype.getS3Client = async function (config) {
await this.ready;
if(!config){
if(!this.defaultClient){
this.defaultClient = this.initializeS3Client(this.AWS, this.config);
this.defaultClient = new this.AWS.S3(this.config);
}
return this.defaultClient;
} else {
config = this.createS3Config(config);
return this.initializeS3Client(this.AWS, config);
return new this.AWS.S3(config);
}
};

Expand All @@ -69,7 +57,7 @@ define([
try {
await s3Client.createBucket({
Bucket: this.bucketName
});
}).promise();
} catch (err) {
if (err['statusCode'] !== BUCKET_EXISTS_CODE) {
this.logger.error(`Failed to create bucket ${this.bucketName} in S3 server.`);
Expand All @@ -86,7 +74,7 @@ define([
const data = await s3Client.getObject({
Bucket: bucketName,
Key: filename
});
}).promise();
return data.Body;
};

Expand All @@ -100,7 +88,7 @@ define([
Key: filename,
};
try {
await s3Client.putObject(params);
await s3Client.putObject(params).promise();
} catch (err) {
throw new Error(`Unable to upload ${filename}: ${err.message}`);
}
Expand All @@ -116,14 +104,14 @@ define([
Bucket: this.bucketName,
MaxKeys: 1000,
Prefix: dirname
});
}).promise();

for (const file of Contents) {
const params = {
Bucket: this.bucketName,
Key: file.Key
};
await s3Client.deleteObject(params);
await s3Client.deleteObject(params).promise();
}
this.logger.debug(`Successfully deleted directory ${dirname} from the S3 server`);
};
Expand All @@ -136,7 +124,7 @@ define([
Bucket: bucketName,
Key: filename
};
await s3Client.deleteObject(params);
await s3Client.deleteObject(params).promise();
};

S3Storage.prototype.getMetadata = async function (dataInfo) {
Expand All @@ -149,29 +137,13 @@ define([
return `${this.id}/${bucketName}/${filename}`;
};

function promisifyMethod(object, method) {
const fn = object[method];
object[method] = function () {
return new Promise((resolve, reject) => {
const args = Array.prototype.slice.call(arguments);
const callback = function (err, result) {
if (err) {
return reject(err);
}
resolve(result);
};
args.push(callback);
fn.apply(object, args);
});
};
}

S3Storage.prototype.stat = async function (path) {
const params = {
Bucket: this.bucketName,
Key: path
};
const metadata = (await this.getS3Client()).headObject(params);
const metadata = await ((await this.getS3Client())
.headObject(params).promise());
metadata.filename = path;
metadata.size = metadata.ContentLength;
metadata.bucketName = this.bucketName;
Expand Down