mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-09-12 01:03:09 +00:00
Autoformat code
This commit is contained in:
parent
1e9a4b3d32
commit
48d5ab108c
7 changed files with 169 additions and 154 deletions
|
@ -41,4 +41,3 @@ def can_view(user):
|
||||||
can = user.has_module_perms('machines')
|
can = user.has_module_perms('machines')
|
||||||
return can, None if can else _("You don't have the right to view this"
|
return can, None if can else _("You don't have the right to view this"
|
||||||
" application.")
|
" application.")
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@ 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
|
|
||||||
from .models import (
|
from .models import (
|
||||||
Extension,
|
Extension,
|
||||||
SOA,
|
SOA,
|
||||||
|
@ -47,6 +46,7 @@ from .models import (
|
||||||
Ipv6List,
|
Ipv6List,
|
||||||
OuverturePortList,
|
OuverturePortList,
|
||||||
)
|
)
|
||||||
|
from .models import IpType, Machine, MachineType, Domain, IpList, Interface
|
||||||
|
|
||||||
|
|
||||||
class MachineAdmin(VersionAdmin):
|
class MachineAdmin(VersionAdmin):
|
||||||
|
@ -98,6 +98,7 @@ class TxtAdmin(VersionAdmin):
|
||||||
""" Admin view of a TXT object """
|
""" Admin view of a TXT object """
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class DNameAdmin(VersionAdmin):
|
class DNameAdmin(VersionAdmin):
|
||||||
""" Admin view of a DName object """
|
""" Admin view of a DName object """
|
||||||
pass
|
pass
|
||||||
|
@ -147,12 +148,12 @@ class ServiceAdmin(VersionAdmin):
|
||||||
""" Admin view of a ServiceAdmin object """
|
""" Admin view of a ServiceAdmin object """
|
||||||
list_display = ('service_type', 'min_time_regen', 'regular_time_regen')
|
list_display = ('service_type', 'min_time_regen', 'regular_time_regen')
|
||||||
|
|
||||||
|
|
||||||
class RoleAdmin(VersionAdmin):
|
class RoleAdmin(VersionAdmin):
|
||||||
""" Admin view of a RoleAdmin object """
|
""" Admin view of a RoleAdmin object """
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(Machine, MachineAdmin)
|
admin.site.register(Machine, MachineAdmin)
|
||||||
admin.site.register(MachineType, MachineTypeAdmin)
|
admin.site.register(MachineType, MachineTypeAdmin)
|
||||||
admin.site.register(IpType, IpTypeAdmin)
|
admin.site.register(IpType, IpTypeAdmin)
|
||||||
|
|
|
@ -35,13 +35,12 @@ Formulaires d'ajout, edition et suppressions de :
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.forms import ModelForm, Form
|
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from django.forms import ModelForm, Form
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from re2o.field_permissions import FieldPermissionFormMixin
|
from re2o.field_permissions import FieldPermissionFormMixin
|
||||||
from re2o.mixins import FormRevMixin
|
from re2o.mixins import FormRevMixin
|
||||||
|
|
||||||
from .models import (
|
from .models import (
|
||||||
Domain,
|
Domain,
|
||||||
Machine,
|
Machine,
|
||||||
|
@ -68,6 +67,7 @@ from .models import (
|
||||||
|
|
||||||
class EditMachineForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
|
class EditMachineForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
|
||||||
"""Formulaire d'édition d'une machine"""
|
"""Formulaire d'édition d'une machine"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Machine
|
model = Machine
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -80,12 +80,14 @@ class EditMachineForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
|
||||||
|
|
||||||
class NewMachineForm(EditMachineForm):
|
class NewMachineForm(EditMachineForm):
|
||||||
"""Creation d'une machine, ne renseigne que le nom"""
|
"""Creation d'une machine, ne renseigne que le nom"""
|
||||||
|
|
||||||
class Meta(EditMachineForm.Meta):
|
class Meta(EditMachineForm.Meta):
|
||||||
fields = ['name']
|
fields = ['name']
|
||||||
|
|
||||||
|
|
||||||
class EditInterfaceForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
|
class EditInterfaceForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
|
||||||
"""Edition d'une interface. Edition complète"""
|
"""Edition d'une interface. Edition complète"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Interface
|
model = Interface
|
||||||
fields = ['machine', 'type', 'ipv4', 'mac_address', 'details']
|
fields = ['machine', 'type', 'ipv4', 'mac_address', 'details']
|
||||||
|
@ -116,7 +118,7 @@ class EditInterfaceForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
|
||||||
interface=self.instance
|
interface=self.instance
|
||||||
)
|
)
|
||||||
if "machine" in self.fields:
|
if "machine" in self.fields:
|
||||||
self.fields['machine'].queryset = Machine.objects.all()\
|
self.fields['machine'].queryset = Machine.objects.all() \
|
||||||
.select_related('user')
|
.select_related('user')
|
||||||
can_use_all_machinetype, _reason = MachineType.can_use_all(user)
|
can_use_all_machinetype, _reason = MachineType.can_use_all(user)
|
||||||
if not can_use_all_machinetype:
|
if not can_use_all_machinetype:
|
||||||
|
@ -128,12 +130,14 @@ class EditInterfaceForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
|
||||||
class AddInterfaceForm(EditInterfaceForm):
|
class AddInterfaceForm(EditInterfaceForm):
|
||||||
"""Ajout d'une interface à une machine. En fonction des droits,
|
"""Ajout d'une interface à une machine. En fonction des droits,
|
||||||
affiche ou non l'ensemble des ip disponibles"""
|
affiche ou non l'ensemble des ip disponibles"""
|
||||||
|
|
||||||
class Meta(EditInterfaceForm.Meta):
|
class Meta(EditInterfaceForm.Meta):
|
||||||
fields = ['type', 'ipv4', 'mac_address', 'details']
|
fields = ['type', 'ipv4', 'mac_address', 'details']
|
||||||
|
|
||||||
|
|
||||||
class AliasForm(FormRevMixin, ModelForm):
|
class AliasForm(FormRevMixin, ModelForm):
|
||||||
"""Ajout d'un alias (et edition), CNAME, contenant nom et extension"""
|
"""Ajout d'un alias (et edition), CNAME, contenant nom et extension"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Domain
|
model = Domain
|
||||||
fields = ['name', 'extension']
|
fields = ['name', 'extension']
|
||||||
|
@ -151,6 +155,7 @@ class AliasForm(FormRevMixin, ModelForm):
|
||||||
|
|
||||||
class DomainForm(FormRevMixin, ModelForm):
|
class DomainForm(FormRevMixin, ModelForm):
|
||||||
"""Ajout et edition d'un enregistrement de nom, relié à interface"""
|
"""Ajout et edition d'un enregistrement de nom, relié à interface"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Domain
|
model = Domain
|
||||||
fields = ['name']
|
fields = ['name']
|
||||||
|
@ -183,6 +188,7 @@ class DelAliasForm(FormRevMixin, Form):
|
||||||
|
|
||||||
class MachineTypeForm(FormRevMixin, ModelForm):
|
class MachineTypeForm(FormRevMixin, ModelForm):
|
||||||
"""Ajout et edition d'un machinetype, relié à un iptype"""
|
"""Ajout et edition d'un machinetype, relié à un iptype"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = MachineType
|
model = MachineType
|
||||||
fields = ['type', 'ip_type']
|
fields = ['type', 'ip_type']
|
||||||
|
@ -214,6 +220,7 @@ class DelMachineTypeForm(FormRevMixin, Form):
|
||||||
class IpTypeForm(FormRevMixin, ModelForm):
|
class IpTypeForm(FormRevMixin, ModelForm):
|
||||||
"""Formulaire d'ajout d'un iptype. Pas d'edition de l'ip de start et de
|
"""Formulaire d'ajout d'un iptype. Pas d'edition de l'ip de start et de
|
||||||
stop après creation"""
|
stop après creation"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = IpType
|
model = IpType
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -227,6 +234,7 @@ class IpTypeForm(FormRevMixin, ModelForm):
|
||||||
class EditIpTypeForm(IpTypeForm):
|
class EditIpTypeForm(IpTypeForm):
|
||||||
"""Edition d'un iptype. Pas d'edition du rangev4 possible, car il faudrait
|
"""Edition d'un iptype. Pas d'edition du rangev4 possible, car il faudrait
|
||||||
synchroniser les objets iplist"""
|
synchroniser les objets iplist"""
|
||||||
|
|
||||||
class Meta(IpTypeForm.Meta):
|
class Meta(IpTypeForm.Meta):
|
||||||
fields = ['extension', 'type', 'need_infra', 'domaine_ip_network', 'domaine_ip_netmask',
|
fields = ['extension', 'type', 'need_infra', 'domaine_ip_network', 'domaine_ip_netmask',
|
||||||
'prefix_v6', 'prefix_v6_length',
|
'prefix_v6', 'prefix_v6_length',
|
||||||
|
@ -253,6 +261,7 @@ class DelIpTypeForm(FormRevMixin, Form):
|
||||||
|
|
||||||
class ExtensionForm(FormRevMixin, ModelForm):
|
class ExtensionForm(FormRevMixin, ModelForm):
|
||||||
"""Formulaire d'ajout et edition d'une extension"""
|
"""Formulaire d'ajout et edition d'une extension"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Extension
|
model = Extension
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -285,6 +294,7 @@ class DelExtensionForm(FormRevMixin, Form):
|
||||||
|
|
||||||
class Ipv6ListForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
|
class Ipv6ListForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
|
||||||
"""Gestion des ipv6 d'une machine"""
|
"""Gestion des ipv6 d'une machine"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Ipv6List
|
model = Ipv6List
|
||||||
fields = ['ipv6', 'slaac_ip']
|
fields = ['ipv6', 'slaac_ip']
|
||||||
|
@ -296,6 +306,7 @@ class Ipv6ListForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
|
||||||
|
|
||||||
class SOAForm(FormRevMixin, ModelForm):
|
class SOAForm(FormRevMixin, ModelForm):
|
||||||
"""Ajout et edition d'un SOA"""
|
"""Ajout et edition d'un SOA"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SOA
|
model = SOA
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -324,6 +335,7 @@ class DelSOAForm(FormRevMixin, Form):
|
||||||
|
|
||||||
class MxForm(FormRevMixin, ModelForm):
|
class MxForm(FormRevMixin, ModelForm):
|
||||||
"""Ajout et edition d'un MX"""
|
"""Ajout et edition d'un MX"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Mx
|
model = Mx
|
||||||
fields = ['zone', 'priority', 'name']
|
fields = ['zone', 'priority', 'name']
|
||||||
|
@ -357,6 +369,7 @@ class NsForm(FormRevMixin, ModelForm):
|
||||||
"""Ajout d'un NS pour une zone
|
"""Ajout d'un NS pour une zone
|
||||||
On exclue les CNAME dans les objets domain (interdit par la rfc)
|
On exclue les CNAME dans les objets domain (interdit par la rfc)
|
||||||
donc on prend uniquemet """
|
donc on prend uniquemet """
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Ns
|
model = Ns
|
||||||
fields = ['zone', 'ns']
|
fields = ['zone', 'ns']
|
||||||
|
@ -388,6 +401,7 @@ class DelNsForm(FormRevMixin, Form):
|
||||||
|
|
||||||
class TxtForm(FormRevMixin, ModelForm):
|
class TxtForm(FormRevMixin, ModelForm):
|
||||||
"""Ajout d'un txt pour une zone"""
|
"""Ajout d'un txt pour une zone"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Txt
|
model = Txt
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -416,6 +430,7 @@ class DelTxtForm(FormRevMixin, Form):
|
||||||
|
|
||||||
class DNameForm(FormRevMixin, ModelForm):
|
class DNameForm(FormRevMixin, ModelForm):
|
||||||
"""Add a DNAME entry for a zone"""
|
"""Add a DNAME entry for a zone"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = DName
|
model = DName
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -444,6 +459,7 @@ class DelDNameForm(FormRevMixin, Form):
|
||||||
|
|
||||||
class SrvForm(FormRevMixin, ModelForm):
|
class SrvForm(FormRevMixin, ModelForm):
|
||||||
"""Ajout d'un srv pour une zone"""
|
"""Ajout d'un srv pour une zone"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Srv
|
model = Srv
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -473,6 +489,7 @@ class DelSrvForm(FormRevMixin, Form):
|
||||||
class NasForm(FormRevMixin, ModelForm):
|
class NasForm(FormRevMixin, ModelForm):
|
||||||
"""Ajout d'un type de nas (machine d'authentification,
|
"""Ajout d'un type de nas (machine d'authentification,
|
||||||
swicths, bornes...)"""
|
swicths, bornes...)"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Nas
|
model = Nas
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -501,6 +518,7 @@ class DelNasForm(FormRevMixin, Form):
|
||||||
|
|
||||||
class RoleForm(FormRevMixin, ModelForm):
|
class RoleForm(FormRevMixin, ModelForm):
|
||||||
"""Add and edit role."""
|
"""Add and edit role."""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Role
|
model = Role
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -509,9 +527,9 @@ class RoleForm(FormRevMixin, ModelForm):
|
||||||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||||
super(RoleForm, self).__init__(*args, prefix=prefix, **kwargs)
|
super(RoleForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||||
self.fields['servers'].queryset = (Interface.objects.all()
|
self.fields['servers'].queryset = (Interface.objects.all()
|
||||||
.select_related(
|
.select_related(
|
||||||
'domain__extension'
|
'domain__extension'
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
||||||
class DelRoleForm(FormRevMixin, Form):
|
class DelRoleForm(FormRevMixin, Form):
|
||||||
|
@ -533,6 +551,7 @@ class DelRoleForm(FormRevMixin, Form):
|
||||||
|
|
||||||
class ServiceForm(FormRevMixin, ModelForm):
|
class ServiceForm(FormRevMixin, ModelForm):
|
||||||
"""Ajout et edition d'une classe de service : dns, dhcp, etc"""
|
"""Ajout et edition d'une classe de service : dns, dhcp, etc"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Service
|
model = Service
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -541,9 +560,9 @@ class ServiceForm(FormRevMixin, ModelForm):
|
||||||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||||
super(ServiceForm, self).__init__(*args, prefix=prefix, **kwargs)
|
super(ServiceForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||||
self.fields['servers'].queryset = (Interface.objects.all()
|
self.fields['servers'].queryset = (Interface.objects.all()
|
||||||
.select_related(
|
.select_related(
|
||||||
'domain__extension'
|
'domain__extension'
|
||||||
))
|
))
|
||||||
|
|
||||||
def save(self, commit=True):
|
def save(self, commit=True):
|
||||||
# TODO : None of the parents of ServiceForm use the commit
|
# TODO : None of the parents of ServiceForm use the commit
|
||||||
|
@ -574,6 +593,7 @@ class DelServiceForm(FormRevMixin, Form):
|
||||||
|
|
||||||
class VlanForm(FormRevMixin, ModelForm):
|
class VlanForm(FormRevMixin, ModelForm):
|
||||||
"""Ajout d'un vlan : id, nom"""
|
"""Ajout d'un vlan : id, nom"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Vlan
|
model = Vlan
|
||||||
fields = ['vlan_id', 'name', 'comment']
|
fields = ['vlan_id', 'name', 'comment']
|
||||||
|
@ -614,6 +634,7 @@ class DelVlanForm(FormRevMixin, Form):
|
||||||
class EditOuverturePortConfigForm(FormRevMixin, ModelForm):
|
class EditOuverturePortConfigForm(FormRevMixin, ModelForm):
|
||||||
"""Edition de la liste des profils d'ouverture de ports
|
"""Edition de la liste des profils d'ouverture de ports
|
||||||
pour l'interface"""
|
pour l'interface"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Interface
|
model = Interface
|
||||||
fields = ['port_lists']
|
fields = ['port_lists']
|
||||||
|
@ -630,6 +651,7 @@ class EditOuverturePortConfigForm(FormRevMixin, ModelForm):
|
||||||
class EditOuverturePortListForm(FormRevMixin, ModelForm):
|
class EditOuverturePortListForm(FormRevMixin, ModelForm):
|
||||||
"""Edition de la liste des ports et profils d'ouverture
|
"""Edition de la liste des ports et profils d'ouverture
|
||||||
des ports"""
|
des ports"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = OuverturePortList
|
model = OuverturePortList
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -642,9 +664,10 @@ class EditOuverturePortListForm(FormRevMixin, ModelForm):
|
||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class SshFpForm(FormRevMixin, ModelForm):
|
class SshFpForm(FormRevMixin, ModelForm):
|
||||||
"""Edits a SSHFP record."""
|
"""Edits a SSHFP record."""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SshFp
|
model = SshFp
|
||||||
exclude = ('machine',)
|
exclude = ('machine',)
|
||||||
|
@ -656,4 +679,3 @@ class SshFpForm(FormRevMixin, ModelForm):
|
||||||
prefix=prefix,
|
prefix=prefix,
|
||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -27,32 +27,30 @@ The models definitions for the Machines app
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from datetime import timedelta
|
import base64
|
||||||
|
import hashlib
|
||||||
import re
|
import re
|
||||||
|
from datetime import timedelta
|
||||||
from ipaddress import IPv6Address
|
from ipaddress import IPv6Address
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
from netaddr import mac_bare, EUI, IPSet, IPRange, IPNetwork, IPAddress
|
|
||||||
import hashlib
|
|
||||||
import base64
|
|
||||||
|
|
||||||
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.db.models.signals import post_save, post_delete
|
from django.db.models.signals import post_save, post_delete
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.forms import ValidationError
|
from django.forms import ValidationError
|
||||||
from django.utils.functional import cached_property
|
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.core.validators import MaxValueValidator, MinValueValidator
|
from django.utils.functional import cached_property
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from macaddress.fields import MACAddressField
|
from macaddress.fields import MACAddressField
|
||||||
|
from netaddr import mac_bare, EUI, IPSet, IPRange, IPNetwork, IPAddress
|
||||||
|
|
||||||
|
import preferences.models
|
||||||
|
import users.models
|
||||||
from re2o.field_permissions import FieldPermissionModelMixin
|
from re2o.field_permissions import FieldPermissionModelMixin
|
||||||
from re2o.mixins import AclMixin, RevMixin
|
from re2o.mixins import AclMixin, RevMixin
|
||||||
|
|
||||||
import users.models
|
|
||||||
import preferences.models
|
|
||||||
|
|
||||||
|
|
||||||
class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
""" Class définissant une machine, object parent user, objets fils
|
""" Class définissant une machine, object parent user, objets fils
|
||||||
|
@ -116,7 +114,7 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
:return: True ou False avec la raison de l'échec le cas échéant"""
|
:return: True ou False avec la raison de l'échec le cas échéant"""
|
||||||
if not user_request.has_perm('machines.view_machine'):
|
if not user_request.has_perm('machines.view_machine'):
|
||||||
return False, _("You don't have the right to view all the"
|
return False, _("You don't have the right to view all the"
|
||||||
" machines.")
|
" machines.")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -131,9 +129,9 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
except users.models.User.DoesNotExist:
|
except users.models.User.DoesNotExist:
|
||||||
return False, _("Nonexistent user.")
|
return False, _("Nonexistent user.")
|
||||||
max_lambdauser_interfaces = (preferences.models.OptionalMachine
|
max_lambdauser_interfaces = (preferences.models.OptionalMachine
|
||||||
.get_cached_value(
|
.get_cached_value(
|
||||||
'max_lambdauser_interfaces'
|
'max_lambdauser_interfaces'
|
||||||
))
|
))
|
||||||
if not user_request.has_perm('machines.add_machine'):
|
if not user_request.has_perm('machines.add_machine'):
|
||||||
if not (preferences.models.OptionalMachine
|
if not (preferences.models.OptionalMachine
|
||||||
.get_cached_value('create_machine')):
|
.get_cached_value('create_machine')):
|
||||||
|
@ -180,7 +178,7 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
**kwargs
|
**kwargs
|
||||||
)[0]):
|
)[0]):
|
||||||
return False, _("You don't have the right to delete a machine"
|
return False, _("You don't have the right to delete a machine"
|
||||||
" of another user.")
|
" of another user.")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_view(self, user_request, *_args, **_kwargs):
|
def can_view(self, user_request, *_args, **_kwargs):
|
||||||
|
@ -192,7 +190,7 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
if (not user_request.has_perm('machines.view_machine') and
|
if (not user_request.has_perm('machines.view_machine') and
|
||||||
self.user != user_request):
|
self.user != user_request):
|
||||||
return False, _("You don't have the right to view other machines"
|
return False, _("You don't have the right to view other machines"
|
||||||
" than yours.")
|
" than yours.")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
|
@ -213,14 +211,14 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
machine"""
|
machine"""
|
||||||
return Domain.objects.filter(
|
return Domain.objects.filter(
|
||||||
interface_parent__machine=self
|
interface_parent__machine=self
|
||||||
).values_list('name', flat=True).distinct()
|
).values_list('name', flat=True).distinct()
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def all_complete_names(self):
|
def all_complete_names(self):
|
||||||
"""Renvoie tous les tls complets de la machine"""
|
"""Renvoie tous les tls complets de la machine"""
|
||||||
return [str(domain) for domain in Domain.objects.filter(
|
return [str(domain) for domain in Domain.objects.filter(
|
||||||
Q(cname__interface_parent__machine=self) | Q(interface_parent__machine=self)
|
Q(cname__interface_parent__machine=self) | Q(interface_parent__machine=self)
|
||||||
)]
|
)]
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(Machine, self).__init__(*args, **kwargs)
|
super(Machine, self).__init__(*args, **kwargs)
|
||||||
|
@ -296,8 +294,8 @@ class IpType(RevMixin, AclMixin, models.Model):
|
||||||
help_text=_("Netmask for the domain's IPv4 range")
|
help_text=_("Netmask for the domain's IPv4 range")
|
||||||
)
|
)
|
||||||
reverse_v4 = models.BooleanField(
|
reverse_v4 = models.BooleanField(
|
||||||
default=False,
|
default=False,
|
||||||
help_text=_("Enable reverse DNS for IPv4"),
|
help_text=_("Enable reverse DNS for IPv4"),
|
||||||
)
|
)
|
||||||
prefix_v6 = models.GenericIPAddressField(
|
prefix_v6 = models.GenericIPAddressField(
|
||||||
protocol='IPv6',
|
protocol='IPv6',
|
||||||
|
@ -310,10 +308,10 @@ class IpType(RevMixin, AclMixin, models.Model):
|
||||||
MaxValueValidator(128),
|
MaxValueValidator(128),
|
||||||
MinValueValidator(0)
|
MinValueValidator(0)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
reverse_v6 = models.BooleanField(
|
reverse_v6 = models.BooleanField(
|
||||||
default=False,
|
default=False,
|
||||||
help_text=_("Enable reverse DNS for IPv6"),
|
help_text=_("Enable reverse DNS for IPv6"),
|
||||||
)
|
)
|
||||||
vlan = models.ForeignKey(
|
vlan = models.ForeignKey(
|
||||||
'Vlan',
|
'Vlan',
|
||||||
|
@ -333,7 +331,7 @@ class IpType(RevMixin, AclMixin, models.Model):
|
||||||
("use_all_iptype", _("Can use all IP types")),
|
("use_all_iptype", _("Can use all IP types")),
|
||||||
)
|
)
|
||||||
verbose_name = _("IP type")
|
verbose_name = _("IP type")
|
||||||
verbose_name_plural = ("IP types")
|
verbose_name_plural = "IP types"
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def ip_range(self):
|
def ip_range(self):
|
||||||
|
@ -373,9 +371,9 @@ class IpType(RevMixin, AclMixin, models.Model):
|
||||||
def ip6_set_full_info(self):
|
def ip6_set_full_info(self):
|
||||||
if self.prefix_v6:
|
if self.prefix_v6:
|
||||||
return {
|
return {
|
||||||
'network' : str(self.prefix_v6),
|
'network': str(self.prefix_v6),
|
||||||
'netmask' : 'ffff:ffff:ffff:ffff::',
|
'netmask': 'ffff:ffff:ffff:ffff::',
|
||||||
'netmask_cidr' : str(self.prefix_v6_length),
|
'netmask_cidr': str(self.prefix_v6_length),
|
||||||
'vlan': str(self.vlan),
|
'vlan': str(self.vlan),
|
||||||
'vlan_id': self.vlan.vlan_id
|
'vlan_id': self.vlan.vlan_id
|
||||||
}
|
}
|
||||||
|
@ -394,10 +392,10 @@ class IpType(RevMixin, AclMixin, models.Model):
|
||||||
def ip_net_full_info(self):
|
def ip_net_full_info(self):
|
||||||
"""Renvoie les infos du network contenant du range"""
|
"""Renvoie les infos du network contenant du range"""
|
||||||
return {
|
return {
|
||||||
'network' : str(self.ip_network.network),
|
'network': str(self.ip_network.network),
|
||||||
'netmask' : str(self.ip_network.netmask),
|
'netmask': str(self.ip_network.netmask),
|
||||||
'broadcast' : str(self.ip_network.broadcast),
|
'broadcast': str(self.ip_network.broadcast),
|
||||||
'netmask_cidr' : str(self.ip_network.prefixlen),
|
'netmask_cidr': str(self.ip_network.prefixlen),
|
||||||
}
|
}
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
|
@ -448,9 +446,9 @@ class IpType(RevMixin, AclMixin, models.Model):
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
for ipv6 in Ipv6List.objects.filter(
|
for ipv6 in Ipv6List.objects.filter(
|
||||||
interface__in=Interface.objects.filter(
|
interface__in=Interface.objects.filter(
|
||||||
type__in=MachineType.objects.filter(ip_type=self)
|
type__in=MachineType.objects.filter(ip_type=self)
|
||||||
)
|
)
|
||||||
):
|
):
|
||||||
ipv6.check_and_replace_prefix(prefix=self.prefix_v6)
|
ipv6.check_and_replace_prefix(prefix=self.prefix_v6)
|
||||||
|
|
||||||
|
@ -814,8 +812,8 @@ class Txt(RevMixin, AclMixin, models.Model):
|
||||||
verbose_name_plural = _("TXT records")
|
verbose_name_plural = _("TXT records")
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.zone) + " : " + str(self.field1) + " " +\
|
return str(self.zone) + " : " + str(self.field1) + " " + \
|
||||||
str(self.field2)
|
str(self.field2)
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def dns_entry(self):
|
def dns_entry(self):
|
||||||
|
@ -874,7 +872,7 @@ class Srv(RevMixin, AclMixin, models.Model):
|
||||||
default=0,
|
default=0,
|
||||||
validators=[MaxValueValidator(65535)],
|
validators=[MaxValueValidator(65535)],
|
||||||
help_text=_("Relative weight for records with the same priority"
|
help_text=_("Relative weight for records with the same priority"
|
||||||
" (integer value between 0 and 65535)")
|
" (integer value between 0 and 65535)")
|
||||||
)
|
)
|
||||||
port = models.PositiveIntegerField(
|
port = models.PositiveIntegerField(
|
||||||
validators=[MaxValueValidator(65535)],
|
validators=[MaxValueValidator(65535)],
|
||||||
|
@ -894,17 +892,17 @@ class Srv(RevMixin, AclMixin, models.Model):
|
||||||
verbose_name_plural = _("SRV records")
|
verbose_name_plural = _("SRV records")
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.service) + ' ' + str(self.protocole) + ' ' +\
|
return str(self.service) + ' ' + str(self.protocole) + ' ' + \
|
||||||
str(self.extension) + ' ' + str(self.priority) +\
|
str(self.extension) + ' ' + str(self.priority) + \
|
||||||
' ' + str(self.weight) + str(self.port) + str(self.target)
|
' ' + str(self.weight) + str(self.port) + str(self.target)
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def dns_entry(self):
|
def dns_entry(self):
|
||||||
"""Renvoie l'enregistrement SRV complet pour le fichier de zone"""
|
"""Renvoie l'enregistrement SRV complet pour le fichier de zone"""
|
||||||
return str(self.service) + '._' + str(self.protocole).lower() +\
|
return str(self.service) + '._' + str(self.protocole).lower() + \
|
||||||
str(self.extension) + '. ' + str(self.ttl) + ' IN SRV ' +\
|
str(self.extension) + '. ' + str(self.ttl) + ' IN SRV ' + \
|
||||||
str(self.priority) + ' ' + str(self.weight) + ' ' +\
|
str(self.priority) + ' ' + str(self.weight) + ' ' + \
|
||||||
str(self.port) + ' ' + str(self.target) + '.'
|
str(self.port) + ' ' + str(self.target) + '.'
|
||||||
|
|
||||||
|
|
||||||
class SshFp(RevMixin, AclMixin, models.Model):
|
class SshFp(RevMixin, AclMixin, models.Model):
|
||||||
|
@ -949,8 +947,8 @@ class SshFp(RevMixin, AclMixin, models.Model):
|
||||||
"""Return the hashess for the pub key with correct id
|
"""Return the hashess for the pub key with correct id
|
||||||
cf RFC, 1 is sha1 , 2 sha256"""
|
cf RFC, 1 is sha1 , 2 sha256"""
|
||||||
return {
|
return {
|
||||||
"1" : hashlib.sha1(base64.b64decode(self.pub_key_entry)).hexdigest(),
|
"1": hashlib.sha1(base64.b64decode(self.pub_key_entry)).hexdigest(),
|
||||||
"2" : hashlib.sha256(base64.b64decode(self.pub_key_entry)).hexdigest(),
|
"2": hashlib.sha256(base64.b64decode(self.pub_key_entry)).hexdigest(),
|
||||||
}
|
}
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -973,7 +971,6 @@ class SshFp(RevMixin, AclMixin, models.Model):
|
||||||
return str(self.algo) + ' ' + str(self.comment)
|
return str(self.algo) + ' ' + str(self.comment)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
||||||
""" Une interface. Objet clef de l'application machine :
|
""" Une interface. Objet clef de l'application machine :
|
||||||
- une address mac unique. Possibilité de la rendre unique avec le
|
- une address mac unique. Possibilité de la rendre unique avec le
|
||||||
|
@ -1067,7 +1064,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
||||||
.get_cached_value('ipv6_mode') == 'SLAAC'):
|
.get_cached_value('ipv6_mode') == 'SLAAC'):
|
||||||
self.sync_ipv6_slaac()
|
self.sync_ipv6_slaac()
|
||||||
elif (preferences.models.OptionalMachine
|
elif (preferences.models.OptionalMachine
|
||||||
.get_cached_value('ipv6_mode') == 'DHCPV6'):
|
.get_cached_value('ipv6_mode') == 'DHCPV6'):
|
||||||
self.sync_ipv6_dhcpv6()
|
self.sync_ipv6_dhcpv6()
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
@ -1080,7 +1077,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
||||||
.get_cached_value('ipv6_mode') == 'SLAAC'):
|
.get_cached_value('ipv6_mode') == 'SLAAC'):
|
||||||
return self.ipv6list.all()
|
return self.ipv6list.all()
|
||||||
elif (preferences.models.OptionalMachine
|
elif (preferences.models.OptionalMachine
|
||||||
.get_cached_value('ipv6_mode') == 'DHCPV6'):
|
.get_cached_value('ipv6_mode') == 'DHCPV6'):
|
||||||
return self.ipv6list.filter(slaac_ip=False)
|
return self.ipv6list.filter(slaac_ip=False)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
@ -1159,9 +1156,9 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
||||||
.get_cached_value('create_machine')):
|
.get_cached_value('create_machine')):
|
||||||
return False, _("You can't add a machine.")
|
return False, _("You can't add a machine.")
|
||||||
max_lambdauser_interfaces = (preferences.models.OptionalMachine
|
max_lambdauser_interfaces = (preferences.models.OptionalMachine
|
||||||
.get_cached_value(
|
.get_cached_value(
|
||||||
'max_lambdauser_interfaces'
|
'max_lambdauser_interfaces'
|
||||||
))
|
))
|
||||||
if machine.user != user_request:
|
if machine.user != user_request:
|
||||||
return False, _("You don't have the right to add an interface"
|
return False, _("You don't have the right to add an interface"
|
||||||
" to a machine of another user.")
|
" to a machine of another user.")
|
||||||
|
@ -1365,8 +1362,8 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
||||||
|
|
||||||
def clean(self, *args, **kwargs):
|
def clean(self, *args, **kwargs):
|
||||||
if self.slaac_ip and (Ipv6List.objects
|
if self.slaac_ip and (Ipv6List.objects
|
||||||
.filter(interface=self.interface, slaac_ip=True)
|
.filter(interface=self.interface, slaac_ip=True)
|
||||||
.exclude(id=self.id)):
|
.exclude(id=self.id)):
|
||||||
raise ValidationError(_("A SLAAC IP address is already registered."))
|
raise ValidationError(_("A SLAAC IP address is already registered."))
|
||||||
prefix_v6 = self.interface.type.ip_type.prefix_v6.encode().decode('utf-8')
|
prefix_v6 = self.interface.type.ip_type.prefix_v6.encode().decode('utf-8')
|
||||||
if prefix_v6:
|
if prefix_v6:
|
||||||
|
@ -1498,18 +1495,18 @@ class Domain(RevMixin, AclMixin, models.Model):
|
||||||
return False, _("Nonexistent interface.")
|
return False, _("Nonexistent interface.")
|
||||||
if not user_request.has_perm('machines.add_domain'):
|
if not user_request.has_perm('machines.add_domain'):
|
||||||
max_lambdauser_aliases = (preferences.models.OptionalMachine
|
max_lambdauser_aliases = (preferences.models.OptionalMachine
|
||||||
.get_cached_value(
|
.get_cached_value(
|
||||||
'max_lambdauser_aliases'
|
'max_lambdauser_aliases'
|
||||||
))
|
))
|
||||||
if interface.machine.user != user_request:
|
if interface.machine.user != user_request:
|
||||||
return False, _("You don't have the right to add an alias to a"
|
return False, _("You don't have the right to add an alias to a"
|
||||||
" machine of another user.")
|
" machine of another user.")
|
||||||
if Domain.objects.filter(
|
if Domain.objects.filter(
|
||||||
cname__in=Domain.objects.filter(
|
cname__in=Domain.objects.filter(
|
||||||
interface_parent__in=(interface.machine.user
|
interface_parent__in=(interface.machine.user
|
||||||
.user_interfaces())
|
.user_interfaces())
|
||||||
)
|
)
|
||||||
).count() >= max_lambdauser_aliases:
|
).count() >= max_lambdauser_aliases:
|
||||||
return False, _("You reached the maximum number of alias that"
|
return False, _("You reached the maximum number of alias that"
|
||||||
" you are allowed to create yourself (%s). "
|
" you are allowed to create yourself (%s). "
|
||||||
% max_lambdauser_aliases)
|
% max_lambdauser_aliases)
|
||||||
|
@ -1695,7 +1692,7 @@ class Service(RevMixin, AclMixin, models.Model):
|
||||||
|
|
||||||
def ask_regen(self):
|
def ask_regen(self):
|
||||||
""" Marque à True la demande de régénération pour un service x """
|
""" Marque à True la demande de régénération pour un service x """
|
||||||
Service_link.objects.filter(service=self).exclude(asked_regen=True)\
|
Service_link.objects.filter(service=self).exclude(asked_regen=True) \
|
||||||
.update(asked_regen=True)
|
.update(asked_regen=True)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -1703,11 +1700,11 @@ class Service(RevMixin, AclMixin, models.Model):
|
||||||
""" Django ne peut créer lui meme les relations manytomany avec table
|
""" Django ne peut créer lui meme les relations manytomany avec table
|
||||||
intermediaire explicite"""
|
intermediaire explicite"""
|
||||||
for serv in servers.exclude(
|
for serv in servers.exclude(
|
||||||
pk__in=Interface.objects.filter(service=self)
|
pk__in=Interface.objects.filter(service=self)
|
||||||
):
|
):
|
||||||
link = Service_link(service=self, server=serv)
|
link = Service_link(service=self, server=serv)
|
||||||
link.save()
|
link.save()
|
||||||
Service_link.objects.filter(service=self).exclude(server__in=servers)\
|
Service_link.objects.filter(service=self).exclude(server__in=servers) \
|
||||||
.delete()
|
.delete()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -1754,10 +1751,10 @@ class Service_link(RevMixin, AclMixin, models.Model):
|
||||||
régénération de service"""
|
régénération de service"""
|
||||||
return bool(
|
return bool(
|
||||||
(self.asked_regen and (
|
(self.asked_regen and (
|
||||||
self.last_regen + self.service.min_time_regen
|
self.last_regen + self.service.min_time_regen
|
||||||
) < timezone.now()
|
) < timezone.now()
|
||||||
) or (
|
) or (
|
||||||
self.last_regen + self.service.regular_time_regen
|
self.last_regen + self.service.regular_time_regen
|
||||||
) < timezone.now()
|
) < timezone.now()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1875,9 +1872,8 @@ class OuverturePort(RevMixin, AclMixin, models.Model):
|
||||||
),
|
),
|
||||||
default=OUT,
|
default=OUT,
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _("ports opening")
|
|
||||||
verbose_name = _("ports openings")
|
verbose_name = _("ports openings")
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -2044,4 +2040,3 @@ def srv_post_save(**_kwargs):
|
||||||
def srv_post_delete(**_kwargs):
|
def srv_post_delete(**_kwargs):
|
||||||
"""Regeneration dns après modification d'un SRV"""
|
"""Regeneration dns après modification d'un SRV"""
|
||||||
regen('dns')
|
regen('dns')
|
||||||
|
|
||||||
|
|
|
@ -26,8 +26,8 @@
|
||||||
Serializers for the Machines app
|
Serializers for the Machines app
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from machines.models import (
|
from machines.models import (
|
||||||
Interface,
|
Interface,
|
||||||
IpType,
|
IpType,
|
||||||
|
@ -148,13 +148,13 @@ class TypeSerializer(serializers.ModelSerializer):
|
||||||
get ForeignKey values. Infos about the general port policy is added """
|
get ForeignKey values. Infos about the general port policy is added """
|
||||||
|
|
||||||
extension = ExtensionNameField(read_only=True)
|
extension = ExtensionNameField(read_only=True)
|
||||||
ouverture_ports_tcp_in = serializers\
|
ouverture_ports_tcp_in = serializers \
|
||||||
.SerializerMethodField('get_port_policy_input_tcp')
|
.SerializerMethodField('get_port_policy_input_tcp')
|
||||||
ouverture_ports_tcp_out = serializers\
|
ouverture_ports_tcp_out = serializers \
|
||||||
.SerializerMethodField('get_port_policy_output_tcp')
|
.SerializerMethodField('get_port_policy_output_tcp')
|
||||||
ouverture_ports_udp_in = serializers\
|
ouverture_ports_udp_in = serializers \
|
||||||
.SerializerMethodField('get_port_policy_input_udp')
|
.SerializerMethodField('get_port_policy_input_udp')
|
||||||
ouverture_ports_udp_out = serializers\
|
ouverture_ports_udp_out = serializers \
|
||||||
.SerializerMethodField('get_port_policy_output_udp')
|
.SerializerMethodField('get_port_policy_output_udp')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -400,7 +400,7 @@ class OuverturePortsSerializer(serializers.Serializer):
|
||||||
return {
|
return {
|
||||||
i.ipv4.ipv4: {
|
i.ipv4.ipv4: {
|
||||||
"tcp_in": [j.tcp_ports_in() for j in i.port_lists.all()],
|
"tcp_in": [j.tcp_ports_in() for j in i.port_lists.all()],
|
||||||
"tcp_out": [j.tcp_ports_out()for j in i.port_lists.all()],
|
"tcp_out": [j.tcp_ports_out() for j in i.port_lists.all()],
|
||||||
"udp_in": [j.udp_ports_in() for j in i.port_lists.all()],
|
"udp_in": [j.udp_ports_in() for j in i.port_lists.all()],
|
||||||
"udp_out": [j.udp_ports_out() for j in i.port_lists.all()],
|
"udp_out": [j.udp_ports_out() for j in i.port_lists.all()],
|
||||||
}
|
}
|
||||||
|
@ -413,7 +413,7 @@ class OuverturePortsSerializer(serializers.Serializer):
|
||||||
return {
|
return {
|
||||||
i.ipv6: {
|
i.ipv6: {
|
||||||
"tcp_in": [j.tcp_ports_in() for j in i.port_lists.all()],
|
"tcp_in": [j.tcp_ports_in() for j in i.port_lists.all()],
|
||||||
"tcp_out": [j.tcp_ports_out()for j in i.port_lists.all()],
|
"tcp_out": [j.tcp_ports_out() for j in i.port_lists.all()],
|
||||||
"udp_in": [j.udp_ports_in() for j in i.port_lists.all()],
|
"udp_in": [j.udp_ports_in() for j in i.port_lists.all()],
|
||||||
"udp_out": [j.udp_ports_out() for j in i.port_lists.all()],
|
"udp_out": [j.udp_ports_out() for j in i.port_lists.all()],
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ The defined URLs for the Machines app
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|
|
@ -32,26 +32,18 @@ The views for the Machines app
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.urls import reverse
|
|
||||||
from django.http import HttpResponse, HttpResponseRedirect
|
|
||||||
from django.shortcuts import render, redirect
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required, permission_required
|
from django.contrib.auth.decorators import login_required, permission_required
|
||||||
from django.db.models import ProtectedError, F
|
from django.db.models import ProtectedError, F
|
||||||
from django.forms import modelformset_factory
|
from django.forms import modelformset_factory
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.http import HttpResponse
|
||||||
|
from django.shortcuts import render, redirect
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from rest_framework.renderers import JSONRenderer
|
from rest_framework.renderers import JSONRenderer
|
||||||
|
|
||||||
from users.models import User
|
|
||||||
from preferences.models import GeneralOption
|
from preferences.models import GeneralOption
|
||||||
from re2o.utils import (
|
|
||||||
all_active_assigned_interfaces,
|
|
||||||
filter_active_interfaces,
|
|
||||||
SortTable,
|
|
||||||
re2o_paginator,
|
|
||||||
)
|
|
||||||
from re2o.acl import (
|
from re2o.acl import (
|
||||||
can_create,
|
can_create,
|
||||||
can_edit,
|
can_edit,
|
||||||
|
@ -60,21 +52,14 @@ from re2o.acl import (
|
||||||
can_view_all,
|
can_view_all,
|
||||||
can_delete_set,
|
can_delete_set,
|
||||||
)
|
)
|
||||||
from re2o.views import form
|
from re2o.utils import (
|
||||||
|
all_active_assigned_interfaces,
|
||||||
from .serializers import (
|
filter_active_interfaces,
|
||||||
FullInterfaceSerializer,
|
SortTable,
|
||||||
InterfaceSerializer,
|
re2o_paginator,
|
||||||
TypeSerializer,
|
|
||||||
DomainSerializer,
|
|
||||||
TxtSerializer,
|
|
||||||
SrvSerializer,
|
|
||||||
MxSerializer,
|
|
||||||
ExtensionSerializer,
|
|
||||||
ServiceServersSerializer,
|
|
||||||
NsSerializer,
|
|
||||||
)
|
)
|
||||||
|
from re2o.views import form
|
||||||
|
from users.models import User
|
||||||
from .forms import (
|
from .forms import (
|
||||||
NewMachineForm,
|
NewMachineForm,
|
||||||
EditMachineForm,
|
EditMachineForm,
|
||||||
|
@ -139,6 +124,18 @@ from .models import (
|
||||||
OuverturePort,
|
OuverturePort,
|
||||||
Ipv6List,
|
Ipv6List,
|
||||||
)
|
)
|
||||||
|
from .serializers import (
|
||||||
|
FullInterfaceSerializer,
|
||||||
|
InterfaceSerializer,
|
||||||
|
TypeSerializer,
|
||||||
|
DomainSerializer,
|
||||||
|
TxtSerializer,
|
||||||
|
SrvSerializer,
|
||||||
|
MxSerializer,
|
||||||
|
ExtensionSerializer,
|
||||||
|
ServiceServersSerializer,
|
||||||
|
NsSerializer,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def f_type_id(is_type_tt):
|
def f_type_id(is_type_tt):
|
||||||
|
@ -153,12 +150,12 @@ def generate_ipv4_choices(form_obj):
|
||||||
"""
|
"""
|
||||||
f_ipv4 = form_obj.fields['ipv4']
|
f_ipv4 = form_obj.fields['ipv4']
|
||||||
used_mtype_id = []
|
used_mtype_id = []
|
||||||
choices = '{"":[{key:"",value:"'+_("Select a machine type first.") + '"}'
|
choices = '{"":[{key:"",value:"' + _("Select a machine type first.") + '"}'
|
||||||
mtype_id = -1
|
mtype_id = -1
|
||||||
|
|
||||||
for ip in (f_ipv4.queryset
|
for ip in (f_ipv4.queryset
|
||||||
.annotate(mtype_id=F('ip_type__machinetype__id'))
|
.annotate(mtype_id=F('ip_type__machinetype__id'))
|
||||||
.order_by('mtype_id', 'id')):
|
.order_by('mtype_id', 'id')):
|
||||||
if mtype_id != ip.mtype_id:
|
if mtype_id != ip.mtype_id:
|
||||||
mtype_id = ip.mtype_id
|
mtype_id = ip.mtype_id
|
||||||
used_mtype_id.append(mtype_id)
|
used_mtype_id.append(mtype_id)
|
||||||
|
@ -172,7 +169,7 @@ def generate_ipv4_choices(form_obj):
|
||||||
)
|
)
|
||||||
|
|
||||||
for t in form_obj.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 += '], "' + str(t.id) + '": ['
|
||||||
choices += '{key: "", value: "' + str(f_ipv4.empty_label) + '"},'
|
choices += '{key: "", value: "' + str(f_ipv4.empty_label) + '"},'
|
||||||
choices += ']}'
|
choices += ']}'
|
||||||
return choices
|
return choices
|
||||||
|
@ -889,6 +886,7 @@ def del_ns(request, instances):
|
||||||
request
|
request
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@can_create(DName)
|
@can_create(DName)
|
||||||
def add_dname(request):
|
def add_dname(request):
|
||||||
|
@ -935,9 +933,9 @@ def del_dname(request, instances):
|
||||||
messages.success(request, _("The DNAME record was deleted."))
|
messages.success(request, _("The DNAME record was deleted."))
|
||||||
except ProtectedError:
|
except ProtectedError:
|
||||||
messages.error(
|
messages.error(
|
||||||
request,
|
request,
|
||||||
_("Error: the DNAME record %s can't be deleted.")
|
_("Error: the DNAME record %s can't be deleted.")
|
||||||
% dname_del
|
% dname_del
|
||||||
)
|
)
|
||||||
return redirect(reverse('machines:index-extension'))
|
return redirect(reverse('machines:index-extension'))
|
||||||
return form(
|
return form(
|
||||||
|
@ -1252,16 +1250,16 @@ def del_service(request, instances):
|
||||||
request
|
request
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@can_edit(Service)
|
@can_edit(Service)
|
||||||
def regen_service(request,service, **_kwargs):
|
def regen_service(request, service, **_kwargs):
|
||||||
"""Ask for a regen of the service"""
|
"""Ask for a regen of the service"""
|
||||||
|
|
||||||
regen(service)
|
regen(service)
|
||||||
return index_service(request)
|
return index_service(request)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@can_create(Vlan)
|
@can_create(Vlan)
|
||||||
def add_vlan(request):
|
def add_vlan(request):
|
||||||
|
@ -1388,10 +1386,10 @@ def index(request):
|
||||||
.prefetch_related('interface_set__domain__extension')
|
.prefetch_related('interface_set__domain__extension')
|
||||||
.prefetch_related('interface_set__ipv4__ip_type')
|
.prefetch_related('interface_set__ipv4__ip_type')
|
||||||
.prefetch_related(
|
.prefetch_related(
|
||||||
'interface_set__type__ip_type__extension'
|
'interface_set__type__ip_type__extension'
|
||||||
).prefetch_related(
|
).prefetch_related(
|
||||||
'interface_set__domain__related_domain__extension'
|
'interface_set__domain__related_domain__extension'
|
||||||
).prefetch_related('interface_set__ipv6list'))
|
).prefetch_related('interface_set__ipv6list'))
|
||||||
machines_list = SortTable.sort(
|
machines_list = SortTable.sort(
|
||||||
machines_list,
|
machines_list,
|
||||||
request.GET.get('col'),
|
request.GET.get('col'),
|
||||||
|
@ -1548,8 +1546,8 @@ def index_role(request):
|
||||||
""" View used to display the list of existing roles """
|
""" View used to display the list of existing roles """
|
||||||
role_list = (Role.objects
|
role_list = (Role.objects
|
||||||
.prefetch_related(
|
.prefetch_related(
|
||||||
'servers__domain__extension'
|
'servers__domain__extension'
|
||||||
).all())
|
).all())
|
||||||
return render(
|
return render(
|
||||||
request,
|
request,
|
||||||
'machines/index_role.html',
|
'machines/index_role.html',
|
||||||
|
@ -1563,8 +1561,8 @@ def index_service(request):
|
||||||
""" View used to display the list of existing services """
|
""" View used to display the list of existing services """
|
||||||
service_list = (Service.objects
|
service_list = (Service.objects
|
||||||
.prefetch_related(
|
.prefetch_related(
|
||||||
'service_link_set__server__domain__extension'
|
'service_link_set__server__domain__extension'
|
||||||
).all())
|
).all())
|
||||||
servers_list = (Service_link.objects
|
servers_list = (Service_link.objects
|
||||||
.select_related('server__domain__extension')
|
.select_related('server__domain__extension')
|
||||||
.select_related('service')
|
.select_related('service')
|
||||||
|
@ -1740,10 +1738,10 @@ def alias(_request):
|
||||||
alias = (Domain.objects
|
alias = (Domain.objects
|
||||||
.filter(interface_parent=None)
|
.filter(interface_parent=None)
|
||||||
.filter(
|
.filter(
|
||||||
cname__in=Domain.objects.filter(
|
cname__in=Domain.objects.filter(
|
||||||
interface_parent__in=Interface.objects.exclude(ipv4=None)
|
interface_parent__in=Interface.objects.exclude(ipv4=None)
|
||||||
)
|
)
|
||||||
).select_related('extension')
|
).select_related('extension')
|
||||||
.select_related('cname__extension'))
|
.select_related('cname__extension'))
|
||||||
seria = DomainSerializer(alias, many=True)
|
seria = DomainSerializer(alias, many=True)
|
||||||
return JSONResponse(seria.data)
|
return JSONResponse(seria.data)
|
||||||
|
@ -1801,10 +1799,10 @@ def ns(_request):
|
||||||
""" API view to list the NS records """
|
""" API view to list the NS records """
|
||||||
ns = (Ns.objects
|
ns = (Ns.objects
|
||||||
.exclude(
|
.exclude(
|
||||||
ns__in=Domain.objects.filter(
|
ns__in=Domain.objects.filter(
|
||||||
interface_parent__in=Interface.objects.filter(ipv4=None)
|
interface_parent__in=Interface.objects.filter(ipv4=None)
|
||||||
)
|
)
|
||||||
).select_related('zone')
|
).select_related('zone')
|
||||||
.select_related('ns__extension'))
|
.select_related('ns__extension'))
|
||||||
seria = NsSerializer(ns, many=True)
|
seria = NsSerializer(ns, many=True)
|
||||||
return JSONResponse(seria.data)
|
return JSONResponse(seria.data)
|
||||||
|
@ -1859,9 +1857,9 @@ def ouverture_ports(_request):
|
||||||
""" API view to list the port policies for each IP """
|
""" API view to list the port policies for each IP """
|
||||||
r = {'ipv4': {}, 'ipv6': {}}
|
r = {'ipv4': {}, 'ipv6': {}}
|
||||||
for o in (OuverturePortList.objects
|
for o in (OuverturePortList.objects
|
||||||
.all()
|
.all()
|
||||||
.prefetch_related('ouvertureport_set')
|
.prefetch_related('ouvertureport_set')
|
||||||
.prefetch_related('interface_set', 'interface_set__ipv4')):
|
.prefetch_related('interface_set', 'interface_set__ipv4')):
|
||||||
pl = {
|
pl = {
|
||||||
"tcp_in": set(map(
|
"tcp_in": set(map(
|
||||||
str,
|
str,
|
||||||
|
@ -1926,17 +1924,16 @@ def regen_achieved(request):
|
||||||
""" API view to list the regen status for each (Service link, Server)
|
""" API view to list the regen status for each (Service link, Server)
|
||||||
couple """
|
couple """
|
||||||
obj = (Service_link.objects
|
obj = (Service_link.objects
|
||||||
.filter(
|
.filter(
|
||||||
service__in=Service.objects.filter(
|
service__in=Service.objects.filter(
|
||||||
service_type=request.POST['service']
|
service_type=request.POST['service']
|
||||||
),
|
),
|
||||||
server__in=Interface.objects.filter(
|
server__in=Interface.objects.filter(
|
||||||
domain__in=Domain.objects.filter(
|
domain__in=Domain.objects.filter(
|
||||||
name=request.POST['server']
|
name=request.POST['server']
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
if obj:
|
if obj:
|
||||||
obj.first().done_regen()
|
obj.first().done_regen()
|
||||||
return HttpResponse("Ok")
|
return HttpResponse("Ok")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue