diff --git a/app/main/uploader.py b/app/main/uploader.py index 7eaf12698..8c87fe3c9 100644 --- a/app/main/uploader.py +++ b/app/main/uploader.py @@ -1,18 +1,32 @@ +import botocore from boto3 import resource -def s3upload(upload_id, service_id, filedata): +def s3upload(upload_id, service_id, filedata, region): s3 = resource('s3') - bucket_name = 'service-{}-{}-notify'.format(service_id, upload_id) - s3.create_bucket(Bucket=bucket_name) + bucket_name = 'service-{}-notify'.format(service_id) contents = '\n'.join(filedata['data']) + + bucket = s3.Bucket(bucket_name) + exists = True + try: + s3.meta.client.head_bucket(Bucket=bucket_name) + except botocore.exceptions.ClientError as e: + error_code = int(e.response['Error']['Code']) + if error_code == 404: + exists = False + + if not exists: + s3.create_bucket(Bucket=bucket_name, + CreateBucketConfiguration={'LocationConstraint': region}) + key = s3.Object(bucket_name, upload_id) key.put(Body=contents, ServerSideEncryption='AES256') def s3download(service_id, upload_id): s3 = resource('s3') - bucket_name = 'service-{}-{}-notify'.format(service_id, upload_id) + bucket_name = 'service-{}-notify'.format(service_id) key = s3.Object(bucket_name, upload_id) contents = key.get()['Body'].read().decode('utf-8') return contents diff --git a/app/main/views/sms.py b/app/main/views/sms.py index e02df960d..32843cc6e 100644 --- a/app/main/views/sms.py +++ b/app/main/views/sms.py @@ -10,7 +10,8 @@ from flask import ( url_for, flash, abort, - session + session, + current_app ) from flask_login import login_required @@ -41,7 +42,7 @@ def send_sms(service_id): filedata = _get_filedata(csv_file) upload_id = str(uuid.uuid4()) template_id = request.form.get('template') - s3upload(upload_id, service_id, filedata) + s3upload(upload_id, service_id, filedata, current_app.config['AWS_REGION']) session['upload_data'] = {"template_id": template_id, "original_file_name": filedata['file_name']} return redirect(url_for('.check_sms', service_id=service_id, diff --git a/config.py b/config.py index b2725fbf1..582d5a2ac 100644 --- a/config.py +++ b/config.py @@ -41,6 +41,8 @@ class Config(object): HEADER_COLOUR = '#FFBF47' # $yellow + AWS_REGION = 'eu-west-1' + class Development(Config): DEBUG = True