|
|
|
@ -25,24 +25,41 @@ |
|
|
|
# App de gestion des machines pour re2o |
|
|
|
# Gabriel Détraz, Augustin Lemesle |
|
|
|
# Gplv2 |
|
|
|
"""machines.views |
|
|
|
The views for the Machines app |
|
|
|
""" |
|
|
|
|
|
|
|
from __future__ import unicode_literals |
|
|
|
|
|
|
|
from django.urls import reverse |
|
|
|
from django.http import HttpResponse |
|
|
|
from django.shortcuts import render, redirect |
|
|
|
from django.shortcuts import get_object_or_404 |
|
|
|
from django.template.context_processors import csrf |
|
|
|
from django.template import Context, RequestContext, loader |
|
|
|
from django.contrib import messages |
|
|
|
from django.contrib.auth.decorators import login_required, permission_required |
|
|
|
from django.db.models import ProtectedError, F |
|
|
|
from django.forms import ValidationError, modelformset_factory |
|
|
|
from django.contrib.auth import authenticate, login |
|
|
|
from django.forms import modelformset_factory |
|
|
|
from django.views.decorators.csrf import csrf_exempt |
|
|
|
|
|
|
|
from rest_framework.renderers import JSONRenderer |
|
|
|
from machines.serializers import ( |
|
|
|
|
|
|
|
from users.models import User |
|
|
|
from preferences.models import GeneralOption |
|
|
|
from re2o.utils import ( |
|
|
|
all_active_assigned_interfaces, |
|
|
|
filter_active_interfaces, |
|
|
|
SortTable, |
|
|
|
re2o_paginator, |
|
|
|
) |
|
|
|
from re2o.acl import ( |
|
|
|
can_create, |
|
|
|
can_edit, |
|
|
|
can_delete, |
|
|
|
can_view_all, |
|
|
|
can_delete_set, |
|
|
|
) |
|
|
|
from re2o.views import form |
|
|
|
|
|
|
|
from .serializers import ( |
|
|
|
FullInterfaceSerializer, |
|
|
|
InterfaceSerializer, |
|
|
|
TypeSerializer, |
|
|
|
@ -53,12 +70,8 @@ from machines.serializers import ( |
|
|
|
ExtensionSerializer, |
|
|
|
ServiceServersSerializer, |
|
|
|
NsSerializer, |
|
|
|
OuverturePortsSerializer |
|
|
|
) |
|
|
|
from reversion import revisions as reversion |
|
|
|
from reversion.models import Version |
|
|
|
|
|
|
|
import re |
|
|
|
from .forms import ( |
|
|
|
NewMachineForm, |
|
|
|
EditMachineForm, |
|
|
|
@ -68,8 +81,6 @@ from .forms import ( |
|
|
|
DelMachineTypeForm, |
|
|
|
ExtensionForm, |
|
|
|
DelExtensionForm, |
|
|
|
) |
|
|
|
from .forms import ( |
|
|
|
EditIpTypeForm, |
|
|
|
IpTypeForm, |
|
|
|
DelIpTypeForm, |
|
|
|
@ -93,13 +104,13 @@ from .forms import ( |
|
|
|
SrvForm, |
|
|
|
DelSrvForm, |
|
|
|
Ipv6ListForm, |
|
|
|
EditOuverturePortListForm, |
|
|
|
EditOuverturePortConfigForm |
|
|
|
) |
|
|
|
from .forms import EditOuverturePortListForm, EditOuverturePortConfigForm |
|
|
|
from .models import ( |
|
|
|
IpType, |
|
|
|
Machine, |
|
|
|
Interface, |
|
|
|
IpList, |
|
|
|
MachineType, |
|
|
|
Extension, |
|
|
|
SOA, |
|
|
|
@ -116,24 +127,6 @@ from .models import ( |
|
|
|
OuverturePort, |
|
|
|
Ipv6List, |
|
|
|
) |
|
|
|
from users.models import User |
|
|
|
from preferences.models import GeneralOption, OptionalMachine |
|
|
|
from re2o.utils import ( |
|
|
|
all_active_assigned_interfaces, |
|
|
|
all_has_access, |
|
|
|
filter_active_interfaces, |
|
|
|
SortTable, |
|
|
|
re2o_paginator, |
|
|
|
) |
|
|
|
from re2o.acl import ( |
|
|
|
can_create, |
|
|
|
can_edit, |
|
|
|
can_delete, |
|
|
|
can_view, |
|
|
|
can_view_all, |
|
|
|
can_delete_set, |
|
|
|
) |
|
|
|
from re2o.views import form |
|
|
|
|
|
|
|
|
|
|
|
def f_type_id(is_type_tt): |
|
|
|
@ -143,10 +136,10 @@ def f_type_id(is_type_tt): |
|
|
|
return 'id_Interface-type_hidden' if is_type_tt else 'id_Interface-type' |
|
|
|
|
|
|
|
|
|
|
|
def generate_ipv4_choices(form): |
|
|
|
def generate_ipv4_choices(form_obj): |
|
|
|
""" Generate the parameter choices for the massive_bootstrap_form tag |
|
|
|
""" |
|
|
|
f_ipv4 = form.fields['ipv4'] |
|
|
|
f_ipv4 = form_obj.fields['ipv4'] |
|
|
|
used_mtype_id = [] |
|
|
|
choices = '{"":[{key:"",value:"Choisissez d\'abord un type de machine"},' |
|
|
|
mtype_id = -1 |
|
|
|
@ -166,7 +159,7 @@ def generate_ipv4_choices(form): |
|
|
|
v=ip.ipv4 |
|
|
|
) |
|
|
|
|
|
|
|
for t in form.fields['type'].queryset.exclude(id__in=used_mtype_id): |
|
|
|
for t in form_obj.fields['type'].queryset.exclude(id__in=used_mtype_id): |
|
|
|
choices += '], "'+str(t.id)+'": [' |
|
|
|
choices += '{key: "", value: "' + str(f_ipv4.empty_label) + '"},' |
|
|
|
choices += ']}' |
|
|
|
@ -206,10 +199,10 @@ def generate_ipv4_match_func(is_type_tt): |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
def generate_ipv4_mbf_param(form, is_type_tt): |
|
|
|
def generate_ipv4_mbf_param(form_obj, is_type_tt): |
|
|
|
""" Generate all the parameters to use with the massive_bootstrap_form |
|
|
|
tag """ |
|
|
|
i_choices = {'ipv4': generate_ipv4_choices(form)} |
|
|
|
i_choices = {'ipv4': generate_ipv4_choices(form_obj)} |
|
|
|
i_engine = {'ipv4': generate_ipv4_engine(is_type_tt)} |
|
|
|
i_match_func = {'ipv4': generate_ipv4_match_func(is_type_tt)} |
|
|
|
i_update_on = {'ipv4': [f_type_id(is_type_tt)]} |
|
|
|
@ -227,7 +220,7 @@ def generate_ipv4_mbf_param(form, is_type_tt): |
|
|
|
@login_required |
|
|
|
@can_create(Machine) |
|
|
|
@can_edit(User) |
|
|
|
def new_machine(request, user, userid): |
|
|
|
def new_machine(request, user, _userid): |
|
|
|
""" Fonction de creation d'une machine. Cree l'objet machine, |
|
|
|
le sous objet interface et l'objet domain à partir de model forms. |
|
|
|
Trop complexe, devrait être simplifié""" |
|
|
|
@ -239,16 +232,16 @@ def new_machine(request, user, userid): |
|
|
|
) |
|
|
|
domain = DomainForm(request.POST or None, user=user) |
|
|
|
if machine.is_valid() and interface.is_valid(): |
|
|
|
new_machine = machine.save(commit=False) |
|
|
|
new_machine.user = user |
|
|
|
new_interface = interface.save(commit=False) |
|
|
|
domain.instance.interface_parent = new_interface |
|
|
|
new_machine_obj = machine.save(commit=False) |
|
|
|
new_machine_obj.user = user |
|
|
|
new_interface_obj = interface.save(commit=False) |
|
|
|
domain.instance.interface_parent = new_interface_obj |
|
|
|
if domain.is_valid(): |
|
|
|
new_domain = domain.save(commit=False) |
|
|
|
new_machine.save() |
|
|
|
new_interface.machine = new_machine |
|
|
|
new_interface.save() |
|
|
|
new_domain.interface_parent = new_interface |
|
|
|
new_machine_obj.save() |
|
|
|
new_interface_obj.machine = new_machine_obj |
|
|
|
new_interface_obj.save() |
|
|
|
new_domain.interface_parent = new_interface_obj |
|
|
|
new_domain.save() |
|
|
|
messages.success(request, "La machine a été créée") |
|
|
|
return redirect(reverse( |
|
|
|
@ -271,7 +264,7 @@ def new_machine(request, user, userid): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(Interface) |
|
|
|
def edit_interface(request, interface_instance, interfaceid): |
|
|
|
def edit_interface(request, interface_instance, _interfaceid): |
|
|
|
""" Edition d'une interface. Distingue suivant les droits les valeurs |
|
|
|
de interfaces et machines que l'user peut modifier infra permet de |
|
|
|
modifier le propriétaire""" |
|
|
|
@ -293,15 +286,15 @@ def edit_interface(request, interface_instance, interfaceid): |
|
|
|
if (machine_form.is_valid() and |
|
|
|
interface_form.is_valid() and |
|
|
|
domain_form.is_valid()): |
|
|
|
new_machine = machine_form.save(commit=False) |
|
|
|
new_interface = interface_form.save(commit=False) |
|
|
|
new_domain = domain_form.save(commit=False) |
|
|
|
new_machine_obj = machine_form.save(commit=False) |
|
|
|
new_interface_obj = interface_form.save(commit=False) |
|
|
|
new_domain_obj = domain_form.save(commit=False) |
|
|
|
if machine_form.changed_data: |
|
|
|
new_machine.save() |
|
|
|
new_machine_obj.save() |
|
|
|
if interface_form.changed_data: |
|
|
|
new_interface.save() |
|
|
|
new_interface_obj.save() |
|
|
|
if domain_form.changed_data: |
|
|
|
new_domain.save() |
|
|
|
new_domain_obj.save() |
|
|
|
messages.success(request, "La machine a été modifiée") |
|
|
|
return redirect(reverse( |
|
|
|
'users:profil', |
|
|
|
@ -323,7 +316,7 @@ def edit_interface(request, interface_instance, interfaceid): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_delete(Machine) |
|
|
|
def del_machine(request, machine, machineid): |
|
|
|
def del_machine(request, machine, _machineid): |
|
|
|
""" Supprime une machine, interfaces en mode cascade""" |
|
|
|
if request.method == "POST": |
|
|
|
machine.delete() |
|
|
|
@ -342,20 +335,20 @@ def del_machine(request, machine, machineid): |
|
|
|
@login_required |
|
|
|
@can_create(Interface) |
|
|
|
@can_edit(Machine) |
|
|
|
def new_interface(request, machine, machineid): |
|
|
|
def new_interface(request, machine, _machineid): |
|
|
|
""" Ajoute une interface et son domain associé à une machine existante""" |
|
|
|
|
|
|
|
interface_form = AddInterfaceForm(request.POST or None, user=request.user) |
|
|
|
domain_form = DomainForm(request.POST or None) |
|
|
|
if interface_form.is_valid(): |
|
|
|
new_interface = interface_form.save(commit=False) |
|
|
|
domain_form.instance.interface_parent = new_interface |
|
|
|
new_interface.machine = machine |
|
|
|
new_interface_obj = interface_form.save(commit=False) |
|
|
|
domain_form.instance.interface_parent = new_interface_obj |
|
|
|
new_interface_obj.machine = machine |
|
|
|
if domain_form.is_valid(): |
|
|
|
new_domain = domain_form.save(commit=False) |
|
|
|
new_interface.save() |
|
|
|
new_domain.interface_parent = new_interface |
|
|
|
new_domain.save() |
|
|
|
new_domain_obj = domain_form.save(commit=False) |
|
|
|
new_interface_obj.save() |
|
|
|
new_domain_obj.interface_parent = new_interface_obj |
|
|
|
new_domain_obj.save() |
|
|
|
messages.success(request, "L'interface a été ajoutée") |
|
|
|
return redirect(reverse( |
|
|
|
'users:profil', |
|
|
|
@ -376,7 +369,7 @@ def new_interface(request, machine, machineid): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_delete(Interface) |
|
|
|
def del_interface(request, interface, interfaceid): |
|
|
|
def del_interface(request, interface, _interfaceid): |
|
|
|
""" Supprime une interface. Domain objet en mode cascade""" |
|
|
|
if request.method == "POST": |
|
|
|
machine = interface.machine |
|
|
|
@ -398,7 +391,7 @@ def del_interface(request, interface, interfaceid): |
|
|
|
@login_required |
|
|
|
@can_create(Ipv6List) |
|
|
|
@can_edit(Interface) |
|
|
|
def new_ipv6list(request, interface, interfaceid): |
|
|
|
def new_ipv6list(request, interface, _interfaceid): |
|
|
|
"""Nouvelle ipv6""" |
|
|
|
ipv6list_instance = Ipv6List(interface=interface) |
|
|
|
ipv6 = Ipv6ListForm( |
|
|
|
@ -422,7 +415,7 @@ def new_ipv6list(request, interface, interfaceid): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(Ipv6List) |
|
|
|
def edit_ipv6list(request, ipv6list_instance, ipv6listid): |
|
|
|
def edit_ipv6list(request, ipv6list_instance, _ipv6listid): |
|
|
|
"""Edition d'une ipv6""" |
|
|
|
ipv6 = Ipv6ListForm( |
|
|
|
request.POST or None, |
|
|
|
@ -446,7 +439,7 @@ def edit_ipv6list(request, ipv6list_instance, ipv6listid): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_delete(Ipv6List) |
|
|
|
def del_ipv6list(request, ipv6list, ipv6listid): |
|
|
|
def del_ipv6list(request, ipv6list, _ipv6listid): |
|
|
|
""" Supprime une ipv6""" |
|
|
|
if request.method == "POST": |
|
|
|
interfaceid = ipv6list.interface.id |
|
|
|
@ -483,7 +476,7 @@ def add_iptype(request): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(IpType) |
|
|
|
def edit_iptype(request, iptype_instance, iptypeid): |
|
|
|
def edit_iptype(request, iptype_instance, _iptypeid): |
|
|
|
""" Edition d'un range. Ne permet pas de le redimensionner pour éviter |
|
|
|
l'incohérence""" |
|
|
|
|
|
|
|
@ -528,6 +521,7 @@ def del_iptype(request, instances): |
|
|
|
@login_required |
|
|
|
@can_create(MachineType) |
|
|
|
def add_machinetype(request): |
|
|
|
""" View used to add a Machinetype object """ |
|
|
|
machinetype = MachineTypeForm(request.POST or None) |
|
|
|
if machinetype.is_valid(): |
|
|
|
machinetype.save() |
|
|
|
@ -542,7 +536,8 @@ def add_machinetype(request): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(MachineType) |
|
|
|
def edit_machinetype(request, machinetype_instance, machinetypeid): |
|
|
|
def edit_machinetype(request, machinetype_instance, _machinetypeid): |
|
|
|
""" View used to edit a MachineType object """ |
|
|
|
machinetype = MachineTypeForm( |
|
|
|
request.POST or None, |
|
|
|
instance=machinetype_instance |
|
|
|
@ -562,6 +557,7 @@ def edit_machinetype(request, machinetype_instance, machinetypeid): |
|
|
|
@login_required |
|
|
|
@can_delete_set(MachineType) |
|
|
|
def del_machinetype(request, instances): |
|
|
|
""" View used to delete a MachineType object """ |
|
|
|
machinetype = DelMachineTypeForm(request.POST or None, instances=instances) |
|
|
|
if machinetype.is_valid(): |
|
|
|
machinetype_dels = machinetype.cleaned_data['machinetypes'] |
|
|
|
@ -587,6 +583,7 @@ def del_machinetype(request, instances): |
|
|
|
@login_required |
|
|
|
@can_create(Extension) |
|
|
|
def add_extension(request): |
|
|
|
""" View used to add an Extension object """ |
|
|
|
extension = ExtensionForm(request.POST or None) |
|
|
|
if extension.is_valid(): |
|
|
|
extension.save() |
|
|
|
@ -601,7 +598,8 @@ def add_extension(request): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(Extension) |
|
|
|
def edit_extension(request, extension_instance, extensionid): |
|
|
|
def edit_extension(request, extension_instance, _extensionid): |
|
|
|
""" View used to edit an Extension object """ |
|
|
|
extension = ExtensionForm( |
|
|
|
request.POST or None, |
|
|
|
instance=extension_instance |
|
|
|
@ -621,6 +619,7 @@ def edit_extension(request, extension_instance, extensionid): |
|
|
|
@login_required |
|
|
|
@can_delete_set(Extension) |
|
|
|
def del_extension(request, instances): |
|
|
|
""" View used to delete an Extension object """ |
|
|
|
extension = DelExtensionForm(request.POST or None, instances=instances) |
|
|
|
if extension.is_valid(): |
|
|
|
extension_dels = extension.cleaned_data['extensions'] |
|
|
|
@ -646,6 +645,7 @@ def del_extension(request, instances): |
|
|
|
@login_required |
|
|
|
@can_create(SOA) |
|
|
|
def add_soa(request): |
|
|
|
""" View used to add a SOA object """ |
|
|
|
soa = SOAForm(request.POST or None) |
|
|
|
if soa.is_valid(): |
|
|
|
soa.save() |
|
|
|
@ -660,7 +660,8 @@ def add_soa(request): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(SOA) |
|
|
|
def edit_soa(request, soa_instance, soaid): |
|
|
|
def edit_soa(request, soa_instance, _soaid): |
|
|
|
""" View used to edit a SOA object """ |
|
|
|
soa = SOAForm(request.POST or None, instance=soa_instance) |
|
|
|
if soa.is_valid(): |
|
|
|
if soa.changed_data: |
|
|
|
@ -677,6 +678,7 @@ def edit_soa(request, soa_instance, soaid): |
|
|
|
@login_required |
|
|
|
@can_delete_set(SOA) |
|
|
|
def del_soa(request, instances): |
|
|
|
""" View used to delete a SOA object """ |
|
|
|
soa = DelSOAForm(request.POST or None, instances=instances) |
|
|
|
if soa.is_valid(): |
|
|
|
soa_dels = soa.cleaned_data['soa'] |
|
|
|
@ -701,6 +703,7 @@ def del_soa(request, instances): |
|
|
|
@login_required |
|
|
|
@can_create(Mx) |
|
|
|
def add_mx(request): |
|
|
|
""" View used to add a MX object """ |
|
|
|
mx = MxForm(request.POST or None) |
|
|
|
if mx.is_valid(): |
|
|
|
mx.save() |
|
|
|
@ -715,7 +718,8 @@ def add_mx(request): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(Mx) |
|
|
|
def edit_mx(request, mx_instance, mxid): |
|
|
|
def edit_mx(request, mx_instance, _mxid): |
|
|
|
""" View used to edit a MX object """ |
|
|
|
mx = MxForm(request.POST or None, instance=mx_instance) |
|
|
|
if mx.is_valid(): |
|
|
|
if mx.changed_data: |
|
|
|
@ -732,6 +736,7 @@ def edit_mx(request, mx_instance, mxid): |
|
|
|
@login_required |
|
|
|
@can_delete_set(Mx) |
|
|
|
def del_mx(request, instances): |
|
|
|
""" View used to delete a MX object """ |
|
|
|
mx = DelMxForm(request.POST or None, instances=instances) |
|
|
|
if mx.is_valid(): |
|
|
|
mx_dels = mx.cleaned_data['mx'] |
|
|
|
@ -756,6 +761,7 @@ def del_mx(request, instances): |
|
|
|
@login_required |
|
|
|
@can_create(Ns) |
|
|
|
def add_ns(request): |
|
|
|
""" View used to add a NS object """ |
|
|
|
ns = NsForm(request.POST or None) |
|
|
|
if ns.is_valid(): |
|
|
|
ns.save() |
|
|
|
@ -770,7 +776,8 @@ def add_ns(request): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(Ns) |
|
|
|
def edit_ns(request, ns_instance, nsid): |
|
|
|
def edit_ns(request, ns_instance, _nsid): |
|
|
|
""" View used to edit a NS object """ |
|
|
|
ns = NsForm(request.POST or None, instance=ns_instance) |
|
|
|
if ns.is_valid(): |
|
|
|
if ns.changed_data: |
|
|
|
@ -787,6 +794,7 @@ def edit_ns(request, ns_instance, nsid): |
|
|
|
@login_required |
|
|
|
@can_delete_set(Ns) |
|
|
|
def del_ns(request, instances): |
|
|
|
""" View used to delete a NS object """ |
|
|
|
ns = DelNsForm(request.POST or None, instances=instances) |
|
|
|
if ns.is_valid(): |
|
|
|
ns_dels = ns.cleaned_data['ns'] |
|
|
|
@ -811,6 +819,7 @@ def del_ns(request, instances): |
|
|
|
@login_required |
|
|
|
@can_create(Txt) |
|
|
|
def add_txt(request): |
|
|
|
""" View used to add a TXT object """ |
|
|
|
txt = TxtForm(request.POST or None) |
|
|
|
if txt.is_valid(): |
|
|
|
txt.save() |
|
|
|
@ -825,7 +834,8 @@ def add_txt(request): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(Txt) |
|
|
|
def edit_txt(request, txt_instance, txtid): |
|
|
|
def edit_txt(request, txt_instance, _txtid): |
|
|
|
""" View used to edit a TXT object """ |
|
|
|
txt = TxtForm(request.POST or None, instance=txt_instance) |
|
|
|
if txt.is_valid(): |
|
|
|
if txt.changed_data: |
|
|
|
@ -842,6 +852,7 @@ def edit_txt(request, txt_instance, txtid): |
|
|
|
@login_required |
|
|
|
@can_delete_set(Txt) |
|
|
|
def del_txt(request, instances): |
|
|
|
""" View used to delete a TXT object """ |
|
|
|
txt = DelTxtForm(request.POST or None, instances=instances) |
|
|
|
if txt.is_valid(): |
|
|
|
txt_dels = txt.cleaned_data['txt'] |
|
|
|
@ -866,6 +877,7 @@ def del_txt(request, instances): |
|
|
|
@login_required |
|
|
|
@can_create(Srv) |
|
|
|
def add_srv(request): |
|
|
|
""" View used to add a SRV object """ |
|
|
|
srv = SrvForm(request.POST or None) |
|
|
|
if srv.is_valid(): |
|
|
|
srv.save() |
|
|
|
@ -880,7 +892,8 @@ def add_srv(request): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(Srv) |
|
|
|
def edit_srv(request, srv_instance, srvid): |
|
|
|
def edit_srv(request, srv_instance, _srvid): |
|
|
|
""" View used to edit a SRV object """ |
|
|
|
srv = SrvForm(request.POST or None, instance=srv_instance) |
|
|
|
if srv.is_valid(): |
|
|
|
if srv.changed_data: |
|
|
|
@ -897,6 +910,7 @@ def edit_srv(request, srv_instance, srvid): |
|
|
|
@login_required |
|
|
|
@can_delete_set(Srv) |
|
|
|
def del_srv(request, instances): |
|
|
|
""" View used to delete a SRV object """ |
|
|
|
srv = DelSrvForm(request.POST or None, instances=instances) |
|
|
|
if srv.is_valid(): |
|
|
|
srv_dels = srv.cleaned_data['srv'] |
|
|
|
@ -922,6 +936,7 @@ def del_srv(request, instances): |
|
|
|
@can_create(Domain) |
|
|
|
@can_edit(Interface) |
|
|
|
def add_alias(request, interface, interfaceid): |
|
|
|
""" View used to add an Alias object """ |
|
|
|
alias = AliasForm(request.POST or None, user=request.user) |
|
|
|
if alias.is_valid(): |
|
|
|
alias = alias.save(commit=False) |
|
|
|
@ -941,7 +956,8 @@ def add_alias(request, interface, interfaceid): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(Domain) |
|
|
|
def edit_alias(request, domain_instance, domainid): |
|
|
|
def edit_alias(request, domain_instance, _domainid): |
|
|
|
""" View used to edit an Alias object """ |
|
|
|
alias = AliasForm( |
|
|
|
request.POST or None, |
|
|
|
instance=domain_instance, |
|
|
|
@ -967,6 +983,7 @@ def edit_alias(request, domain_instance, domainid): |
|
|
|
@login_required |
|
|
|
@can_edit(Interface) |
|
|
|
def del_alias(request, interface, interfaceid): |
|
|
|
""" View used to delete an Alias object """ |
|
|
|
alias = DelAliasForm(request.POST or None, interface=interface) |
|
|
|
if alias.is_valid(): |
|
|
|
alias_dels = alias.cleaned_data['alias'] |
|
|
|
@ -997,6 +1014,7 @@ def del_alias(request, interface, interfaceid): |
|
|
|
@login_required |
|
|
|
@can_create(Service) |
|
|
|
def add_service(request): |
|
|
|
""" View used to add a Service object """ |
|
|
|
service = ServiceForm(request.POST or None) |
|
|
|
if service.is_valid(): |
|
|
|
service.save() |
|
|
|
@ -1011,7 +1029,8 @@ def add_service(request): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(Service) |
|
|
|
def edit_service(request, service_instance, serviceid): |
|
|
|
def edit_service(request, service_instance, _serviceid): |
|
|
|
""" View used to edit a Service object """ |
|
|
|
service = ServiceForm(request.POST or None, instance=service_instance) |
|
|
|
if service.is_valid(): |
|
|
|
if service.changed_data: |
|
|
|
@ -1028,6 +1047,7 @@ def edit_service(request, service_instance, serviceid): |
|
|
|
@login_required |
|
|
|
@can_delete_set(Service) |
|
|
|
def del_service(request, instances): |
|
|
|
""" View used to delete a Service object """ |
|
|
|
service = DelServiceForm(request.POST or None, instances=instances) |
|
|
|
if service.is_valid(): |
|
|
|
service_dels = service.cleaned_data['service'] |
|
|
|
@ -1052,6 +1072,7 @@ def del_service(request, instances): |
|
|
|
@login_required |
|
|
|
@can_create(Vlan) |
|
|
|
def add_vlan(request): |
|
|
|
""" View used to add a VLAN object """ |
|
|
|
vlan = VlanForm(request.POST or None) |
|
|
|
if vlan.is_valid(): |
|
|
|
vlan.save() |
|
|
|
@ -1066,7 +1087,8 @@ def add_vlan(request): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(Vlan) |
|
|
|
def edit_vlan(request, vlan_instance, vlanid): |
|
|
|
def edit_vlan(request, vlan_instance, _vlanid): |
|
|
|
""" View used to edit a VLAN object """ |
|
|
|
vlan = VlanForm(request.POST or None, instance=vlan_instance) |
|
|
|
if vlan.is_valid(): |
|
|
|
if vlan.changed_data: |
|
|
|
@ -1083,6 +1105,7 @@ def edit_vlan(request, vlan_instance, vlanid): |
|
|
|
@login_required |
|
|
|
@can_delete_set(Vlan) |
|
|
|
def del_vlan(request, instances): |
|
|
|
""" View used to delete a VLAN object """ |
|
|
|
vlan = DelVlanForm(request.POST or None, instances=instances) |
|
|
|
if vlan.is_valid(): |
|
|
|
vlan_dels = vlan.cleaned_data['vlan'] |
|
|
|
@ -1107,6 +1130,7 @@ def del_vlan(request, instances): |
|
|
|
@login_required |
|
|
|
@can_create(Nas) |
|
|
|
def add_nas(request): |
|
|
|
""" View used to add a NAS object """ |
|
|
|
nas = NasForm(request.POST or None) |
|
|
|
if nas.is_valid(): |
|
|
|
nas.save() |
|
|
|
@ -1121,7 +1145,8 @@ def add_nas(request): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(Nas) |
|
|
|
def edit_nas(request, nas_instance, nasid): |
|
|
|
def edit_nas(request, nas_instance, _nasid): |
|
|
|
""" View used to edit a NAS object """ |
|
|
|
nas = NasForm(request.POST or None, instance=nas_instance) |
|
|
|
if nas.is_valid(): |
|
|
|
if nas.changed_data: |
|
|
|
@ -1138,6 +1163,7 @@ def edit_nas(request, nas_instance, nasid): |
|
|
|
@login_required |
|
|
|
@can_delete_set(Nas) |
|
|
|
def del_nas(request, instances): |
|
|
|
""" View used to delete a NAS object """ |
|
|
|
nas = DelNasForm(request.POST or None, instances=instances) |
|
|
|
if nas.is_valid(): |
|
|
|
nas_dels = nas.cleaned_data['nas'] |
|
|
|
@ -1162,6 +1188,8 @@ def del_nas(request, instances): |
|
|
|
@login_required |
|
|
|
@can_view_all(Machine) |
|
|
|
def index(request): |
|
|
|
""" The home view for this app. Displays the list of registered |
|
|
|
machines in Re2o """ |
|
|
|
pagination_large_number = (GeneralOption |
|
|
|
.get_cached_value('pagination_large_number')) |
|
|
|
machines_list = (Machine.objects |
|
|
|
@ -1194,6 +1222,7 @@ def index(request): |
|
|
|
@login_required |
|
|
|
@can_view_all(IpType) |
|
|
|
def index_iptype(request): |
|
|
|
""" View displaying the list of existing types of IP """ |
|
|
|
iptype_list = (IpType.objects |
|
|
|
.select_related('extension') |
|
|
|
.select_related('vlan') |
|
|
|
@ -1208,6 +1237,7 @@ def index_iptype(request): |
|
|
|
@login_required |
|
|
|
@can_view_all(Vlan) |
|
|
|
def index_vlan(request): |
|
|
|
""" View displaying the list of existing VLANs """ |
|
|
|
vlan_list = Vlan.objects.prefetch_related('iptype_set').order_by('vlan_id') |
|
|
|
return render( |
|
|
|
request, |
|
|
|
@ -1219,6 +1249,7 @@ def index_vlan(request): |
|
|
|
@login_required |
|
|
|
@can_view_all(MachineType) |
|
|
|
def index_machinetype(request): |
|
|
|
""" View displaying the list of existing types of machines """ |
|
|
|
machinetype_list = (MachineType.objects |
|
|
|
.select_related('ip_type') |
|
|
|
.order_by('type')) |
|
|
|
@ -1232,6 +1263,7 @@ def index_machinetype(request): |
|
|
|
@login_required |
|
|
|
@can_view_all(Nas) |
|
|
|
def index_nas(request): |
|
|
|
""" View displaying the list of existing NAS """ |
|
|
|
nas_list = (Nas.objects |
|
|
|
.select_related('machine_type') |
|
|
|
.select_related('nas_type') |
|
|
|
@ -1247,6 +1279,10 @@ def index_nas(request): |
|
|
|
@can_view_all(Srv) |
|
|
|
@can_view_all(Extension) |
|
|
|
def index_extension(request): |
|
|
|
""" View displaying the list of existing extensions, the list of |
|
|
|
existing SOA records, the list of existing MX records , the list of |
|
|
|
existing NS records, the list of existing TXT records and the list of |
|
|
|
existing SRV records """ |
|
|
|
extension_list = (Extension.objects |
|
|
|
.select_related('origin') |
|
|
|
.select_related('soa') |
|
|
|
@ -1282,6 +1318,7 @@ def index_extension(request): |
|
|
|
@login_required |
|
|
|
@can_edit(Interface) |
|
|
|
def index_alias(request, interface, interfaceid): |
|
|
|
""" View used to display the list of existing alias of an interface """ |
|
|
|
alias_list = Domain.objects.filter( |
|
|
|
cname=Domain.objects.filter(interface_parent=interface) |
|
|
|
).order_by('name') |
|
|
|
@ -1295,6 +1332,7 @@ def index_alias(request, interface, interfaceid): |
|
|
|
@login_required |
|
|
|
@can_edit(Interface) |
|
|
|
def index_ipv6(request, interface, interfaceid): |
|
|
|
""" View used to display the list of existing IPv6 of an interface """ |
|
|
|
ipv6_list = Ipv6List.objects.filter(interface=interface) |
|
|
|
return render( |
|
|
|
request, |
|
|
|
@ -1306,6 +1344,7 @@ def index_ipv6(request, interface, interfaceid): |
|
|
|
@login_required |
|
|
|
@can_view_all(Service) |
|
|
|
def index_service(request): |
|
|
|
""" View used to display the list of existing services """ |
|
|
|
service_list = (Service.objects |
|
|
|
.prefetch_related( |
|
|
|
'service_link_set__server__domain__extension' |
|
|
|
@ -1324,6 +1363,7 @@ def index_service(request): |
|
|
|
@login_required |
|
|
|
@can_view_all(OuverturePortList) |
|
|
|
def index_portlist(request): |
|
|
|
""" View used to display the list of existing port policies """ |
|
|
|
port_list = (OuverturePortList.objects |
|
|
|
.prefetch_related('ouvertureport_set') |
|
|
|
.prefetch_related('interface_set__domain__extension') |
|
|
|
@ -1338,7 +1378,8 @@ def index_portlist(request): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_edit(OuverturePortList) |
|
|
|
def edit_portlist(request, ouvertureportlist_instance, ouvertureportlistid): |
|
|
|
def edit_portlist(request, ouvertureportlist_instance, _ouvertureportlistid): |
|
|
|
""" View used to edit a port policy """ |
|
|
|
port_list = EditOuverturePortListForm( |
|
|
|
request.POST or None, |
|
|
|
instance=ouvertureportlist_instance |
|
|
|
@ -1376,7 +1417,8 @@ def edit_portlist(request, ouvertureportlist_instance, ouvertureportlistid): |
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_delete(OuverturePortList) |
|
|
|
def del_portlist(request, port_list_instance, ouvertureportlistid): |
|
|
|
def del_portlist(request, port_list_instance, _ouvertureportlistid): |
|
|
|
""" View used to delete a port policy """ |
|
|
|
port_list_instance.delete() |
|
|
|
messages.success(request, "La liste de ports a été supprimée") |
|
|
|
return redirect(reverse('machines:index-portlist')) |
|
|
|
@ -1385,6 +1427,7 @@ def del_portlist(request, port_list_instance, ouvertureportlistid): |
|
|
|
@login_required |
|
|
|
@can_create(OuverturePortList) |
|
|
|
def add_portlist(request): |
|
|
|
""" View used to add a port policy """ |
|
|
|
port_list = EditOuverturePortListForm(request.POST or None) |
|
|
|
port_formset = modelformset_factory( |
|
|
|
OuverturePort, |
|
|
|
@ -1409,22 +1452,14 @@ def add_portlist(request): |
|
|
|
'machines/edit_portlist.html', |
|
|
|
request |
|
|
|
) |
|
|
|
port_list = EditOuverturePortListForm(request.POST or None) |
|
|
|
if port_list.is_valid(): |
|
|
|
port_list.save() |
|
|
|
messages.success(request, "Liste de ports créée") |
|
|
|
return redirect(reverse('machines:index-portlist')) |
|
|
|
return form( |
|
|
|
{'machineform': port_list, 'action_name': 'Créer'}, |
|
|
|
'machines/machine.html', |
|
|
|
request |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@can_create(OuverturePort) |
|
|
|
@can_edit(Interface) |
|
|
|
def configure_ports(request, interface_instance, interfaceid): |
|
|
|
def configure_ports(request, interface_instance, _interfaceid): |
|
|
|
""" View to display the list of configured port policy for an |
|
|
|
interface """ |
|
|
|
if not interface_instance.may_have_port_open(): |
|
|
|
messages.error( |
|
|
|
request, |
|
|
|
@ -1447,10 +1482,11 @@ def configure_ports(request, interface_instance, interfaceid): |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
""" Framework Rest """ |
|
|
|
## Framework Rest |
|
|
|
|
|
|
|
|
|
|
|
class JSONResponse(HttpResponse): |
|
|
|
""" Class to build a JSON response. Used for API """ |
|
|
|
def __init__(self, data, **kwargs): |
|
|
|
content = JSONRenderer().render(data) |
|
|
|
kwargs['content_type'] = 'application/json' |
|
|
|
@ -1460,7 +1496,8 @@ class JSONResponse(HttpResponse): |
|
|
|
@csrf_exempt |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def mac_ip_list(request): |
|
|
|
def mac_ip_list(_request): |
|
|
|
""" API view to list the active and assigned interfaces """ |
|
|
|
interfaces = all_active_assigned_interfaces() |
|
|
|
seria = InterfaceSerializer(interfaces, many=True) |
|
|
|
return seria.data |
|
|
|
@ -1469,7 +1506,9 @@ def mac_ip_list(request): |
|
|
|
@csrf_exempt |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def full_mac_ip_list(request): |
|
|
|
def full_mac_ip_list(_request): |
|
|
|
""" API view to list the active and assigned interfaces. More |
|
|
|
detailed than mac_ip_list(request) """ |
|
|
|
interfaces = all_active_assigned_interfaces(full=True) |
|
|
|
seria = FullInterfaceSerializer(interfaces, many=True) |
|
|
|
return seria.data |
|
|
|
@ -1478,7 +1517,8 @@ def full_mac_ip_list(request): |
|
|
|
@csrf_exempt |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def alias(request): |
|
|
|
def alias(_request): |
|
|
|
""" API view to list the alias (CNAME) for all assigned interfaces """ |
|
|
|
alias = (Domain.objects |
|
|
|
.filter(interface_parent=None) |
|
|
|
.filter( |
|
|
|
@ -1494,7 +1534,8 @@ def alias(request): |
|
|
|
@csrf_exempt |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def corresp(request): |
|
|
|
def corresp(_request): |
|
|
|
""" API view to list the types of IP and infos about it """ |
|
|
|
type = IpType.objects.all().select_related('extension') |
|
|
|
seria = TypeSerializer(type, many=True) |
|
|
|
return JSONResponse(seria.data) |
|
|
|
@ -1503,7 +1544,8 @@ def corresp(request): |
|
|
|
@csrf_exempt |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def mx(request): |
|
|
|
def mx(_request): |
|
|
|
""" API view to list the MX records """ |
|
|
|
mx = (Mx.objects.all() |
|
|
|
.select_related('zone') |
|
|
|
.select_related('name__extension')) |
|
|
|
@ -1514,7 +1556,8 @@ def mx(request): |
|
|
|
@csrf_exempt |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def txt(request): |
|
|
|
def txt(_request): |
|
|
|
""" API view to list the TXT records """ |
|
|
|
txt = Txt.objects.all().select_related('zone') |
|
|
|
seria = TxtSerializer(txt, many=True) |
|
|
|
return JSONResponse(seria.data) |
|
|
|
@ -1523,7 +1566,8 @@ def txt(request): |
|
|
|
@csrf_exempt |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def srv(request): |
|
|
|
def srv(_request): |
|
|
|
""" API view to list the SRV records """ |
|
|
|
srv = (Srv.objects |
|
|
|
.all() |
|
|
|
.select_related('extension') |
|
|
|
@ -1535,7 +1579,8 @@ def srv(request): |
|
|
|
@csrf_exempt |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def ns(request): |
|
|
|
def ns(_request): |
|
|
|
""" API view to list the NS records """ |
|
|
|
ns = (Ns.objects |
|
|
|
.exclude( |
|
|
|
ns__in=Domain.objects.filter( |
|
|
|
@ -1550,7 +1595,8 @@ def ns(request): |
|
|
|
@csrf_exempt |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def zones(request): |
|
|
|
def zones(_request): |
|
|
|
""" API view to list the DNS zones """ |
|
|
|
zones = Extension.objects.all().select_related('origin') |
|
|
|
seria = ExtensionSerializer(zones, many=True) |
|
|
|
return JSONResponse(seria.data) |
|
|
|
@ -1560,6 +1606,7 @@ def zones(request): |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def mac_ip(request): |
|
|
|
""" API view to list the active and assigned interfaces """ |
|
|
|
seria = mac_ip_list(request) |
|
|
|
return JSONResponse(seria) |
|
|
|
|
|
|
|
@ -1568,6 +1615,8 @@ def mac_ip(request): |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def mac_ip_dns(request): |
|
|
|
""" API view to list the active and assigned interfaces. More |
|
|
|
detailed than mac_ip_list(request) """ |
|
|
|
seria = full_mac_ip_list(request) |
|
|
|
return JSONResponse(seria) |
|
|
|
|
|
|
|
@ -1575,7 +1624,8 @@ def mac_ip_dns(request): |
|
|
|
@csrf_exempt |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def service_servers(request): |
|
|
|
def service_servers(_request): |
|
|
|
""" API view to list the service links """ |
|
|
|
service_link = (Service_link.objects |
|
|
|
.all() |
|
|
|
.select_related('server__domain') |
|
|
|
@ -1587,7 +1637,8 @@ def service_servers(request): |
|
|
|
@csrf_exempt |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def ouverture_ports(request): |
|
|
|
def ouverture_ports(_request): |
|
|
|
""" API view to list the port policies for each IP """ |
|
|
|
r = {'ipv4': {}, 'ipv6': {}} |
|
|
|
for o in (OuverturePortList.objects |
|
|
|
.all() |
|
|
|
@ -1654,6 +1705,8 @@ def ouverture_ports(request): |
|
|
|
@login_required |
|
|
|
@permission_required('machines.serveur') |
|
|
|
def regen_achieved(request): |
|
|
|
""" API view to list the regen status for each (Service link, Server) |
|
|
|
couple """ |
|
|
|
obj = (Service_link.objects |
|
|
|
.filter( |
|
|
|
service__in=Service.objects.filter( |
|
|
|
|