예제 #1
0
파일: views.py 프로젝트: zehome/claritick
def new(request, from_host=False):
    """
    View to Create a new host. (eventualy copied from an existing one)
    """
    POST = HostForm.filter_querydict(request.user, request.POST)
    add_fields = None

    remote_addr = get_request_remote_addr(request)

    if POST:
        form = HostForm(request.user, remote_addr, POST)
        if form.is_valid():
            host, add_fields = form.save(POST=POST)
            redir = POST.get('submit_button', False)
            if redir == 'new':
                form = HostForm(request.user, remote_addr)
            elif redir == 'save':
                return redirect(host)
            elif redir == 'return':
                return redirect('list_hosts')
    else:
        if from_host:
            from_host = get_host_or_404(request.user, pk=from_host)
            inst, comp = from_host.copy_instance()
            form = HostForm(request.user, remote_addr, instance=inst)
            form.log_action(u"consulté", from_host)
            add_fields = AdditionnalFieldForm(comp, host=inst)
        else:
            form = HostForm(request.user, remote_addr)
    return render_to_response('clariadmin/host.html', {
            'form': form,
            'prefix': '8',
            'additionnal_fields': add_fields},
            context_instance=RequestContext(request))
예제 #2
0
파일: views.py 프로젝트: zehome/claritick
def modify(request, host_id):
    """
    View to modify a Host.
    """
    POST = HostForm.filter_querydict(request.user, request.POST)
    host = get_host_or_404(request.user, pk=host_id)
    prefix = str(host_id)
    if request.is_ajax():
        template = "clariadmin/ajax_host.html"
    else:
        template = "clariadmin/host.html"
    
    remote_addr = get_request_remote_addr(request)
    
    add_fields = AdditionnalFieldForm(host=host, prefix=prefix)
    if POST:
        form = HostForm(request.user, remote_addr,
                        POST, instance=host, prefix=prefix)
        if POST.get("delete", False):
            form.delete()
            return redirect('list_hosts')
        if form.is_valid():
            host, add_fields = form.save(POST=POST, prefix=prefix)
            redir = POST.get('submit_button', False)
            if redir == 'new':
                return redirect('new_host')
            elif redir == 'save':
                pass
            elif redir == 'return':
                return redirect('list_hosts')
    else:
        form = HostForm(request.user, remote_addr,
                        instance=host, prefix=prefix)
    form.log_action(u"consulté")
    return render_to_response(template, {
        "form": form,
        'additionnal_fields': add_fields,
        'prefix': prefix,
        'ajax': request.is_ajax(),
        "host": host}, context_instance=RequestContext(request))
예제 #3
0
파일: views.py 프로젝트: zehome/claritick
def softupdate_ip(request, ipaddress):
    """
    This view is used for a "host" to self modify his
    ip address (in HostIPLog).

    The HostIPLog is used for security reasons in order not to
    give public write access to Host.
    """

    softupdate_key = settings.SOFTUPDATE_KEY
    if request.POST.get("key", "invalid_key") != softupdate_key:
        raise PermissionDenied()

    # LC: UGGLY and not "portable"
    STATUS_EN_SERVICE = 'En service'

    def noanswer(reason=""):
        message = """Modification impossible.\n"""
        if reason and settings.DEBUG:
            message += """%s\n""" % (reason,)
        return HttpResponse(message, content_type="plain/text")

    serial = request.POST.get("serial", None)
    hostname = request.POST.get("hostname", None)

    host = None
    errmsgs = []

    if serial:
        hosts = Host.objects.filter(serial=serial)
        if len(hosts) == 1:
            host = hosts[0]
        elif len(hosts) > 1:
            for h in hosts:
                if h.ip == ipaddress:
                    host = h
                    break

        if not host:
            errmsgs.append("Le host serial=%s est introuvable." % (serial,))

    if hostname and not host:
        hosts = Host.objects.filter(hostname=hostname,
                                    status__description=STATUS_EN_SERVICE)
        if len(hosts) == 1:
            host = hosts[0]
        elif len(hosts) > 1:
            for h in hosts:
                if h.ip == ipaddress:
                    host = h
                    break

    # Get the last log entry
    hostlogs = HostIPLog.objects.filter(host=host, log_ip=ipaddress) \
                                .order_by("-date")
    if hostlogs:
        hostlog = hostlogs[0]
    else:
        hostlog = HostIPLog(host=host, log_ip=ipaddress)
    
    hostlog.log_queryfrom = get_request_remote_addr(request)
    hostlog.log_hostname = request.POST.get('hostname', 'unknown')
    hostlog.save()

    return HttpResponse('ok.', content_type='plain/text')