"""SQS message logic.""" import json import boto3 from botocore.exceptions import ClientError from oto import response from proxy import config def get_account(): """ Get account id of current caller. Returns: queue_url (str): current AWS account id """ try: account_client = boto3.client('sts') account_id = account_client.get_caller_identity().get('Account') return account_id except ClientError as error: return response.Response( message=error.response['Error']['Message'], status=500) def get_queue_url(queue_name): """ Get SQS queue url using account id and name from config. Args: queue_name (str): the friendly name of the queue. Returns: Response: queue_url (str): information about the created message """ try: # Get current account id account_id = get_account() sqs_client = boto3.client('sqs', region_name=config.AWS_REGION) result = sqs_client.get_queue_url( QueueName=queue_name, QueueOwnerAWSAccountId=account_id ) return result['QueueUrl'] except ClientError as error: return response.Response( message=error.response['Error']['Message'], status=500) def create_message(webhook_data): """ Logic handlers. Args: webhook_data (dict): the json payload data for a given webhook. Returns: Response: message_response (str): information about the created message """ repo_dict = config.REPOSITORY_MAPPING try: name_in_repo = webhook_data['repository']['name'] in repo_dict.keys() except KeyError as error: return response.Response( message='Repository not found in webhook data', status=400) if 'ref' in webhook_data and name_in_repo: queue_name = repo_dict[webhook_data['repository']['name']] queue_url = get_queue_url(queue_name) try: sqs_client = boto3.client('sqs', region_name=config.AWS_REGION) result = sqs_client.send_message( QueueUrl=queue_url, MessageBody=json.dumps(webhook_data) ) return response.Response(message=result) except ClientError as error: return response.Response( message=error.response['Error']['Message'], status=500) else: return response.Response( message='Ref or repository not found in webhook data', status=400)