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))
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))
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')