Exemple #1
0
def detail(request, message_id, archive=False):
    """
    Displays details of a message, and processes quarantined messages
    """
    if archive:
        obj = Archive
    else:
        obj = Message
    message_details = get_object_or_404(obj, id=message_id)
    if not message_details.can_access(request):
        return HttpResponseForbidden(
            'You are not authorized to access this page')

    error_list = ''
    quarantine_form = QuarantineProcessForm()
    quarantine_form.fields[
    'message_id'].widget.attrs['value'] = message_details.id

    if request.method == 'POST':
        quarantine_form = QuarantineProcessForm(request.POST)
        success = True
        if quarantine_form.is_valid():
            if not host_is_local(message_details.hostname):
                params = urllib.urlencode(request.POST)
                remote_response = remote_process(message_details.hostname,
                    request.META['HTTP_COOKIE'], message_id, params)
                response = remote_response['response']
                if request.is_ajax():
                    return HttpResponse(response,
                        content_type='application/javascript; charset=utf-8')
                try:
                    resp = simplejson.loads(response)
                    if resp['success']:
                        success = True
                    else:
                        success = False
                    error_list = resp['response']
                except:
                    success = False
                    error_list = 'Error: Empty server response'
            else:
                file_name = search_quarantine(message_details.date, message_id)
                if not file_name is None:
                    if quarantine_form.cleaned_data['release']:
                        # release
                        if quarantine_form.cleaned_data['use_alt']:
                            to_addr = quarantine_form.cleaned_data[
                            'altrecipients']
                        else:
                            to_addr = message_details.to_address
                        to_addr = to_addr.split(',')
                        if not release_mail(file_name, to_addr,
                            message_details.from_address):
                            success = False
                        template = 'messages/released.html'
                        html = render_to_string(template, 
                            {'id': message_details.id, 'addrs':to_addr, 
                            'success':success})
                    if quarantine_form.cleaned_data['salearn']:
                        #salean
                        salearn_opts = ('spam', 'ham', 'forget')
                        template = "messages/salearn.html"
                        salearn = int(
                                    quarantine_form.cleaned_data['salearn_as'])
                        if salearn <= 2:
                            status = sa_learn(file_name, salearn_opts[salearn])
                            if not status['success']:
                                success = False
                            html = render_to_string(template,
                                {'id': message_details.id,
                                'msg':status['output'], 'success':success})
                        else:
                            success = False
                            html = 'Invalid salearn options supplied'
                    if quarantine_form.cleaned_data['todelete']:
                        #delete
                        import os
                        if os.path.exists(file_name):
                            try:
                                os.remove(file_name)
                                message_details.quarantined = 0
                                message_details.save()
                            except:
                                success = False
                        template = "messages/delete.html"
                        html = render_to_string(template,
                            {'id': message_details.id, 'success':success})
                else:
                    html = 'The quarantined file could not be processed'
                    success = False
        else:
            error_list = quarantine_form.errors.values()[0]
            error_list = error_list[0]
            html = error_list
            success = False
        if request.is_ajax():
            response = simplejson.dumps({'success':success, 'html': html})
            return HttpResponse(response,
                content_type='application/javascript; charset=utf-8')

    quarantine_form.fields['altrecipients'].widget.attrs['size'] = '55'
    return render_to_response('messages/detail.html', locals(),
        context_instance=RequestContext(request))
