Example #1
0
def view_download_submission(request, username):

    def extract_uuid(text):
        text = text[text.find("@key="):-1].replace("@key=", "")
        if text.startswith("uuid:"):
            text = text.replace("uuid:", "")
        return text

    form_user = get_object_or_404(User, username=username)
    profile, created = \
        UserProfile.objects.get_or_create(user=form_user)
    authenticator = HttpDigestAuthenticator()
    if not authenticator.authenticate(request):
        return authenticator.build_challenge_response()
    context = RequestContext(request)
    formId = request.GET.get('formId', None)
    if not isinstance(formId, basestring):
        return HttpResponseBadRequest()

    id_string = formId[0:formId.find('[')]
    form_id_parts = formId.split('/')
    if form_id_parts.__len__() < 2:
        return HttpResponseBadRequest()

    uuid = extract_uuid(form_id_parts[1])
    try:
        instance = Instance.objects.filter(xform__id_string=id_string,
                                           uuid=uuid,
                                           user__username=username,
                                           deleted_at=None)[0]
        xform = instance.xform
        if not has_permission(xform, form_user, request, xform.shared_data):
            return HttpResponseForbidden('Not shared.')
        submission_xml_root_node = instance.get_root_node()
        submission_xml_root_node.setAttribute(
            'instanceID', u'uuid:%s' % instance.uuid)
        submission_xml_root_node.setAttribute(
            'submissionDate', instance.date_created.isoformat()
        )
        context.submission_data = submission_xml_root_node.toxml()
        context.media_files = Attachment.objects.filter(instance=instance)
        context.host = request.build_absolute_uri().replace(
            request.get_full_path(), '')
        return render_to_response(
            'downloadSubmission.xml', context_instance=context,
            mimetype="text/xml; charset=utf-8")
    except IndexError:
        raise Http404
Example #2
0
def view_download_submission(request, username):
    def extract_uuid(text):
        text = text[text.find("@key="):-1].replace("@key=", "")
        if text.startswith("uuid:"):
            text = text.replace("uuid:", "")
        return text

    form_user = get_object_or_404(User, username=username)
    profile, created = \
        UserProfile.objects.get_or_create(user=form_user)
    authenticator = HttpDigestAuthenticator()
    if not authenticator.authenticate(request):
        return authenticator.build_challenge_response()
    context = RequestContext(request)
    formId = request.GET.get('formId', None)
    if not isinstance(formId, basestring):
        return HttpResponseBadRequest()

    id_string = formId[0:formId.find('[')]
    form_id_parts = formId.split('/')
    if form_id_parts.__len__() < 2:
        return HttpResponseBadRequest()

    uuid = extract_uuid(form_id_parts[1])
    try:
        instance = Instance.objects.filter(xform__id_string=id_string,
                                           uuid=uuid,
                                           user__username=username,
                                           deleted_at=None)[0]
        xform = instance.xform
        if not has_permission(xform, form_user, request, xform.shared_data):
            return HttpResponseForbidden('Not shared.')
        submission_xml_root_node = instance.get_root_node()
        submission_xml_root_node.setAttribute('instanceID',
                                              u'uuid:%s' % instance.uuid)
        submission_xml_root_node.setAttribute(
            'submissionDate', instance.date_created.isoformat())
        context.submission_data = submission_xml_root_node.toxml()
        context.media_files = Attachment.objects.filter(instance=instance)
        context.host = request.build_absolute_uri().replace(
            request.get_full_path(), '')
        return render_to_response('downloadSubmission.xml',
                                  context_instance=context,
                                  mimetype="text/xml; charset=utf-8")
    except IndexError:
        raise Http404