8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-23 11:53:12 +00:00

Pylint compliance on machines

This commit is contained in:
Maël Kervella 2018-04-14 18:19:02 +00:00
parent 2114a6ebba
commit e88141db56
8 changed files with 385 additions and 199 deletions

View file

@ -20,5 +20,8 @@
# You should have received a copy of the GNU General Public License along # You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc., # with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
"""machines
The app in charge of everything related to the machines, the interface, ...
"""
from .acl import * from .acl import *

View file

@ -20,6 +20,9 @@
# You should have received a copy of the GNU General Public License along # You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc., # with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
"""machines.admin
The objects, fields and datastructures visible in the Django admin view
"""
from __future__ import unicode_literals from __future__ import unicode_literals
@ -44,74 +47,92 @@ from .models import (
class MachineAdmin(VersionAdmin): class MachineAdmin(VersionAdmin):
""" Admin view of a Machine object """
pass pass
class Ipv6ListAdmin(VersionAdmin): class Ipv6ListAdmin(VersionAdmin):
""" Admin view of a Ipv6List object """
pass pass
class IpTypeAdmin(VersionAdmin): class IpTypeAdmin(VersionAdmin):
""" Admin view of a IpType object """
pass pass
class MachineTypeAdmin(VersionAdmin): class MachineTypeAdmin(VersionAdmin):
""" Admin view of a MachineType object """
pass pass
class VlanAdmin(VersionAdmin): class VlanAdmin(VersionAdmin):
""" Admin view of a Vlan object """
pass pass
class ExtensionAdmin(VersionAdmin): class ExtensionAdmin(VersionAdmin):
""" Admin view of a Extension object """
pass pass
class SOAAdmin(VersionAdmin): class SOAAdmin(VersionAdmin):
""" Admin view of a SOA object """
pass pass
class MxAdmin(VersionAdmin): class MxAdmin(VersionAdmin):
""" Admin view of a MX object """
pass pass
class NsAdmin(VersionAdmin): class NsAdmin(VersionAdmin):
""" Admin view of a NS object """
pass pass
class TxtAdmin(VersionAdmin): class TxtAdmin(VersionAdmin):
""" Admin view of a TXT object """
pass pass
class SrvAdmin(VersionAdmin): class SrvAdmin(VersionAdmin):
""" Admin view of a SRV object """
pass pass
class NasAdmin(VersionAdmin): class NasAdmin(VersionAdmin):
""" Admin view of a Nas object """
pass pass
class IpListAdmin(VersionAdmin): class IpListAdmin(VersionAdmin):
""" Admin view of a Ipv4List object """
pass pass
class OuverturePortAdmin(VersionAdmin): class OuverturePortAdmin(VersionAdmin):
""" Admin view of a OuverturePort object """
pass pass
class OuverturePortListAdmin(VersionAdmin): class OuverturePortListAdmin(VersionAdmin):
""" Admin view of a OuverturePortList object """
pass pass
class InterfaceAdmin(VersionAdmin): class InterfaceAdmin(VersionAdmin):
""" Admin view of a Interface object """
list_display = ('machine', 'type', 'mac_address', 'ipv4', 'details') list_display = ('machine', 'type', 'mac_address', 'ipv4', 'details')
class DomainAdmin(VersionAdmin): class DomainAdmin(VersionAdmin):
""" Admin view of a Domain object """
list_display = ('interface_parent', 'name', 'extension', 'cname') list_display = ('interface_parent', 'name', 'extension', 'cname')
class ServiceAdmin(VersionAdmin): class ServiceAdmin(VersionAdmin):
""" 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')

View file

@ -137,10 +137,10 @@ class AliasForm(FormRevMixin, ModelForm):
prefix = kwargs.pop('prefix', self.Meta.model.__name__) prefix = kwargs.pop('prefix', self.Meta.model.__name__)
user = kwargs.pop('user') user = kwargs.pop('user')
super(AliasForm, self).__init__(*args, prefix=prefix, **kwargs) super(AliasForm, self).__init__(*args, prefix=prefix, **kwargs)
can_use_all, reason = Extension.can_use_all(user) can_use_all, _reason = Extension.can_use_all(user)
if not can_use_all: if not can_use_all:
self.fields['extension'].queryset = Extension.objects.filter( self.fields['extension'].queryset = Extension.objects.filter(
need_infra=False need_infra=False
) )
@ -480,6 +480,8 @@ class ServiceForm(FormRevMixin, ModelForm):
)) ))
def save(self, commit=True): def save(self, commit=True):
# TODO : None of the parents of ServiceForm use the commit
# parameter in .save()
instance = super(ServiceForm, self).save(commit=False) instance = super(ServiceForm, self).save(commit=False)
if commit: if commit:
instance.save() instance.save()

View file

@ -20,14 +20,17 @@
# You should have received a copy of the GNU General Public License along # You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc., # with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
"""machines.models
The models definitions for the Machines app
"""
from __future__ import unicode_literals from __future__ import unicode_literals
from datetime import timedelta from datetime import timedelta
import re import re
from netaddr import mac_bare, EUI, IPSet, IPRange, IPNetwork, IPAddress
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
from django.db import models from django.db import models
from django.db.models.signals import post_save, post_delete from django.db.models.signals import post_save, post_delete
@ -67,12 +70,13 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
"Peut changer le propriétaire d'une machine"), "Peut changer le propriétaire d'une machine"),
) )
def get_instance(machineid, *args, **kwargs): @classmethod
def get_instance(cls, machineid, *_args, **_kwargs):
"""Get the Machine instance with machineid. """Get the Machine instance with machineid.
:param userid: The id :param userid: The id
:return: The user :return: The user
""" """
return Machine.objects.get(pk=machineid) return cls.objects.get(pk=machineid)
def linked_objects(self): def linked_objects(self):
"""Return linked objects : machine and domain. """Return linked objects : machine and domain.
@ -85,7 +89,7 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
) )
@staticmethod @staticmethod
def can_change_user(user_request, *args, **kwargs): def can_change_user(user_request, *_args, **_kwargs):
"""Checks if an user is allowed to change the user who owns a """Checks if an user is allowed to change the user who owns a
Machine. Machine.
@ -99,7 +103,8 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
return (user_request.has_perm('machines.change_machine_user'), return (user_request.has_perm('machines.change_machine_user'),
"Vous ne pouvez pas modifier l'utilisateur de la machine.") "Vous ne pouvez pas modifier l'utilisateur de la machine.")
def can_view_all(user_request, *args, **kwargs): @staticmethod
def can_view_all(user_request, *_args, **_kwargs):
"""Vérifie qu'on peut bien afficher l'ensemble des machines, """Vérifie qu'on peut bien afficher l'ensemble des machines,
droit particulier correspondant droit particulier correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
@ -109,7 +114,8 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
"machines sans permission") "machines sans permission")
return True, None return True, None
def can_create(user_request, userid, *args, **kwargs): @staticmethod
def can_create(user_request, userid, *_args, **_kwargs):
"""Vérifie qu'un user qui fait la requète peut bien créer la machine """Vérifie qu'un user qui fait la requète peut bien créer la machine
et n'a pas atteint son quota, et crée bien une machine à lui et n'a pas atteint son quota, et crée bien une machine à lui
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
@ -172,7 +178,7 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
"d'un autre user que vous sans droit") "d'un autre user que vous sans droit")
return True, None return True, None
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *_args, **_kwargs):
"""Vérifie qu'on peut bien voir cette instance particulière (soit """Vérifie qu'on peut bien voir cette instance particulière (soit
machine de soi, soit droit particulier machine de soi, soit droit particulier
:param self: instance machine à éditer :param self: instance machine à éditer
@ -218,7 +224,8 @@ class MachineType(RevMixin, AclMixin, models.Model):
machinetype""" machinetype"""
return Interface.objects.filter(type=self) return Interface.objects.filter(type=self)
def can_use_all(user_request, *args, **kwargs): @staticmethod
def can_use_all(user_request, *_args, **_kwargs):
"""Check if an user can use every MachineType. """Check if an user can use every MachineType.
Args: Args:
@ -328,10 +335,10 @@ 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)
def clean(self): def clean(self):
@ -360,7 +367,8 @@ class IpType(RevMixin, AclMixin, models.Model):
self.clean() self.clean()
super(IpType, self).save(*args, **kwargs) super(IpType, self).save(*args, **kwargs)
def can_use_all(user_request, *args, **kwargs): @staticmethod
def can_use_all(user_request, *_args, **_kwargs):
"""Superdroit qui permet d'utiliser toutes les extensions sans """Superdroit qui permet d'utiliser toutes les extensions sans
restrictions restrictions
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
@ -555,7 +563,8 @@ class Extension(RevMixin, AclMixin, models.Model):
entry += "@ IN AAAA " + str(self.origin_v6) entry += "@ IN AAAA " + str(self.origin_v6)
return entry return entry
def can_use_all(user_request, *args, **kwargs): @staticmethod
def can_use_all(user_request, *_args, **_kwargs):
"""Superdroit qui permet d'utiliser toutes les extensions sans """Superdroit qui permet d'utiliser toutes les extensions sans
restrictions restrictions
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
@ -644,6 +653,7 @@ class Txt(RevMixin, AclMixin, models.Model):
class Srv(RevMixin, AclMixin, models.Model): class Srv(RevMixin, AclMixin, models.Model):
""" A SRV record """
PRETTY_NAME = "Enregistrement Srv" PRETTY_NAME = "Enregistrement Srv"
TCP = 'TCP' TCP = 'TCP'
@ -874,7 +884,8 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
correspondent pas") correspondent pas")
super(Interface, self).save(*args, **kwargs) super(Interface, self).save(*args, **kwargs)
def can_create(user_request, machineid, *args, **kwargs): @staticmethod
def can_create(user_request, machineid, *_args, **_kwargs):
"""Verifie que l'user a les bons droits infra pour créer """Verifie que l'user a les bons droits infra pour créer
une interface, ou bien que la machine appartient bien à l'user une interface, ou bien que la machine appartient bien à l'user
:param macineid: Id de la machine parente de l'interface :param macineid: Id de la machine parente de l'interface
@ -903,7 +914,9 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
return True, None return True, None
@staticmethod @staticmethod
def can_change_machine(user_request, *args, **kwargs): def can_change_machine(user_request, *_args, **_kwargs):
"""Check if a user can change the machine associated with an
Interface object """
return (user_request.has_perm('machines.change_interface_machine'), return (user_request.has_perm('machines.change_interface_machine'),
"Droit requis pour changer la machine") "Droit requis pour changer la machine")
@ -941,7 +954,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
"d'un autre user que vous sans droit") "d'un autre user que vous sans droit")
return True, None return True, None
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *_args, **_kwargs):
"""Vérifie qu'on peut bien voir cette instance particulière avec """Vérifie qu'on peut bien voir cette instance particulière avec
droit view objet ou qu'elle appartient à l'user droit view objet ou qu'elle appartient à l'user
:param self: instance interface à voir :param self: instance interface à voir
@ -981,6 +994,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
""" A list of IPv6 """
PRETTY_NAME = 'Enregistrements Ipv6 des machines' PRETTY_NAME = 'Enregistrements Ipv6 des machines'
ipv6 = models.GenericIPAddressField( ipv6 = models.GenericIPAddressField(
@ -1001,7 +1015,8 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
"Peut changer la valeur slaac sur une ipv6"), "Peut changer la valeur slaac sur une ipv6"),
) )
def can_create(user_request, interfaceid, *args, **kwargs): @staticmethod
def can_create(user_request, interfaceid, *_args, **_kwargs):
"""Verifie que l'user a les bons droits infra pour créer """Verifie que l'user a les bons droits infra pour créer
une ipv6, ou possède l'interface associée une ipv6, ou possède l'interface associée
:param interfaceid: Id de l'interface associée à cet objet domain :param interfaceid: Id de l'interface associée à cet objet domain
@ -1018,7 +1033,8 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
return True, None return True, None
@staticmethod @staticmethod
def can_change_slaac_ip(user_request, *args, **kwargs): def can_change_slaac_ip(user_request, *_args, **_kwargs):
""" Check if a user can change the slaac value """
return (user_request.has_perm('machines.change_ipv6list_slaac_ip'), return (user_request.has_perm('machines.change_ipv6list_slaac_ip'),
"Droit requis pour changer la valeur slaac ip") "Droit requis pour changer la valeur slaac ip")
@ -1056,7 +1072,7 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
"d'un autre user que vous sans droit") "d'un autre user que vous sans droit")
return True, None return True, None
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *_args, **_kwargs):
"""Vérifie qu'on peut bien voir cette instance particulière avec """Vérifie qu'on peut bien voir cette instance particulière avec
droit view objet ou qu'elle appartient à l'user droit view objet ou qu'elle appartient à l'user
:param self: instance interface à voir :param self: instance interface à voir
@ -1165,7 +1181,7 @@ class Domain(RevMixin, AclMixin, models.Model):
if self.cname == self: if self.cname == self:
raise ValidationError("On ne peut créer un cname sur lui même") raise ValidationError("On ne peut créer un cname sur lui même")
HOSTNAME_LABEL_PATTERN = re.compile( HOSTNAME_LABEL_PATTERN = re.compile(
"(?!-)[A-Z\d-]+(?<!-)$", r"(?!-)[A-Z\d-]+(?<!-)$",
re.IGNORECASE re.IGNORECASE
) )
dns = self.name.lower() dns = self.name.lower()
@ -1207,7 +1223,8 @@ class Domain(RevMixin, AclMixin, models.Model):
else: else:
return self.cname.get_parent_interface() return self.cname.get_parent_interface()
def can_create(user_request, interfaceid, *args, **kwargs): @staticmethod
def can_create(user_request, interfaceid, *_args, **_kwargs):
"""Verifie que l'user a les bons droits infra pour créer """Verifie que l'user a les bons droits infra pour créer
un domain, ou possède l'interface associée un domain, ou possède l'interface associée
:param interfaceid: Id de l'interface associée à cet objet domain :param interfaceid: Id de l'interface associée à cet objet domain
@ -1226,17 +1243,17 @@ class Domain(RevMixin, AclMixin, models.Model):
return False, (u"Vous ne pouvez pas ajouter un alias à une " return False, (u"Vous ne pouvez pas ajouter un alias à une "
"machine d'un autre user que vous sans droit") "machine d'un autre user que vous sans droit")
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, (u"Vous avez atteint le maximum d'alias " return False, (u"Vous avez atteint le maximum d'alias "
"autorisés que vous pouvez créer vous même " "autorisés que vous pouvez créer vous même "
"(%s) " % max_lambdauser_aliases) "(%s) " % max_lambdauser_aliases)
return True, None return True, None
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *_args, **_kwargs):
"""Verifie que l'user a les bons droits pour editer """Verifie que l'user a les bons droits pour editer
cette instance domain cette instance domain
:param self: Instance domain à editer :param self: Instance domain à editer
@ -1248,7 +1265,7 @@ class Domain(RevMixin, AclMixin, models.Model):
"d'un autre user que vous sans droit") "d'un autre user que vous sans droit")
return True, None return True, None
def can_delete(self, user_request, *args, **kwargs): def can_delete(self, user_request, *_args, **_kwargs):
"""Verifie que l'user a les bons droits delete object pour del """Verifie que l'user a les bons droits delete object pour del
cette instance domain, ou qu'elle lui appartient cette instance domain, ou qu'elle lui appartient
:param self: Instance domain à del :param self: Instance domain à del
@ -1260,7 +1277,7 @@ class Domain(RevMixin, AclMixin, models.Model):
"machine d'un autre user que vous sans droit") "machine d'un autre user que vous sans droit")
return True, None return True, None
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *_args, **_kwargs):
"""Vérifie qu'on peut bien voir cette instance particulière avec """Vérifie qu'on peut bien voir cette instance particulière avec
droit view objet ou qu'elle appartient à l'user droit view objet ou qu'elle appartient à l'user
:param self: instance domain à voir :param self: instance domain à voir
@ -1277,6 +1294,7 @@ class Domain(RevMixin, AclMixin, models.Model):
class IpList(RevMixin, AclMixin, models.Model): class IpList(RevMixin, AclMixin, models.Model):
""" A list of IPv4 """
PRETTY_NAME = "Addresses ipv4" PRETTY_NAME = "Addresses ipv4"
ipv4 = models.GenericIPAddressField(protocol='IPv4', unique=True) ipv4 = models.GenericIPAddressField(protocol='IPv4', unique=True)
@ -1338,8 +1356,8 @@ 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)\
@ -1407,7 +1425,7 @@ class OuverturePortList(RevMixin, AclMixin, models.Model):
("view_ouvertureportlist", "Peut voir un objet ouvertureport"), ("view_ouvertureportlist", "Peut voir un objet ouvertureport"),
) )
def can_delete(self, user_request, *args, **kwargs): def can_delete(self, user_request, *_args, **_kwargs):
"""Verifie que l'user a les bons droits bureau pour delete """Verifie que l'user a les bons droits bureau pour delete
cette instance ouvertureportlist cette instance ouvertureportlist
:param self: Instance ouvertureportlist à delete :param self: Instance ouvertureportlist à delete
@ -1501,7 +1519,7 @@ class OuverturePort(RevMixin, AclMixin, models.Model):
@receiver(post_save, sender=Machine) @receiver(post_save, sender=Machine)
def machine_post_save(sender, **kwargs): def machine_post_save(_sender, **kwargs):
"""Synchronisation ldap et régen parefeu/dhcp lors de la modification """Synchronisation ldap et régen parefeu/dhcp lors de la modification
d'une machine""" d'une machine"""
user = kwargs['instance'].user user = kwargs['instance'].user
@ -1511,7 +1529,7 @@ def machine_post_save(sender, **kwargs):
@receiver(post_delete, sender=Machine) @receiver(post_delete, sender=Machine)
def machine_post_delete(sender, **kwargs): def machine_post_delete(_sender, **kwargs):
"""Synchronisation ldap et régen parefeu/dhcp lors de la suppression """Synchronisation ldap et régen parefeu/dhcp lors de la suppression
d'une machine""" d'une machine"""
machine = kwargs['instance'] machine = kwargs['instance']
@ -1522,7 +1540,7 @@ def machine_post_delete(sender, **kwargs):
@receiver(post_save, sender=Interface) @receiver(post_save, sender=Interface)
def interface_post_save(sender, **kwargs): def interface_post_save(_sender, **kwargs):
"""Synchronisation ldap et régen parefeu/dhcp lors de la modification """Synchronisation ldap et régen parefeu/dhcp lors de la modification
d'une interface""" d'une interface"""
interface = kwargs['instance'] interface = kwargs['instance']
@ -1535,7 +1553,7 @@ def interface_post_save(sender, **kwargs):
@receiver(post_delete, sender=Interface) @receiver(post_delete, sender=Interface)
def interface_post_delete(sender, **kwargs): def interface_post_delete(_sender, **kwargs):
"""Synchronisation ldap et régen parefeu/dhcp lors de la suppression """Synchronisation ldap et régen parefeu/dhcp lors de la suppression
d'une interface""" d'une interface"""
interface = kwargs['instance'] interface = kwargs['instance']
@ -1544,7 +1562,7 @@ def interface_post_delete(sender, **kwargs):
@receiver(post_save, sender=IpType) @receiver(post_save, sender=IpType)
def iptype_post_save(sender, **kwargs): def iptype_post_save(_sender, **kwargs):
"""Generation des objets ip après modification d'un range ip""" """Generation des objets ip après modification d'un range ip"""
iptype = kwargs['instance'] iptype = kwargs['instance']
iptype.gen_ip_range() iptype.gen_ip_range()
@ -1552,7 +1570,7 @@ def iptype_post_save(sender, **kwargs):
@receiver(post_save, sender=MachineType) @receiver(post_save, sender=MachineType)
def machinetype_post_save(sender, **kwargs): def machinetype_post_save(_sender, **kwargs):
"""Mise à jour des interfaces lorsque changement d'attribution """Mise à jour des interfaces lorsque changement d'attribution
d'une machinetype (changement iptype parent)""" d'une machinetype (changement iptype parent)"""
machinetype = kwargs['instance'] machinetype = kwargs['instance']
@ -1561,84 +1579,84 @@ def machinetype_post_save(sender, **kwargs):
@receiver(post_save, sender=Domain) @receiver(post_save, sender=Domain)
def domain_post_save(sender, **kwargs): def domain_post_save(_sender, **_kwargs):
"""Regeneration dns après modification d'un domain object""" """Regeneration dns après modification d'un domain object"""
regen('dns') regen('dns')
@receiver(post_delete, sender=Domain) @receiver(post_delete, sender=Domain)
def domain_post_delete(sender, **kwargs): def domain_post_delete(_sender, **_kwargs):
"""Regeneration dns après suppression d'un domain object""" """Regeneration dns après suppression d'un domain object"""
regen('dns') regen('dns')
@receiver(post_save, sender=Extension) @receiver(post_save, sender=Extension)
def extension_post_save(sender, **kwargs): def extension_post_save(_sender, **_kwargs):
"""Regeneration dns après modification d'une extension""" """Regeneration dns après modification d'une extension"""
regen('dns') regen('dns')
@receiver(post_delete, sender=Extension) @receiver(post_delete, sender=Extension)
def extension_post_selete(sender, **kwargs): def extension_post_selete(_sender, **_kwargs):
"""Regeneration dns après suppression d'une extension""" """Regeneration dns après suppression d'une extension"""
regen('dns') regen('dns')
@receiver(post_save, sender=SOA) @receiver(post_save, sender=SOA)
def soa_post_save(sender, **kwargs): def soa_post_save(_sender, **_kwargs):
"""Regeneration dns après modification d'un SOA""" """Regeneration dns après modification d'un SOA"""
regen('dns') regen('dns')
@receiver(post_delete, sender=SOA) @receiver(post_delete, sender=SOA)
def soa_post_delete(sender, **kwargs): def soa_post_delete(_sender, **_kwargs):
"""Regeneration dns après suppresson d'un SOA""" """Regeneration dns après suppresson d'un SOA"""
regen('dns') regen('dns')
@receiver(post_save, sender=Mx) @receiver(post_save, sender=Mx)
def mx_post_save(sender, **kwargs): def mx_post_save(_sender, **_kwargs):
"""Regeneration dns après modification d'un MX""" """Regeneration dns après modification d'un MX"""
regen('dns') regen('dns')
@receiver(post_delete, sender=Mx) @receiver(post_delete, sender=Mx)
def mx_post_delete(sender, **kwargs): def mx_post_delete(_sender, **_kwargs):
"""Regeneration dns après suppresson d'un MX""" """Regeneration dns après suppresson d'un MX"""
regen('dns') regen('dns')
@receiver(post_save, sender=Ns) @receiver(post_save, sender=Ns)
def ns_post_save(sender, **kwargs): def ns_post_save(_sender, **_kwargs):
"""Regeneration dns après modification d'un NS""" """Regeneration dns après modification d'un NS"""
regen('dns') regen('dns')
@receiver(post_delete, sender=Ns) @receiver(post_delete, sender=Ns)
def ns_post_delete(sender, **kwargs): def ns_post_delete(_sender, **_kwargs):
"""Regeneration dns après modification d'un NS""" """Regeneration dns après modification d'un NS"""
regen('dns') regen('dns')
@receiver(post_save, sender=Txt) @receiver(post_save, sender=Txt)
def text_post_save(sender, **kwargs): def text_post_save(_sender, **_kwargs):
"""Regeneration dns après modification d'un TXT""" """Regeneration dns après modification d'un TXT"""
regen('dns') regen('dns')
@receiver(post_delete, sender=Txt) @receiver(post_delete, sender=Txt)
def text_post_delete(sender, **kwargs): def text_post_delete(_sender, **_kwargs):
"""Regeneration dns après modification d'un TX""" """Regeneration dns après modification d'un TX"""
regen('dns') regen('dns')
@receiver(post_save, sender=Srv) @receiver(post_save, sender=Srv)
def srv_post_save(sender, **kwargs): def srv_post_save(_sender, **_kwargs):
"""Regeneration dns après modification d'un SRV""" """Regeneration dns après modification d'un SRV"""
regen('dns') regen('dns')
@receiver(post_delete, sender=Srv) @receiver(post_delete, sender=Srv)
def srv_post_delete(sender, **kwargs): def srv_post_delete(_sender, **_kwargs):
"""Regeneration dns après modification d'un SRV""" """Regeneration dns après modification d'un SRV"""
regen('dns') regen('dns')

View file

@ -22,6 +22,10 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
# Augustin Lemesle # Augustin Lemesle
"""machines.serializers
Serializers for the Machines app
"""
from rest_framework import serializers from rest_framework import serializers
from machines.models import ( from machines.models import (
@ -29,28 +33,30 @@ from machines.models import (
IpType, IpType,
Extension, Extension,
IpList, IpList,
MachineType,
Domain, Domain,
Txt, Txt,
Mx, Mx,
Srv, Srv,
Service_link, Service_link,
Ns, Ns,
OuverturePortList,
OuverturePort, OuverturePort,
Ipv6List Ipv6List
) )
class IpTypeField(serializers.RelatedField): class IpTypeField(serializers.RelatedField):
"""Serialisation d'une iptype, renvoie son evaluation str""" """ Serializer for an IpType object field """
def to_representation(self, value): def to_representation(self, value):
return value.type return value.type
def to_internal_value(self, data):
pass
class IpListSerializer(serializers.ModelSerializer): class IpListSerializer(serializers.ModelSerializer):
"""Serialisation d'une iplist, ip_type etant une foreign_key, """ Serializer for an Ipv4List obejct using the IpType serialization """
on evalue sa methode str"""
ip_type = IpTypeField(read_only=True) ip_type = IpTypeField(read_only=True)
class Meta: class Meta:
@ -59,16 +65,19 @@ class IpListSerializer(serializers.ModelSerializer):
class Ipv6ListSerializer(serializers.ModelSerializer): class Ipv6ListSerializer(serializers.ModelSerializer):
""" Serializer for an Ipv6List object """
class Meta: class Meta:
model = Ipv6List model = Ipv6List
fields = ('ipv6', 'slaac_ip') fields = ('ipv6', 'slaac_ip')
class InterfaceSerializer(serializers.ModelSerializer): class InterfaceSerializer(serializers.ModelSerializer):
"""Serialisation d'une interface, ipv4, domain et extension sont """ Serializer for an Interface object. Use SerializerMethodField
des foreign_key, on les override et on les evalue avec des fonctions to get ForeignKey values """
get_..."""
ipv4 = IpListSerializer(read_only=True) ipv4 = IpListSerializer(read_only=True)
# TODO : use serializer.RelatedField to avoid duplicate code
mac_address = serializers.SerializerMethodField('get_macaddress') mac_address = serializers.SerializerMethodField('get_macaddress')
domain = serializers.SerializerMethodField('get_dns') domain = serializers.SerializerMethodField('get_dns')
extension = serializers.SerializerMethodField('get_interface_extension') extension = serializers.SerializerMethodField('get_interface_extension')
@ -77,20 +86,29 @@ class InterfaceSerializer(serializers.ModelSerializer):
model = Interface model = Interface
fields = ('ipv4', 'mac_address', 'domain', 'extension') fields = ('ipv4', 'mac_address', 'domain', 'extension')
def get_dns(self, obj): @staticmethod
def get_dns(obj):
""" The name of the associated DNS object """
return obj.domain.name return obj.domain.name
def get_interface_extension(self, obj): @staticmethod
def get_interface_extension(obj):
""" The name of the associated Interface object """
return obj.domain.extension.name return obj.domain.extension.name
def get_macaddress(self, obj): @staticmethod
def get_macaddress(obj):
""" The string representation of the associated MAC address """
return str(obj.mac_address) return str(obj.mac_address)
class FullInterfaceSerializer(serializers.ModelSerializer): class FullInterfaceSerializer(serializers.ModelSerializer):
"""Serialisation complete d'une interface avec les ipv6 en plus""" """ Serializer for an Interface obejct. Use SerializerMethodField
to get ForeignKey values """
ipv4 = IpListSerializer(read_only=True) ipv4 = IpListSerializer(read_only=True)
ipv6 = Ipv6ListSerializer(read_only=True, many=True) ipv6 = Ipv6ListSerializer(read_only=True, many=True)
# TODO : use serializer.RelatedField to avoid duplicate code
mac_address = serializers.SerializerMethodField('get_macaddress') mac_address = serializers.SerializerMethodField('get_macaddress')
domain = serializers.SerializerMethodField('get_dns') domain = serializers.SerializerMethodField('get_dns')
extension = serializers.SerializerMethodField('get_interface_extension') extension = serializers.SerializerMethodField('get_interface_extension')
@ -99,26 +117,36 @@ class FullInterfaceSerializer(serializers.ModelSerializer):
model = Interface model = Interface
fields = ('ipv4', 'ipv6', 'mac_address', 'domain', 'extension') fields = ('ipv4', 'ipv6', 'mac_address', 'domain', 'extension')
def get_dns(self, obj): @staticmethod
def get_dns(obj):
""" The name of the associated DNS object """
return obj.domain.name return obj.domain.name
def get_interface_extension(self, obj): @staticmethod
def get_interface_extension(obj):
""" The name of the associated Extension object """
return obj.domain.extension.name return obj.domain.extension.name
def get_macaddress(self, obj): @staticmethod
def get_macaddress(obj):
""" The string representation of the associated MAC address """
return str(obj.mac_address) return str(obj.mac_address)
class ExtensionNameField(serializers.RelatedField): class ExtensionNameField(serializers.RelatedField):
"""Evaluation str d'un objet extension (.example.org)""" """ Serializer for Extension object field """
def to_representation(self, value): def to_representation(self, value):
return value.name return value.name
def to_internal_value(self, data):
pass
class TypeSerializer(serializers.ModelSerializer): class TypeSerializer(serializers.ModelSerializer):
"""Serialisation d'un iptype : extension et la liste des """ Serializer for an IpType object. Use SerializerMethodField to
ouvertures de port son evalués en get_... etant des get ForeignKey values. Infos about the general port policy is added """
foreign_key ou des relations manytomany"""
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')
@ -136,7 +164,10 @@ class TypeSerializer(serializers.ModelSerializer):
'ouverture_ports_tcp_in', 'ouverture_ports_tcp_out', 'ouverture_ports_tcp_in', 'ouverture_ports_tcp_out',
'ouverture_ports_udp_in', 'ouverture_ports_udp_out',) 'ouverture_ports_udp_in', 'ouverture_ports_udp_out',)
def get_port_policy(self, obj, protocole, io): @staticmethod
def get_port_policy(obj, protocole, io):
""" Generic utility function to get the policy for a given
port, protocole and IN or OUT """
if obj.ouverture_ports is None: if obj.ouverture_ports is None:
return [] return []
return map( return map(
@ -174,13 +205,19 @@ class ExtensionSerializer(serializers.ModelSerializer):
model = Extension model = Extension
fields = ('name', 'origin', 'origin_v6', 'zone_entry', 'soa') fields = ('name', 'origin', 'origin_v6', 'zone_entry', 'soa')
def get_origin_ip(self, obj): @staticmethod
return getattr(obj.origin, 'ipv4', None) def get_origin_ip(obj):
""" The IP of the associated origin for the zone """
return obj.origin.ipv4
def get_zone_name(self, obj): @staticmethod
def get_zone_name(obj):
""" The name of the associated zone """
return str(obj.dns_entry) return str(obj.dns_entry)
def get_soa_data(self, obj): @staticmethod
def get_soa_data(obj):
""" The representation of the associated SOA """
return {'mail': obj.soa.dns_soa_mail, 'param': obj.soa.dns_soa_param} return {'mail': obj.soa.dns_soa_mail, 'param': obj.soa.dns_soa_param}
@ -195,13 +232,19 @@ class MxSerializer(serializers.ModelSerializer):
model = Mx model = Mx
fields = ('zone', 'priority', 'name', 'mx_entry') fields = ('zone', 'priority', 'name', 'mx_entry')
def get_entry_name(self, obj): @staticmethod
def get_entry_name(obj):
""" The name of the DNS MX entry """
return str(obj.name) return str(obj.name)
def get_zone_name(self, obj): @staticmethod
def get_zone_name(obj):
""" The name of the associated zone of the MX record """
return obj.zone.name return obj.zone.name
def get_mx_name(self, obj): @staticmethod
def get_mx_name(obj):
""" The string representation of the entry to add to the DNS """
return str(obj.dns_entry) return str(obj.dns_entry)
@ -215,10 +258,14 @@ class TxtSerializer(serializers.ModelSerializer):
model = Txt model = Txt
fields = ('zone', 'txt_entry', 'field1', 'field2') fields = ('zone', 'txt_entry', 'field1', 'field2')
def get_zone_name(self, obj): @staticmethod
def get_zone_name(obj):
""" The name of the associated zone """
return str(obj.zone.name) return str(obj.zone.name)
def get_txt_name(self, obj): @staticmethod
def get_txt_name(obj):
""" The string representation of the entry to add to the DNS """
return str(obj.dns_entry) return str(obj.dns_entry)
@ -241,10 +288,14 @@ class SrvSerializer(serializers.ModelSerializer):
'srv_entry' 'srv_entry'
) )
def get_extension_name(self, obj): @staticmethod
def get_extension_name(obj):
""" The name of the associated extension """
return str(obj.extension.name) return str(obj.extension.name)
def get_srv_name(self, obj): @staticmethod
def get_srv_name(obj):
""" The string representation of the entry to add to the DNS """
return str(obj.dns_entry) return str(obj.dns_entry)
@ -259,13 +310,19 @@ class NsSerializer(serializers.ModelSerializer):
model = Ns model = Ns
fields = ('zone', 'ns', 'ns_entry') fields = ('zone', 'ns', 'ns_entry')
def get_zone_name(self, obj): @staticmethod
def get_zone_name(obj):
""" The name of the associated zone """
return obj.zone.name return obj.zone.name
def get_domain_name(self, obj): @staticmethod
def get_domain_name(obj):
""" The name of the associated NS target """
return str(obj.ns) return str(obj.ns)
def get_text_name(self, obj): @staticmethod
def get_text_name(obj):
""" The string representation of the entry to add to the DNS """
return str(obj.dns_entry) return str(obj.dns_entry)
@ -280,13 +337,19 @@ class DomainSerializer(serializers.ModelSerializer):
model = Domain model = Domain
fields = ('name', 'extension', 'cname', 'cname_entry') fields = ('name', 'extension', 'cname', 'cname_entry')
def get_zone_name(self, obj): @staticmethod
def get_zone_name(obj):
""" The name of the associated zone """
return obj.extension.name return obj.extension.name
def get_alias_name(self, obj): @staticmethod
def get_alias_name(obj):
""" The name of the associated alias """
return str(obj.cname) return str(obj.cname)
def get_cname_name(self, obj): @staticmethod
def get_cname_name(obj):
""" The name of the associated CNAME target """
return str(obj.dns_entry) return str(obj.dns_entry)
@ -300,13 +363,19 @@ class ServiceServersSerializer(serializers.ModelSerializer):
model = Service_link model = Service_link
fields = ('server', 'service', 'need_regen') fields = ('server', 'service', 'need_regen')
def get_server_name(self, obj): @staticmethod
def get_server_name(obj):
""" The name of the associated server """
return str(obj.server.domain.name) return str(obj.server.domain.name)
def get_service_name(self, obj): @staticmethod
def get_service_name(obj):
""" The name of the service name """
return str(obj.service) return str(obj.service)
def get_regen_status(self, obj): @staticmethod
def get_regen_status(obj):
""" The string representation of the regen status """
return obj.need_regen() return obj.need_regen()
@ -315,7 +384,19 @@ class OuverturePortsSerializer(serializers.Serializer):
ipv4 = serializers.SerializerMethodField() ipv4 = serializers.SerializerMethodField()
ipv6 = serializers.SerializerMethodField() ipv6 = serializers.SerializerMethodField()
def create(self, validated_data):
""" Creates a new object based on the un-serialized data.
Used to implement an abstract inherited method """
pass
def update(self, instance, validated_data):
""" Updates an object based on the un-serialized data.
Used to implement an abstract inherited method """
pass
@staticmethod
def get_ipv4(): def get_ipv4():
""" The representation of the policy for the IPv4 addresses """
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()],
@ -326,7 +407,9 @@ class OuverturePortsSerializer(serializers.Serializer):
for i in Interface.objects.all() if i.ipv4 for i in Interface.objects.all() if i.ipv4
} }
@staticmethod
def get_ipv6(): def get_ipv6():
""" The representation of the policy for the IPv6 addresses """
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()],

View file

@ -20,7 +20,10 @@
# You should have received a copy of the GNU General Public License along # You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc., # with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
"""machines.tests
The tests for the API module.
"""
from django.test import TestCase # from django.test import TestCase
# Create your tests here. # Create your tests here.

View file

@ -20,6 +20,9 @@
# You should have received a copy of the GNU General Public License along # You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc., # with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
"""machines.urls
The defined URLs for the Cotisations app
"""
from __future__ import unicode_literals from __future__ import unicode_literals

View file

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