Exemple #2
0
def detail(request, message_id, archive=False):
    """
    Displays details of a message, and processes quarantined messages
    """
    if archive:
        obj = Archive
    else:
        obj = Message
    message_details = get_object_or_404(obj, id=message_id)
    if not message_details.can_access(request):
        return HttpResponseForbidden(_('You are not authorized'
        ' to access this page'))

    delivery_reports = DeliveryInfo.objects.filter(id=message_id)
    error_list = ''
    quarantine_form = QuarantineProcessForm()
    quarantine_form.fields[
    'message_id'].widget.attrs['value'] = message_details.id

    if request.method == 'POST':
        quarantine_form = QuarantineProcessForm(request.POST)
        if quarantine_form.is_valid():
            form_data = quarantine_form.cleaned_data
            form_data['message_id'] = [form_data['message_id']]
            task = ProcessQuarantine.apply_async(args=[form_data],
            queue=message_details.hostname)
            html = []
            task.wait()
            result = task.result[0]
            if task.status == 'SUCCESS':
                success = True
                if form_data['release']:
                    #release
                    if form_data['use_alt']:
                        to_addr = form_data['altrecipients']
                    else:
                        to_addr = message_details.to_address
                    to_addr = to_addr.split(',')
                    error_msg = ''
                    if not result['release']:
                        success = False
                        error_msg = dict(result['errors'])['release']
                    template = 'messages/released.html'
                    html.append(render_to_string(template,
                        {'id': message_details.id, 'addrs': to_addr,
                        'success': success, 'error_msg': error_msg}))
                if form_data['learn']:
                    #salean
                    error_msg = ''
                    template = "messages/salearn.html"
                    if not result['learn']:
                        success = False
                        error_msg = dict(result['errors'])['learn']
                    html.append(render_to_string(template,
                        {'id': message_details.id, 'msg': error_msg,
                        'success': success}))
                if form_data['todelete']:
                    #delete
                    error_msg = ''
                    if not result['delete']:
                        success = False
                        error_msg = dict(result['errors'])['delete']
                    template = "messages/delete.html"
                    html.append(render_to_string(template,
                    {'id': message_details.id, 'success': success,
                    'error_msg': error_msg}))
                html = '<br />'.join(html)
            else:
                success = False
                html = _('Processing the request failed')
        else:
            error_list = quarantine_form.errors.values()[0]
            error_list = error_list[0]
            html = error_list
            success = False
        if request.is_ajax():
            response = anyjson.dumps({'success': success, 'html': html})
            return HttpResponse(response,
            content_type='application/javascript; charset=utf-8')

    quarantine_form.fields['altrecipients'].widget.attrs['size'] = '55'
    return render_to_response('messages/detail.html', locals(),
        context_instance=RequestContext(request))
Exemple #3
0
def detail(request, message_id, archive=False):
    """
    Displays details of a message, and processes quarantined messages
    """
    if archive:
        obj = Archive
    else:
        obj = Message
    message_details = get_object_or_404(obj, id=message_id)
    if not message_details.can_access(request):
        return HttpResponseForbidden(_('You are not authorized'
        ' to access this page'))

    error_list = ''
    quarantine_form = QuarantineProcessForm()
    quarantine_form.fields[
    'message_id'].widget.attrs['value'] = message_details.id

    if request.method == 'POST':
        quarantine_form = QuarantineProcessForm(request.POST)
        if quarantine_form.is_valid():
            form_data = quarantine_form.cleaned_data
            form_data['message_id'] = [form_data['message_id']]
            task = ProcessQuarantine.apply_async(args=[form_data],
            queue=message_details.hostname)
            html = []
            task.wait()
            result = task.result[0]
            if task.status == 'SUCCESS':
                success = True
                if form_data['release']:
                    #release
                    if form_data['use_alt']:
                        to_addr = form_data['altrecipients']
                    else:
                        to_addr = message_details.to_address
                    to_addr = to_addr.split(',')
                    error_msg = ''
                    if not result['release']:
                        success = False
                        error_msg = dict(result['errors'])['release']
                    template = 'messages/released.html'
                    html.append(render_to_string(template, 
                        {'id': message_details.id, 'addrs': to_addr, 
                        'success': success, 'error_msg': error_msg}))
                if form_data['learn']:
                    #salean
                    error_msg = ''
                    template = "messages/salearn.html"
                    if not result['learn']:
                        success = False
                        error_msg = dict(result['errors'])['learn']
                    html.append(render_to_string(template,
                        {'id': message_details.id, 'msg': error_msg, 
                        'success': success}))
                if form_data['todelete']:
                    #delete
                    error_msg = ''
                    if not result['delete']:
                        success = False
                        error_msg = dict(result['errors'])['delete']
                    template = "messages/delete.html"
                    html.append(render_to_string(template, 
                    {'id': message_details.id, 'success': success,
                    'error_msg': error_msg}))
                html = '<br />'.join(html)
            else:
                success = False
                html = _('Processing the request failed')
        else:
            error_list = quarantine_form.errors.values()[0]
            error_list = error_list[0]
            html = error_list
            success = False
        if request.is_ajax():
            response = anyjson.dumps({'success': success, 'html': html})
            return HttpResponse(response,
            content_type='application/javascript; charset=utf-8')

    quarantine_form.fields['altrecipients'].widget.attrs['size'] = '55'
    return render_to_response('messages/detail.html', locals(),
        context_instance=RequestContext(request))