diff --git a/index.js b/index.js index 122e5ca..d180ea5 100644 --- a/index.js +++ b/index.js @@ -242,7 +242,11 @@ class Client { return Promise.resolve(); } this.serverless.cli.log(`Configuring CORS for bucket...`); - return configure.configureCorsForBucket(this.aws, bucketName); + const bucketCorsFile = this.serverless.service.custom.client.bucketCorsFile; + const customCors = + bucketCorsFile && JSON.parse(fs.readFileSync(bucketCorsFile)); + + return configure.configureCorsForBucket(this.aws, bucketName, customCors); }) .then(() => { this.serverless.cli.log(`Uploading client files to bucket...`); diff --git a/lib/configure.js b/lib/configure.js index 4109a22..91f7971 100644 --- a/lib/configure.js +++ b/lib/configure.js @@ -118,10 +118,12 @@ function configurePolicyForBucket(aws, bucketName, customPolicy) { * @param {Object} aws - AWS class * @param {string} bucketName - Name of bucket to be configured */ -function configureCorsForBucket(aws, bucketName) { +function configureCorsForBucket(aws, bucketName, customCors) { + const cors = customCors || require('./resources/CORSPolicy') + const params = { Bucket: bucketName, - CORSConfiguration: require('./resources/CORSPolicy') + CORSConfiguration: cors }; return aws.request('S3', 'putBucketCors', params); diff --git a/lib/validate.js b/lib/validate.js index a73cdc9..6f1b473 100644 --- a/lib/validate.js +++ b/lib/validate.js @@ -58,6 +58,17 @@ function validateClient(serverless, options) { ); } } + + // check that custom bucket CORS is valid json + if (options.bucketCorsFile) { + try { + JSON.parse(fs.readFileSync(options.bucketCorsFile)); + } catch (e) { + validationErrors.push( + `Failed to read and/or parse specified CORS policy. Make sure it is valid JSON.` + ); + } + } // check website configuration options