From fc03ef8ecd71532c1f5746ef70bb68de16c3cc05 Mon Sep 17 00:00:00 2001 From: Emanuele Date: Tue, 23 Apr 2024 18:33:59 +0200 Subject: [PATCH] Lambda redirect first version --- .vscode/settings.json | 3 +- lambda_redirect/lambda_redirect.py | 85 ++++++++++++++++++++++++++---- 2 files changed, 77 insertions(+), 11 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 457f44d..dcb1530 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "python.analysis.typeCheckingMode": "basic" + "python.analysis.typeCheckingMode": "basic", + "python.analysis.autoImportCompletions": true } \ No newline at end of file diff --git a/lambda_redirect/lambda_redirect.py b/lambda_redirect/lambda_redirect.py index 7953abd..5a5225c 100644 --- a/lambda_redirect/lambda_redirect.py +++ b/lambda_redirect/lambda_redirect.py @@ -1,24 +1,89 @@ import boto3 +import json +import boto3.exceptions +from botocore.exceptions import ClientError s3_client = None -s3_bucket = None -def lambda_handler(event, context): +def lambda_handler(event: dict, context): global s3_client - global s3_bucket if s3_client is None: s3_client = boto3.client('s3') - s3_bucket = s3_client.Bucket('standout-data') + for x in s3_client.list_buckets()['Buckets']: + print(f"{x['Name']}: {x['CreationDate'].isoformat()}") + + try: + resp = s3_client.get_object( + Bucket='standout-data', + Key='redirects.json' + ) + except s3_client.exceptions.NoSuchKey as e: + print(e) + # Oppure pagina "siamo spiacenti ma il contenuto non e' disponibile" + return { + "statusCode": 404 + } + try: + redirects = json.load(resp["Body"]) + params = event.get('queryStringParameters', {}) + customer = redirects.get(params['cust_id'], {}) + gadget = customer.get(params['gadget_id'], {}) + + content = gadget.get('content', None) + dest = None + if content and isinstance(content, dict): + dest = content[params['face_id']] + else: + dest = content + + if dest and isinstance(dest, dict): + match dest.get('type', 's3'): + case "s3": + try: + response = s3_client.generate_presigned_url('get_object', + Params={'Bucket': 'standout-data', + 'Key': dest['key']}, + ExpiresIn=120) + except ClientError as e: + print(e) + finally: + dest = response + except json.decoder.JSONDecodeError as je: + print(je) + return { + "statusCode": 500 + } + except KeyError as ke: + print(ke) + return { + "statusCode": 500 + } + return { "statusCode": 301, "headers": { - "Cache-Control": "no-cache", - #"Location": "https://standout-data.s3.eu-west-1.amazonaws.com/funnel-rotation-circles.jpg" - "Location": "https://www.instagram.com/cosebrutteimpaginatebelle/?e=ec081328-9f83-4745-b6b7-aed1e87963df&g=5" - #"Location": "https://standout-data.s3.eu-west-1.amazonaws.com/Meter-Seneca.pdf" - #"Location": "https://standout-data.s3.eu-west-1.amazonaws.com/Lisa+Varano.vcf" - } + "Cache-Control": "no-cache", + "Location": str(dest) + } } + + +if __name__ == "__main__": + event = { + "resource": "/", + "path": "/", + "httpMethod": "GET", + "queryStringParameters": { + "cust_id": "cust_id1", + "gadget_id": "gadget_id1", + "face_id": "face_id3" + }, + } + + print(json.dumps(lambda_handler( + event, + None + ), indent=2)) \ No newline at end of file