Exemple #1
0
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)
Exemple #2
0
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)