def get_submission_message_from_queue(request, queue_name): """ API to fetch submission message from AWS SQS queue Arguments: queue_name -- The unique authentication token provided by challenge hosts """ try: challenge = Challenge.objects.get(queue=queue_name) # noqa except Challenge.DoesNotExist: response_data = { "error": "Challenge with queue name {} does not exist".format(queue_name) } return Response(response_data, status=status.HTTP_400_BAD_REQUEST) if not is_user_a_host_of_challenge(request.user, challenge.pk): response_data = { "error": "Sorry, you are not authorized to access this resource" } return Response(response_data, status=status.HTTP_401_UNAUTHORIZED) queue = get_sqs_queue_object() try: messages = queue.receive_messages() if len(messages): message_receipt_handle = messages[0].receipt_handle message_body = eval(messages[0].body) logger.info("A submission is received with pk {}".format( message_body.get("submission_pk"))) else: logger.info("No submission received") message_receipt_handle = None message_body = None response_data = { "body": message_body, "receipt_handle": message_receipt_handle, } return Response(response_data, status=status.HTTP_200_OK) except botocore.exceptions.ClientError as ex: response_data = ex logger.exception("Exception raised: {}".format(ex)) return Response(response_data, status=status.HTTP_400_BAD_REQUEST)
def delete_submission_message_from_queue(request, queue_name, receipt_handle): """ API to delete submission message from AWS SQS queue Arguments: queue_name -- The unique authentication token provided by challenge hosts receipt_handle -- The receipt handle of the message to be deleted """ try: challenge = Challenge.objects.get(queue=queue_name) except Challenge.DoesNotExist: response_data = { "error": "Challenge with queue name {} does not exists".format(queue_name) } return Response(response_data, status=status.HTTP_400_BAD_REQUEST) challenge_pk = challenge.pk if not is_user_a_host_of_challenge(request.user, challenge_pk): response_data = { "error": "Sorry, you are not authorized to access this resource" } return Response(response_data, status=status.HTTP_401_UNAUTHORIZED) queue = get_sqs_queue_object() try: message = queue.Message(receipt_handle) message.delete() response_data = { "success": "Message deleted successfully from the queue: {}".format( queue_name) } return Response(response_data, status=status.HTTP_200_OK) except botocore.exceptions.ClientError as ex: response_data = ex logger.exception( "SQS message is not deleted due to {}".format(response_data)) return Response(response_data, status=status.HTTP_400_BAD_REQUEST)