mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-25 22:22:26 +00:00
Renomage des tables, ecriture des admin et fioritures
This commit is contained in:
parent
5f511eaf3f
commit
c459d3f45c
8 changed files with 60 additions and 98 deletions
|
@ -26,7 +26,9 @@ from __future__ import unicode_literals
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from reversion.admin import VersionAdmin
|
from reversion.admin import VersionAdmin
|
||||||
|
|
||||||
from .models import IpType, Machine, MachineType, Domain, IpList, Interface, Extension, Mx, Ns, Vlan, Text, Nas, Service
|
from .models import IpType, Machine, MachineType, Domain, IpList, Interface
|
||||||
|
from .models import Extension, Mx, Ns, Vlan, Text, Nas, Service, OuverturePort
|
||||||
|
from .models import OuverturePortList
|
||||||
|
|
||||||
class MachineAdmin(VersionAdmin):
|
class MachineAdmin(VersionAdmin):
|
||||||
pass
|
pass
|
||||||
|
@ -58,6 +60,12 @@ class NasAdmin(VersionAdmin):
|
||||||
class IpListAdmin(VersionAdmin):
|
class IpListAdmin(VersionAdmin):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class OuverturePortAdmin(VersionAdmin):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class OuverturePortListAdmin(VersionAdmin):
|
||||||
|
pass
|
||||||
|
|
||||||
class InterfaceAdmin(VersionAdmin):
|
class InterfaceAdmin(VersionAdmin):
|
||||||
list_display = ('machine','type','mac_address','ipv4','details')
|
list_display = ('machine','type','mac_address','ipv4','details')
|
||||||
|
|
||||||
|
@ -80,3 +88,7 @@ admin.site.register(Domain, DomainAdmin)
|
||||||
admin.site.register(Service, ServiceAdmin)
|
admin.site.register(Service, ServiceAdmin)
|
||||||
admin.site.register(Vlan, VlanAdmin)
|
admin.site.register(Vlan, VlanAdmin)
|
||||||
admin.site.register(Nas, NasAdmin)
|
admin.site.register(Nas, NasAdmin)
|
||||||
|
admin.site.register(OuverturePort, OuverturePortAdmin)
|
||||||
|
admin.site.register(OuverturePortList, OuverturePortListAdmin)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ import re
|
||||||
|
|
||||||
from django.forms import ModelForm, Form, ValidationError
|
from django.forms import ModelForm, Form, ValidationError
|
||||||
from django import forms
|
from django import forms
|
||||||
from .models import Domain, Machine, Interface, IpList, MachineType, Extension, Mx, Text, Ns, Service, Vlan, Nas, IpType, PortList, Port
|
from .models import Domain, Machine, Interface, IpList, MachineType, Extension, Mx, Text, Ns, Service, Vlan, Nas, IpType, OuverturePortList, OuverturePort
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.core.validators import validate_email
|
from django.core.validators import validate_email
|
||||||
|
|
||||||
|
@ -232,13 +232,13 @@ class VlanForm(ModelForm):
|
||||||
class DelVlanForm(Form):
|
class DelVlanForm(Form):
|
||||||
vlan = forms.ModelMultipleChoiceField(queryset=Vlan.objects.all(), label="Vlan actuels", widget=forms.CheckboxSelectMultiple)
|
vlan = forms.ModelMultipleChoiceField(queryset=Vlan.objects.all(), label="Vlan actuels", widget=forms.CheckboxSelectMultiple)
|
||||||
|
|
||||||
class EditPortConfigForm(ModelForm):
|
class EditOuverturePortConfigForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Interface
|
model = Interface
|
||||||
fields = ['port_lists']
|
fields = ['port_lists']
|
||||||
|
|
||||||
class EditPortListForm(ModelForm):
|
class EditOuverturePortListForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PortList
|
model = OuverturePortList
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by Django 1.10.7 on 2017-09-28 15:11
|
# Generated by Django 1.10.7 on 2017-10-02 01:50
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
@ -14,24 +14,30 @@ class Migration(migrations.Migration):
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Port',
|
name='OuverturePort',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
('begin', models.IntegerField()),
|
('begin', models.IntegerField()),
|
||||||
('end', models.IntegerField()),
|
('end', models.IntegerField()),
|
||||||
|
('protocole', models.CharField(choices=[('T', 'TCP'), ('U', 'UDP')], default='T', max_length=1)),
|
||||||
|
('io', models.CharField(choices=[('I', 'IN'), ('O', 'OUT')], default='O', max_length=1)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='PortList',
|
name='OuverturePortList',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
('name', models.CharField(help_text='Nom de la configuration des ports.', max_length=255)),
|
('name', models.CharField(help_text='Nom de la configuration des ports.', max_length=255)),
|
||||||
('interfaces', models.ManyToManyField(to='machines.Interface')),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='port',
|
model_name='ouvertureport',
|
||||||
name='port_list',
|
name='port_list',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='machines.PortList'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='machines.OuverturePortList'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='interface',
|
||||||
|
name='port_lists',
|
||||||
|
field=models.ManyToManyField(blank=True, to='machines.OuverturePortList'),
|
||||||
),
|
),
|
||||||
]
|
]
|
|
@ -1,20 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.10.7 on 2017-09-28 16:03
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('machines', '0058_auto_20170928_1711'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='port',
|
|
||||||
name='protocole',
|
|
||||||
field=models.CharField(choices=[('T', 'TCP'), ('U', 'UDP')], default='T', max_length=1),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,20 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.10.7 on 2017-10-01 09:30
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('machines', '0059_port_protocole'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='port',
|
|
||||||
name='io',
|
|
||||||
field=models.CharField(choices=[('I', 'IN'), ('O', 'OUT')], default='O', max_length=1),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,24 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.10.7 on 2017-10-01 15:27
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('machines', '0060_port_io'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.RemoveField(
|
|
||||||
model_name='portlist',
|
|
||||||
name='interfaces',
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='interface',
|
|
||||||
name='port_lists',
|
|
||||||
field=models.ManyToManyField(to='machines.PortList'),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -223,7 +223,7 @@ class Interface(models.Model):
|
||||||
machine = models.ForeignKey('Machine', on_delete=models.CASCADE)
|
machine = models.ForeignKey('Machine', on_delete=models.CASCADE)
|
||||||
type = models.ForeignKey('MachineType', on_delete=models.PROTECT)
|
type = models.ForeignKey('MachineType', on_delete=models.PROTECT)
|
||||||
details = models.CharField(max_length=255, blank=True)
|
details = models.CharField(max_length=255, blank=True)
|
||||||
port_lists = models.ManyToManyField('PortList', blank=True)
|
port_lists = models.ManyToManyField('OuverturePortList', blank=True)
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def is_active(self):
|
def is_active(self):
|
||||||
|
@ -280,8 +280,13 @@ class Interface(models.Model):
|
||||||
return str(domain)
|
return str(domain)
|
||||||
|
|
||||||
def has_private_ip(self):
|
def has_private_ip(self):
|
||||||
return IPAddress(str(self.ipv4)).is_private()
|
if hasattr(self, 'ipv4'):
|
||||||
|
return IPAddress(str(self.ipv4)).is_private()
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def may_have_port_open(self):
|
||||||
|
return hasattr(self, 'ipv4') and self.has_private_ip()
|
||||||
|
|
||||||
class Domain(models.Model):
|
class Domain(models.Model):
|
||||||
PRETTY_NAME = "Domaine dns"
|
PRETTY_NAME = "Domaine dns"
|
||||||
|
@ -412,7 +417,7 @@ class Service_link(models.Model):
|
||||||
return str(self.server) + " " + str(self.service)
|
return str(self.server) + " " + str(self.service)
|
||||||
|
|
||||||
|
|
||||||
class PortList(models.Model):
|
class OuverturePortList(models.Model):
|
||||||
"""Liste des ports ouverts sur une interface."""
|
"""Liste des ports ouverts sur une interface."""
|
||||||
name = models.CharField(help_text="Nom de la configuration des ports.", max_length=255)
|
name = models.CharField(help_text="Nom de la configuration des ports.", max_length=255)
|
||||||
|
|
||||||
|
@ -420,19 +425,19 @@ class PortList(models.Model):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
def tcp_ports_in(self):
|
def tcp_ports_in(self):
|
||||||
return self.port_set.filter(protocole=Port.TCP, io=Port.IN)
|
return self.ouvertureport_set.filter(protocole=OuverturePort.TCP, io=OuverturePort.IN)
|
||||||
|
|
||||||
def udp_ports_in(self):
|
def udp_ports_in(self):
|
||||||
return self.port_set.filter(protocole=Port.UDP, io=Port.IN)
|
return self.ouvertureport_set.filter(protocole=OuverturePort.UDP, io=OuverturePort.IN)
|
||||||
|
|
||||||
def tcp_ports_out(self):
|
def tcp_ports_out(self):
|
||||||
return self.port_set.filter(protocole=Port.TCP, io=Port.OUT)
|
return self.ouvertureport_set.filter(protocole=OuverturePort.TCP, io=OuverturePort.OUT)
|
||||||
|
|
||||||
def udp_ports_out(self):
|
def udp_ports_out(self):
|
||||||
return self.port_set.filter(protocole=Port.UDP, io=Port.OUT)
|
return self.ouvertureport_set.filter(protocole=OuverturePort.UDP, io=OuverturePort.OUT)
|
||||||
|
|
||||||
|
|
||||||
class Port(models.Model):
|
class OuverturePort(models.Model):
|
||||||
"""
|
"""
|
||||||
Représente un simple port ou une plage de ports.
|
Représente un simple port ou une plage de ports.
|
||||||
|
|
||||||
|
@ -445,7 +450,7 @@ class Port(models.Model):
|
||||||
OUT = 'O'
|
OUT = 'O'
|
||||||
begin = models.IntegerField()
|
begin = models.IntegerField()
|
||||||
end = models.IntegerField()
|
end = models.IntegerField()
|
||||||
port_list = models.ForeignKey('PortList', on_delete=models.CASCADE)
|
port_list = models.ForeignKey('OuverturePortList', on_delete=models.CASCADE)
|
||||||
protocole = models.CharField(
|
protocole = models.CharField(
|
||||||
max_length=1,
|
max_length=1,
|
||||||
choices=(
|
choices=(
|
||||||
|
@ -492,6 +497,9 @@ def interface_post_save(sender, **kwargs):
|
||||||
interface = kwargs['instance']
|
interface = kwargs['instance']
|
||||||
user = interface.machine.user
|
user = interface.machine.user
|
||||||
user.ldap_sync(base=False, access_refresh=False, mac_refresh=True)
|
user.ldap_sync(base=False, access_refresh=False, mac_refresh=True)
|
||||||
|
if interface.may_have_port_open() and interface.port_lists.all():
|
||||||
|
interface.port_lists.clear()
|
||||||
|
# Regen services
|
||||||
regen('dhcp')
|
regen('dhcp')
|
||||||
regen('mac_ip_list')
|
regen('mac_ip_list')
|
||||||
|
|
||||||
|
|
|
@ -48,8 +48,8 @@ from reversion.models import Version
|
||||||
import re
|
import re
|
||||||
from .forms import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, MachineTypeForm, DelMachineTypeForm, ExtensionForm, DelExtensionForm, BaseEditInterfaceForm, BaseEditMachineForm
|
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 EditIpTypeForm, IpTypeForm, DelIpTypeForm, DomainForm, AliasForm, DelAliasForm, NsForm, DelNsForm, TextForm, DelTextForm, MxForm, DelMxForm, VlanForm, DelVlanForm, ServiceForm, DelServiceForm, NasForm, DelNasForm
|
||||||
from .forms import EditPortListForm, EditPortConfigForm
|
from .forms import EditOuverturePortListForm, EditOuverturePortConfigForm
|
||||||
from .models import IpType, Machine, Interface, IpList, MachineType, Extension, Mx, Ns, Domain, Service, Service_link, Vlan, Nas, Text, PortList, Port
|
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 User
|
||||||
from users.models import all_has_access
|
from users.models import all_has_access
|
||||||
from preferences.models import GeneralOption, OptionalMachine
|
from preferences.models import GeneralOption, OptionalMachine
|
||||||
|
@ -916,20 +916,20 @@ def history(request, object, id):
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('cableur')
|
@permission_required('cableur')
|
||||||
def index_portlist(request):
|
def index_portlist(request):
|
||||||
port_list = PortList.objects.all().order_by('name')
|
port_list = OuverturePortList.objects.all().order_by('name')
|
||||||
return render(request, "machines/index_portlist.html", {'port_list':port_list})
|
return render(request, "machines/index_portlist.html", {'port_list':port_list})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('bureau')
|
@permission_required('bureau')
|
||||||
def edit_portlist(request, pk):
|
def edit_portlist(request, pk):
|
||||||
try:
|
try:
|
||||||
port_list_instance = PortList.objects.get(pk=pk)
|
port_list_instance = OuverturePortList.objects.get(pk=pk)
|
||||||
except PortList.DoesNotExist:
|
except OuverturePortList.DoesNotExist:
|
||||||
messages.error(request, "Liste de ports inexistante")
|
messages.error(request, "Liste de ports inexistante")
|
||||||
return redirect("/machines/index_portlist/")
|
return redirect("/machines/index_portlist/")
|
||||||
port_list = EditPortListForm(request.POST or None, instance=port_list_instance)
|
port_list = EditOuverturePortListForm(request.POST or None, instance=port_list_instance)
|
||||||
port_formset = modelformset_factory(
|
port_formset = modelformset_factory(
|
||||||
Port,
|
OuverturePort,
|
||||||
fields=('begin','end','protocole','io'),
|
fields=('begin','end','protocole','io'),
|
||||||
extra=0,
|
extra=0,
|
||||||
can_delete=True,
|
can_delete=True,
|
||||||
|
@ -952,8 +952,8 @@ def edit_portlist(request, pk):
|
||||||
@permission_required('bureau')
|
@permission_required('bureau')
|
||||||
def del_portlist(request, pk):
|
def del_portlist(request, pk):
|
||||||
try:
|
try:
|
||||||
port_list_instance = PortList.objects.get(pk=pk)
|
port_list_instance = OuverturePortList.objects.get(pk=pk)
|
||||||
except PortList.DoesNotExist:
|
except OuverturePortList.DoesNotExist:
|
||||||
messages.error(request, "Liste de ports inexistante")
|
messages.error(request, "Liste de ports inexistante")
|
||||||
return redirect("/machines/index_portlist/")
|
return redirect("/machines/index_portlist/")
|
||||||
if port_list_instance.interface_set.all():
|
if port_list_instance.interface_set.all():
|
||||||
|
@ -966,15 +966,15 @@ def del_portlist(request, pk):
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('bureau')
|
@permission_required('bureau')
|
||||||
def add_portlist(request):
|
def add_portlist(request):
|
||||||
port_list = EditPortListForm(request.POST or None)
|
port_list = EditOuverturePortListForm(request.POST or None)
|
||||||
port_formset = modelformset_factory(
|
port_formset = modelformset_factory(
|
||||||
Port,
|
OuverturePort,
|
||||||
fields=('begin','end','protocole','io'),
|
fields=('begin','end','protocole','io'),
|
||||||
extra=0,
|
extra=0,
|
||||||
can_delete=True,
|
can_delete=True,
|
||||||
min_num=1,
|
min_num=1,
|
||||||
validate_min=True,
|
validate_min=True,
|
||||||
)(request.POST or None, queryset=Port.objects.none())
|
)(request.POST or None, queryset=OuverturePort.objects.none())
|
||||||
if port_list.is_valid() and port_formset.is_valid():
|
if port_list.is_valid() and port_formset.is_valid():
|
||||||
pl = port_list.save()
|
pl = port_list.save()
|
||||||
instances = port_formset.save(commit=False)
|
instances = port_formset.save(commit=False)
|
||||||
|
@ -986,7 +986,7 @@ def add_portlist(request):
|
||||||
messages.success(request, "Liste de ports créée")
|
messages.success(request, "Liste de ports créée")
|
||||||
return redirect("/machines/index_portlist/")
|
return redirect("/machines/index_portlist/")
|
||||||
return form({'port_list' : port_list, 'ports' : port_formset}, 'machines/edit_portlist.html', request)
|
return form({'port_list' : port_list, 'ports' : port_formset}, 'machines/edit_portlist.html', request)
|
||||||
port_list = EditPortListForm(request.POST or None)
|
port_list = EditOuverturePortListForm(request.POST or None)
|
||||||
if port_list.is_valid():
|
if port_list.is_valid():
|
||||||
port_list.save()
|
port_list.save()
|
||||||
messages.success(request, "Liste de ports créée")
|
messages.success(request, "Liste de ports créée")
|
||||||
|
@ -1001,7 +1001,7 @@ def configure_ports(request, pk):
|
||||||
except Interface.DoesNotExist:
|
except Interface.DoesNotExist:
|
||||||
messages.error(request, u"Interface inexistante" )
|
messages.error(request, u"Interface inexistante" )
|
||||||
return redirect("/machines")
|
return redirect("/machines")
|
||||||
interface = EditPortConfigForm(request.POST or None, instance=interface_instance)
|
interface = EditOuverturePortConfigForm(request.POST or None, instance=interface_instance)
|
||||||
if interface.is_valid():
|
if interface.is_valid():
|
||||||
interface.save()
|
interface.save()
|
||||||
messages.success(request, "Configuration des ports mise à jour.")
|
messages.success(request, "Configuration des ports mise à jour.")
|
||||||
|
|
Loading…
Reference in a new issue