|
|
|
@ -43,31 +43,107 @@ from django.contrib.auth import authenticate, login |
|
|
|
from django.views.decorators.csrf import csrf_exempt |
|
|
|
|
|
|
|
from rest_framework.renderers import JSONRenderer |
|
|
|
from machines.serializers import FullInterfaceSerializer, InterfaceSerializer, TypeSerializer, DomainSerializer, TextSerializer, MxSerializer, ExtensionSerializer, ServiceServersSerializer, NsSerializer, OuverturePortsSerializer |
|
|
|
from machines.serializers import ( FullInterfaceSerializer, |
|
|
|
InterfaceSerializer, |
|
|
|
TypeSerializer, |
|
|
|
DomainSerializer, |
|
|
|
TextSerializer, |
|
|
|
MxSerializer, |
|
|
|
ExtensionSerializer, |
|
|
|
ServiceServersSerializer, |
|
|
|
NsSerializer, |
|
|
|
OuverturePortsSerializer |
|
|
|
) |
|
|
|
from reversion import revisions as reversion |
|
|
|
from reversion.models import Version |
|
|
|
|
|
|
|
import re |
|
|
|
from .forms import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, MachineTypeForm, DelMachineTypeForm, ExtensionForm, DelExtensionForm, BaseEditInterfaceForm, BaseEditMachineForm |
|
|
|
from .forms import EditIpTypeForm, IpTypeForm, DelIpTypeForm, DomainForm, AliasForm, DelAliasForm, NsForm, DelNsForm, TextForm, DelTextForm, MxForm, DelMxForm, VlanForm, DelVlanForm, ServiceForm, DelServiceForm, NasForm, DelNasForm |
|
|
|
from .forms import ( |
|
|
|
NewMachineForm, |
|
|
|
EditMachineForm, |
|
|
|
EditInterfaceForm, |
|
|
|
AddInterfaceForm, |
|
|
|
MachineTypeForm, |
|
|
|
DelMachineTypeForm, |
|
|
|
ExtensionForm, |
|
|
|
DelExtensionForm, |
|
|
|
BaseEditInterfaceForm, |
|
|
|
BaseEditMachineForm |
|
|
|
) |
|
|
|
from .forms import ( |
|
|
|
EditIpTypeForm, |
|
|
|
IpTypeForm, |
|
|
|
DelIpTypeForm, |
|
|
|
DomainForm, |
|
|
|
AliasForm, |
|
|
|
DelAliasForm, |
|
|
|
NsForm, |
|
|
|
DelNsForm, |
|
|
|
TextForm, |
|
|
|
DelTextForm, |
|
|
|
MxForm, |
|
|
|
DelMxForm, |
|
|
|
VlanForm, |
|
|
|
DelVlanForm, |
|
|
|
ServiceForm, |
|
|
|
DelServiceForm, |
|
|
|
NasForm, |
|
|
|
DelNasForm |
|
|
|
) |
|
|
|
from .forms import EditOuverturePortListForm, EditOuverturePortConfigForm |
|
|
|
from .models import IpType, Machine, Interface, IpList, MachineType, Extension, Mx, Ns, Domain, Service, Service_link, Vlan, Nas, Text, OuverturePortList, OuverturePort |
|
|
|
from .models import ( |
|
|
|
IpType, |
|
|
|
Machine, |
|
|
|
Interface, |
|
|
|
IpList, |
|
|
|
MachineType, |
|
|
|
Extension, |
|
|
|
Mx, |
|
|
|
Ns, |
|
|
|
Domain, |
|
|
|
Service, |
|
|
|
Service_link, |
|
|
|
Vlan, |
|
|
|
Nas, |
|
|
|
Text, |
|
|
|
OuverturePortList, |
|
|
|
OuverturePort |
|
|
|
) |
|
|
|
from users.models import User |
|
|
|
from users.models import all_has_access |
|
|
|
from preferences.models import GeneralOption, OptionalMachine |
|
|
|
from .templatetags.bootstrap_form_typeahead import hidden_id, input_id |
|
|
|
|
|
|
|
def filter_active_interfaces(q): |
|
|
|
"""Filtre les machines autorisées à sortir sur internet dans une requête""" |
|
|
|
return q.filter( |
|
|
|
machine__in=Machine.objects.filter( |
|
|
|
user__in=all_has_access() |
|
|
|
).filter(active=True)) \ |
|
|
|
.select_related('domain') \ |
|
|
|
.select_related('machine') \ |
|
|
|
.select_related('type') \ |
|
|
|
.select_related('ipv4') \ |
|
|
|
.select_related('domain__extension') \ |
|
|
|
.select_related('ipv4__ip_type').distinct() |
|
|
|
|
|
|
|
def all_active_interfaces(): |
|
|
|
"""Renvoie l'ensemble des machines autorisées à sortir sur internet """ |
|
|
|
return Interface.objects.filter(machine__in=Machine.objects.filter(user__in=all_has_access()).filter(active=True)).select_related('domain').select_related('machine').select_related('type').select_related('ipv4').select_related('domain__extension').select_related('ipv4__ip_type').distinct() |
|
|
|
return filter_active_interfaces(Interface.objects) |
|
|
|
|
|
|
|
def all_active_assigned_interfaces(): |
|
|
|
""" Renvoie l'ensemble des machines qui ont une ipv4 assignées et disposant de l'accès internet""" |
|
|
|
""" |
|
|
|
Renvoie l'ensemble des machines qui ont une ipv4 assignées et disposant de |
|
|
|
l'accès internet |
|
|
|
""" |
|
|
|
return all_active_interfaces().filter(ipv4__isnull=False) |
|
|
|
|
|
|
|
def all_active_interfaces_count(): |
|
|
|
""" Version light seulement pour compter""" |
|
|
|
return Interface.objects.filter(machine__in=Machine.objects.filter(user__in=all_has_access()).filter(active=True)) |
|
|
|
return Interface.objects.filter( |
|
|
|
machine__in=Machine.objects.filter(user__in=all_has_access())\ |
|
|
|
.filter(active=True) |
|
|
|
) |
|
|
|
|
|
|
|
def all_active_assigned_interfaces_count(): |
|
|
|
""" Version light seulement pour compter""" |
|
|
|
@ -92,7 +168,8 @@ def generate_ipv4_choices( form ) : |
|
|
|
choices = '{"":[{key:"",value:"Choisissez d\'abord un type de machine"},' |
|
|
|
mtype_id = -1 |
|
|
|
|
|
|
|
for ip in f_ipv4.queryset.annotate(mtype_id=F('ip_type__machinetype__id')).order_by('mtype_id', 'id') : |
|
|
|
for ip in f_ipv4.queryset.annotate(mtype_id=F('ip_type__machinetype__id'))\ |
|
|
|
.order_by('mtype_id', 'id') : |
|
|
|
if mtype_id != ip.mtype_id : |
|
|
|
mtype_id = ip.mtype_id |
|
|
|
used_mtype_id.append(mtype_id) |
|
|
|
@ -159,8 +236,8 @@ def generate_ipv4_bft_param( form, is_type_tt ): |
|
|
|
|
|
|
|
@login_required |
|
|
|
def new_machine(request, userid): |
|
|
|
""" Fonction de creation d'une machine. Cree l'objet machine, le sous objet interface et l'objet domain |
|
|
|
à partir de model forms. |
|
|
|
""" 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é""" |
|
|
|
try: |
|
|
|
user = User.objects.get(pk=userid) |
|
|
|
@ -171,7 +248,9 @@ def new_machine(request, userid): |
|
|
|
max_lambdauser_interfaces = options.max_lambdauser_interfaces |
|
|
|
if not request.user.has_perms(('cableur',)): |
|
|
|
if user != request.user: |
|
|
|
messages.error(request, "Vous ne pouvez pas ajouter une machine à un autre user que vous sans droit") |
|
|
|
messages.error( |
|
|
|
request, |
|
|
|
"Vous ne pouvez pas ajouter une machine à un autre user que vous sans droit") |
|
|
|
return redirect("/users/profil/" + str(request.user.id)) |
|
|
|
if user.user_interfaces().count() >= max_lambdauser_interfaces: |
|
|
|
messages.error(request, "Vous avez atteint le maximum d'interfaces autorisées que vous pouvez créer vous même (%s) " % max_lambdauser_interfaces) |
|
|
|
@ -1205,14 +1284,14 @@ def service_servers(request): |
|
|
|
@permission_required('serveur') |
|
|
|
def ouverture_ports(request): |
|
|
|
r = {'ipv4':{}, 'ipv6':{}} |
|
|
|
for o in OuverturePortList.objects.all().prefetch_related('ouvertureport_set').prefetch_related('interface_set'): |
|
|
|
for o in OuverturePortList.objects.all().prefetch_related('ouvertureport_set').prefetch_related('interface_set', 'interface_set__ipv4'): |
|
|
|
pl = { |
|
|
|
"tcp_in":set(map(str,o.tcp_ports_in())), |
|
|
|
"tcp_out":set(map(str,o.tcp_ports_out())), |
|
|
|
"udp_in":set(map(str,o.udp_ports_in())), |
|
|
|
"udp_out":set(map(str,o.udp_ports_out())), |
|
|
|
"tcp_in":set(map(str,o.ouvertureport_set.filter(protocole=OuverturePort.TCP, io=OuverturePort.IN))), |
|
|
|
"tcp_out":set(map(str,o.ouvertureport_set.filter(protocole=OuverturePort.TCP, io=OuverturePort.OUT))), |
|
|
|
"udp_in":set(map(str,o.ouvertureport_set.filter(protocole=OuverturePort.UDP, io=OuverturePort.IN))), |
|
|
|
"udp_out":set(map(str,o.ouvertureport_set.filter(protocole=OuverturePort.UDP, io=OuverturePort.OUT))), |
|
|
|
} |
|
|
|
for i in o.interface_set.filter(machine__in=Machine.objects.filter(user__in=all_has_access()).filter(active=True)).select_related('domain').select_related('machine').select_related('type').select_related('ipv4').select_related('domain__extension').select_related('ipv4__ip_type').distinct(): |
|
|
|
for i in filter_active_interfaces(o.interface_set): |
|
|
|
if i.may_have_port_open(): |
|
|
|
d = r['ipv4'].get(i.ipv4.ipv4, {}) |
|
|
|
d["tcp_in"] = d.get("tcp_in",set()).union(pl["tcp_in"]) |
|
|
|
|