diff --git a/machines/acl.py b/machines/acl.py
index 45cb6ec2..53f70c27 100644
--- a/machines/acl.py
+++ b/machines/acl.py
@@ -41,4 +41,3 @@ def can_view(user):
can = user.has_module_perms('machines')
return can, None if can else _("You don't have the right to view this"
" application.")
-
diff --git a/machines/admin.py b/machines/admin.py
index af721ff9..bafebb80 100644
--- a/machines/admin.py
+++ b/machines/admin.py
@@ -29,7 +29,6 @@ from __future__ import unicode_literals
from django.contrib import admin
from reversion.admin import VersionAdmin
-from .models import IpType, Machine, MachineType, Domain, IpList, Interface
from .models import (
Extension,
SOA,
@@ -47,6 +46,7 @@ from .models import (
Ipv6List,
OuverturePortList,
)
+from .models import IpType, Machine, MachineType, Domain, IpList, Interface
class MachineAdmin(VersionAdmin):
@@ -98,6 +98,7 @@ class TxtAdmin(VersionAdmin):
""" Admin view of a TXT object """
pass
+
class DNameAdmin(VersionAdmin):
""" Admin view of a DName object """
pass
@@ -147,12 +148,12 @@ class ServiceAdmin(VersionAdmin):
""" Admin view of a ServiceAdmin object """
list_display = ('service_type', 'min_time_regen', 'regular_time_regen')
+
class RoleAdmin(VersionAdmin):
""" Admin view of a RoleAdmin object """
pass
-
admin.site.register(Machine, MachineAdmin)
admin.site.register(MachineType, MachineTypeAdmin)
admin.site.register(IpType, IpTypeAdmin)
diff --git a/machines/forms.py b/machines/forms.py
index e9c75d59..abc96811 100644
--- a/machines/forms.py
+++ b/machines/forms.py
@@ -35,13 +35,12 @@ Formulaires d'ajout, edition et suppressions de :
from __future__ import unicode_literals
-from django.forms import ModelForm, Form
from django import forms
+from django.forms import ModelForm, Form
from django.utils.translation import ugettext_lazy as _
from re2o.field_permissions import FieldPermissionFormMixin
from re2o.mixins import FormRevMixin
-
from .models import (
Domain,
Machine,
@@ -68,6 +67,7 @@ from .models import (
class EditMachineForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
"""Formulaire d'édition d'une machine"""
+
class Meta:
model = Machine
fields = '__all__'
@@ -80,12 +80,14 @@ class EditMachineForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
class NewMachineForm(EditMachineForm):
"""Creation d'une machine, ne renseigne que le nom"""
+
class Meta(EditMachineForm.Meta):
fields = ['name']
class EditInterfaceForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
"""Edition d'une interface. Edition complète"""
+
class Meta:
model = Interface
fields = ['machine', 'type', 'ipv4', 'mac_address', 'details']
@@ -116,7 +118,7 @@ class EditInterfaceForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
interface=self.instance
)
if "machine" in self.fields:
- self.fields['machine'].queryset = Machine.objects.all()\
+ self.fields['machine'].queryset = Machine.objects.all() \
.select_related('user')
can_use_all_machinetype, _reason = MachineType.can_use_all(user)
if not can_use_all_machinetype:
@@ -128,12 +130,14 @@ class EditInterfaceForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
class AddInterfaceForm(EditInterfaceForm):
"""Ajout d'une interface à une machine. En fonction des droits,
affiche ou non l'ensemble des ip disponibles"""
+
class Meta(EditInterfaceForm.Meta):
fields = ['type', 'ipv4', 'mac_address', 'details']
class AliasForm(FormRevMixin, ModelForm):
"""Ajout d'un alias (et edition), CNAME, contenant nom et extension"""
+
class Meta:
model = Domain
fields = ['name', 'extension']
@@ -151,6 +155,7 @@ class AliasForm(FormRevMixin, ModelForm):
class DomainForm(FormRevMixin, ModelForm):
"""Ajout et edition d'un enregistrement de nom, relié à interface"""
+
class Meta:
model = Domain
fields = ['name']
@@ -183,6 +188,7 @@ class DelAliasForm(FormRevMixin, Form):
class MachineTypeForm(FormRevMixin, ModelForm):
"""Ajout et edition d'un machinetype, relié à un iptype"""
+
class Meta:
model = MachineType
fields = ['type', 'ip_type']
@@ -214,6 +220,7 @@ class DelMachineTypeForm(FormRevMixin, Form):
class IpTypeForm(FormRevMixin, ModelForm):
"""Formulaire d'ajout d'un iptype. Pas d'edition de l'ip de start et de
stop après creation"""
+
class Meta:
model = IpType
fields = '__all__'
@@ -227,6 +234,7 @@ class IpTypeForm(FormRevMixin, ModelForm):
class EditIpTypeForm(IpTypeForm):
"""Edition d'un iptype. Pas d'edition du rangev4 possible, car il faudrait
synchroniser les objets iplist"""
+
class Meta(IpTypeForm.Meta):
fields = ['extension', 'type', 'need_infra', 'domaine_ip_network', 'domaine_ip_netmask',
'prefix_v6', 'prefix_v6_length',
@@ -253,6 +261,7 @@ class DelIpTypeForm(FormRevMixin, Form):
class ExtensionForm(FormRevMixin, ModelForm):
"""Formulaire d'ajout et edition d'une extension"""
+
class Meta:
model = Extension
fields = '__all__'
@@ -285,6 +294,7 @@ class DelExtensionForm(FormRevMixin, Form):
class Ipv6ListForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
"""Gestion des ipv6 d'une machine"""
+
class Meta:
model = Ipv6List
fields = ['ipv6', 'slaac_ip']
@@ -296,6 +306,7 @@ class Ipv6ListForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
class SOAForm(FormRevMixin, ModelForm):
"""Ajout et edition d'un SOA"""
+
class Meta:
model = SOA
fields = '__all__'
@@ -324,6 +335,7 @@ class DelSOAForm(FormRevMixin, Form):
class MxForm(FormRevMixin, ModelForm):
"""Ajout et edition d'un MX"""
+
class Meta:
model = Mx
fields = ['zone', 'priority', 'name']
@@ -357,6 +369,7 @@ class NsForm(FormRevMixin, ModelForm):
"""Ajout d'un NS pour une zone
On exclue les CNAME dans les objets domain (interdit par la rfc)
donc on prend uniquemet """
+
class Meta:
model = Ns
fields = ['zone', 'ns']
@@ -388,6 +401,7 @@ class DelNsForm(FormRevMixin, Form):
class TxtForm(FormRevMixin, ModelForm):
"""Ajout d'un txt pour une zone"""
+
class Meta:
model = Txt
fields = '__all__'
@@ -416,6 +430,7 @@ class DelTxtForm(FormRevMixin, Form):
class DNameForm(FormRevMixin, ModelForm):
"""Add a DNAME entry for a zone"""
+
class Meta:
model = DName
fields = '__all__'
@@ -444,6 +459,7 @@ class DelDNameForm(FormRevMixin, Form):
class SrvForm(FormRevMixin, ModelForm):
"""Ajout d'un srv pour une zone"""
+
class Meta:
model = Srv
fields = '__all__'
@@ -473,6 +489,7 @@ class DelSrvForm(FormRevMixin, Form):
class NasForm(FormRevMixin, ModelForm):
"""Ajout d'un type de nas (machine d'authentification,
swicths, bornes...)"""
+
class Meta:
model = Nas
fields = '__all__'
@@ -501,6 +518,7 @@ class DelNasForm(FormRevMixin, Form):
class RoleForm(FormRevMixin, ModelForm):
"""Add and edit role."""
+
class Meta:
model = Role
fields = '__all__'
@@ -509,9 +527,9 @@ class RoleForm(FormRevMixin, ModelForm):
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
super(RoleForm, self).__init__(*args, prefix=prefix, **kwargs)
self.fields['servers'].queryset = (Interface.objects.all()
- .select_related(
- 'domain__extension'
- ))
+ .select_related(
+ 'domain__extension'
+ ))
class DelRoleForm(FormRevMixin, Form):
@@ -533,6 +551,7 @@ class DelRoleForm(FormRevMixin, Form):
class ServiceForm(FormRevMixin, ModelForm):
"""Ajout et edition d'une classe de service : dns, dhcp, etc"""
+
class Meta:
model = Service
fields = '__all__'
@@ -541,9 +560,9 @@ class ServiceForm(FormRevMixin, ModelForm):
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
super(ServiceForm, self).__init__(*args, prefix=prefix, **kwargs)
self.fields['servers'].queryset = (Interface.objects.all()
- .select_related(
- 'domain__extension'
- ))
+ .select_related(
+ 'domain__extension'
+ ))
def save(self, commit=True):
# TODO : None of the parents of ServiceForm use the commit
@@ -574,6 +593,7 @@ class DelServiceForm(FormRevMixin, Form):
class VlanForm(FormRevMixin, ModelForm):
"""Ajout d'un vlan : id, nom"""
+
class Meta:
model = Vlan
fields = ['vlan_id', 'name', 'comment']
@@ -614,6 +634,7 @@ class DelVlanForm(FormRevMixin, Form):
class EditOuverturePortConfigForm(FormRevMixin, ModelForm):
"""Edition de la liste des profils d'ouverture de ports
pour l'interface"""
+
class Meta:
model = Interface
fields = ['port_lists']
@@ -630,6 +651,7 @@ class EditOuverturePortConfigForm(FormRevMixin, ModelForm):
class EditOuverturePortListForm(FormRevMixin, ModelForm):
"""Edition de la liste des ports et profils d'ouverture
des ports"""
+
class Meta:
model = OuverturePortList
fields = '__all__'
@@ -642,9 +664,10 @@ class EditOuverturePortListForm(FormRevMixin, ModelForm):
**kwargs
)
-
+
class SshFpForm(FormRevMixin, ModelForm):
"""Edits a SSHFP record."""
+
class Meta:
model = SshFp
exclude = ('machine',)
@@ -656,4 +679,3 @@ class SshFpForm(FormRevMixin, ModelForm):
prefix=prefix,
**kwargs
)
-
diff --git a/machines/models.py b/machines/models.py
index 74fc01a1..282fc1ab 100644
--- a/machines/models.py
+++ b/machines/models.py
@@ -27,32 +27,30 @@ The models definitions for the Machines app
from __future__ import unicode_literals
-from datetime import timedelta
+import base64
+import hashlib
import re
+from datetime import timedelta
from ipaddress import IPv6Address
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.models import Q
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
from django.forms import ValidationError
-from django.utils.functional import cached_property
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 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.mixins import AclMixin, RevMixin
-import users.models
-import preferences.models
-
class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
""" 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"""
if not user_request.has_perm('machines.view_machine'):
return False, _("You don't have the right to view all the"
- " machines.")
+ " machines.")
return True, None
@staticmethod
@@ -131,9 +129,9 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
except users.models.User.DoesNotExist:
return False, _("Nonexistent user.")
max_lambdauser_interfaces = (preferences.models.OptionalMachine
- .get_cached_value(
- 'max_lambdauser_interfaces'
- ))
+ .get_cached_value(
+ 'max_lambdauser_interfaces'
+ ))
if not user_request.has_perm('machines.add_machine'):
if not (preferences.models.OptionalMachine
.get_cached_value('create_machine')):
@@ -180,7 +178,7 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
**kwargs
)[0]):
return False, _("You don't have the right to delete a machine"
- " of another user.")
+ " of another user.")
return True, None
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
self.user != user_request):
return False, _("You don't have the right to view other machines"
- " than yours.")
+ " than yours.")
return True, None
@cached_property
@@ -213,14 +211,14 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
machine"""
return Domain.objects.filter(
interface_parent__machine=self
- ).values_list('name', flat=True).distinct()
+ ).values_list('name', flat=True).distinct()
@cached_property
def all_complete_names(self):
"""Renvoie tous les tls complets de la machine"""
return [str(domain) for domain in Domain.objects.filter(
Q(cname__interface_parent__machine=self) | Q(interface_parent__machine=self)
- )]
+ )]
def __init__(self, *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")
)
reverse_v4 = models.BooleanField(
- default=False,
- help_text=_("Enable reverse DNS for IPv4"),
+ default=False,
+ help_text=_("Enable reverse DNS for IPv4"),
)
prefix_v6 = models.GenericIPAddressField(
protocol='IPv6',
@@ -310,10 +308,10 @@ class IpType(RevMixin, AclMixin, models.Model):
MaxValueValidator(128),
MinValueValidator(0)
]
- )
+ )
reverse_v6 = models.BooleanField(
- default=False,
- help_text=_("Enable reverse DNS for IPv6"),
+ default=False,
+ help_text=_("Enable reverse DNS for IPv6"),
)
vlan = models.ForeignKey(
'Vlan',
@@ -333,7 +331,7 @@ class IpType(RevMixin, AclMixin, models.Model):
("use_all_iptype", _("Can use all IP types")),
)
verbose_name = _("IP type")
- verbose_name_plural = ("IP types")
+ verbose_name_plural = "IP types"
@cached_property
def ip_range(self):
@@ -373,9 +371,9 @@ class IpType(RevMixin, AclMixin, models.Model):
def ip6_set_full_info(self):
if self.prefix_v6:
return {
- 'network' : str(self.prefix_v6),
- 'netmask' : 'ffff:ffff:ffff:ffff::',
- 'netmask_cidr' : str(self.prefix_v6_length),
+ 'network': str(self.prefix_v6),
+ 'netmask': 'ffff:ffff:ffff:ffff::',
+ 'netmask_cidr': str(self.prefix_v6_length),
'vlan': str(self.vlan),
'vlan_id': self.vlan.vlan_id
}
@@ -394,10 +392,10 @@ class IpType(RevMixin, AclMixin, models.Model):
def ip_net_full_info(self):
"""Renvoie les infos du network contenant du range"""
return {
- 'network' : str(self.ip_network.network),
- 'netmask' : str(self.ip_network.netmask),
- 'broadcast' : str(self.ip_network.broadcast),
- 'netmask_cidr' : str(self.ip_network.prefixlen),
+ 'network': str(self.ip_network.network),
+ 'netmask': str(self.ip_network.netmask),
+ 'broadcast': str(self.ip_network.broadcast),
+ 'netmask_cidr': str(self.ip_network.prefixlen),
}
@cached_property
@@ -448,9 +446,9 @@ class IpType(RevMixin, AclMixin, models.Model):
return
else:
for ipv6 in Ipv6List.objects.filter(
- interface__in=Interface.objects.filter(
- type__in=MachineType.objects.filter(ip_type=self)
- )
+ interface__in=Interface.objects.filter(
+ type__in=MachineType.objects.filter(ip_type=self)
+ )
):
ipv6.check_and_replace_prefix(prefix=self.prefix_v6)
@@ -814,8 +812,8 @@ class Txt(RevMixin, AclMixin, models.Model):
verbose_name_plural = _("TXT records")
def __str__(self):
- return str(self.zone) + " : " + str(self.field1) + " " +\
- str(self.field2)
+ return str(self.zone) + " : " + str(self.field1) + " " + \
+ str(self.field2)
@cached_property
def dns_entry(self):
@@ -874,7 +872,7 @@ class Srv(RevMixin, AclMixin, models.Model):
default=0,
validators=[MaxValueValidator(65535)],
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(
validators=[MaxValueValidator(65535)],
@@ -894,17 +892,17 @@ class Srv(RevMixin, AclMixin, models.Model):
verbose_name_plural = _("SRV records")
def __str__(self):
- return str(self.service) + ' ' + str(self.protocole) + ' ' +\
- str(self.extension) + ' ' + str(self.priority) +\
- ' ' + str(self.weight) + str(self.port) + str(self.target)
+ return str(self.service) + ' ' + str(self.protocole) + ' ' + \
+ str(self.extension) + ' ' + str(self.priority) + \
+ ' ' + str(self.weight) + str(self.port) + str(self.target)
@cached_property
def dns_entry(self):
"""Renvoie l'enregistrement SRV complet pour le fichier de zone"""
- return str(self.service) + '._' + str(self.protocole).lower() +\
- str(self.extension) + '. ' + str(self.ttl) + ' IN SRV ' +\
- str(self.priority) + ' ' + str(self.weight) + ' ' +\
- str(self.port) + ' ' + str(self.target) + '.'
+ return str(self.service) + '._' + str(self.protocole).lower() + \
+ str(self.extension) + '. ' + str(self.ttl) + ' IN SRV ' + \
+ str(self.priority) + ' ' + str(self.weight) + ' ' + \
+ str(self.port) + ' ' + str(self.target) + '.'
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
cf RFC, 1 is sha1 , 2 sha256"""
return {
- "1" : hashlib.sha1(base64.b64decode(self.pub_key_entry)).hexdigest(),
- "2" : hashlib.sha256(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(),
}
class Meta:
@@ -973,7 +971,6 @@ class SshFp(RevMixin, AclMixin, models.Model):
return str(self.algo) + ' ' + str(self.comment)
-
class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
""" Une interface. Objet clef de l'application machine :
- 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'):
self.sync_ipv6_slaac()
elif (preferences.models.OptionalMachine
- .get_cached_value('ipv6_mode') == 'DHCPV6'):
+ .get_cached_value('ipv6_mode') == 'DHCPV6'):
self.sync_ipv6_dhcpv6()
else:
return
@@ -1080,7 +1077,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
.get_cached_value('ipv6_mode') == 'SLAAC'):
return self.ipv6list.all()
elif (preferences.models.OptionalMachine
- .get_cached_value('ipv6_mode') == 'DHCPV6'):
+ .get_cached_value('ipv6_mode') == 'DHCPV6'):
return self.ipv6list.filter(slaac_ip=False)
else:
return None
@@ -1159,9 +1156,9 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
.get_cached_value('create_machine')):
return False, _("You can't add a machine.")
max_lambdauser_interfaces = (preferences.models.OptionalMachine
- .get_cached_value(
- 'max_lambdauser_interfaces'
- ))
+ .get_cached_value(
+ 'max_lambdauser_interfaces'
+ ))
if machine.user != user_request:
return False, _("You don't have the right to add an interface"
" to a machine of another user.")
@@ -1365,8 +1362,8 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
def clean(self, *args, **kwargs):
if self.slaac_ip and (Ipv6List.objects
- .filter(interface=self.interface, slaac_ip=True)
- .exclude(id=self.id)):
+ .filter(interface=self.interface, slaac_ip=True)
+ .exclude(id=self.id)):
raise ValidationError(_("A SLAAC IP address is already registered."))
prefix_v6 = self.interface.type.ip_type.prefix_v6.encode().decode('utf-8')
if prefix_v6:
@@ -1498,18 +1495,18 @@ class Domain(RevMixin, AclMixin, models.Model):
return False, _("Nonexistent interface.")
if not user_request.has_perm('machines.add_domain'):
max_lambdauser_aliases = (preferences.models.OptionalMachine
- .get_cached_value(
- 'max_lambdauser_aliases'
- ))
+ .get_cached_value(
+ 'max_lambdauser_aliases'
+ ))
if interface.machine.user != user_request:
return False, _("You don't have the right to add an alias to a"
" machine of another user.")
if Domain.objects.filter(
cname__in=Domain.objects.filter(
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"
" you are allowed to create yourself (%s). "
% max_lambdauser_aliases)
@@ -1695,7 +1692,7 @@ class Service(RevMixin, AclMixin, models.Model):
def ask_regen(self):
""" 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)
return
@@ -1703,11 +1700,11 @@ class Service(RevMixin, AclMixin, models.Model):
""" Django ne peut créer lui meme les relations manytomany avec table
intermediaire explicite"""
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.save()
- Service_link.objects.filter(service=self).exclude(server__in=servers)\
+ Service_link.objects.filter(service=self).exclude(server__in=servers) \
.delete()
return
@@ -1754,10 +1751,10 @@ class Service_link(RevMixin, AclMixin, models.Model):
régénération de service"""
return bool(
(self.asked_regen and (
- self.last_regen + self.service.min_time_regen
+ self.last_regen + self.service.min_time_regen
) < timezone.now()
- ) or (
- self.last_regen + self.service.regular_time_regen
+ ) or (
+ self.last_regen + self.service.regular_time_regen
) < timezone.now()
)
@@ -1875,9 +1872,8 @@ class OuverturePort(RevMixin, AclMixin, models.Model):
),
default=OUT,
)
-
+
class Meta:
- verbose_name = _("ports opening")
verbose_name = _("ports openings")
def __str__(self):
@@ -2044,4 +2040,3 @@ def srv_post_save(**_kwargs):
def srv_post_delete(**_kwargs):
"""Regeneration dns après modification d'un SRV"""
regen('dns')
-
diff --git a/machines/serializers.py b/machines/serializers.py
index f3a47c55..3f5fb966 100644
--- a/machines/serializers.py
+++ b/machines/serializers.py
@@ -26,8 +26,8 @@
Serializers for the Machines app
"""
-
from rest_framework import serializers
+
from machines.models import (
Interface,
IpType,
@@ -148,13 +148,13 @@ class TypeSerializer(serializers.ModelSerializer):
get ForeignKey values. Infos about the general port policy is added """
extension = ExtensionNameField(read_only=True)
- ouverture_ports_tcp_in = serializers\
+ ouverture_ports_tcp_in = serializers \
.SerializerMethodField('get_port_policy_input_tcp')
- ouverture_ports_tcp_out = serializers\
+ ouverture_ports_tcp_out = serializers \
.SerializerMethodField('get_port_policy_output_tcp')
- ouverture_ports_udp_in = serializers\
+ ouverture_ports_udp_in = serializers \
.SerializerMethodField('get_port_policy_input_udp')
- ouverture_ports_udp_out = serializers\
+ ouverture_ports_udp_out = serializers \
.SerializerMethodField('get_port_policy_output_udp')
class Meta:
@@ -400,7 +400,7 @@ class OuverturePortsSerializer(serializers.Serializer):
return {
i.ipv4.ipv4: {
"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_out": [j.udp_ports_out() for j in i.port_lists.all()],
}
@@ -413,7 +413,7 @@ class OuverturePortsSerializer(serializers.Serializer):
return {
i.ipv6: {
"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_out": [j.udp_ports_out() for j in i.port_lists.all()],
}
diff --git a/machines/templates/machines/aff_alias.html b/machines/templates/machines/aff_alias.html
index 17266a6e..5a1bc8f8 100644
--- a/machines/templates/machines/aff_alias.html
+++ b/machines/templates/machines/aff_alias.html
@@ -28,21 +28,20 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "Aliases" %}
-
-
+
+
{% trans "Aliases" %}
+
+
{% for alias in alias_list %}
{{ alias }}
{% can_edit alias %}
- {% include 'buttons/edit.html' with href='machines:edit-alias' id=alias.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-alias' id=alias.id %}
{% acl_end %}
{% history_button alias %}
{% endfor %}
-
diff --git a/machines/templates/machines/aff_dname.html b/machines/templates/machines/aff_dname.html
index 7e043d7c..66883057 100644
--- a/machines/templates/machines/aff_dname.html
+++ b/machines/templates/machines/aff_dname.html
@@ -26,11 +26,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "Target zone" %}
-
{% trans "Record" %}
-
-
+
+
{% trans "Target zone" %}
+
{% trans "Record" %}
+
+
{% for dname in dname_list %}
@@ -38,11 +38,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ dname.dns_entry }}
{% can_edit dname %}
- {% include 'buttons/edit.html' with href='machines:edit-dname' id=dname.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-dname' id=dname.id %}
{% acl_end %}
{% history_button dname %}
{% endfor %}
-
diff --git a/machines/templates/machines/aff_extension.html b/machines/templates/machines/aff_extension.html
index 43bb9e39..b8493f5f 100644
--- a/machines/templates/machines/aff_extension.html
+++ b/machines/templates/machines/aff_extension.html
@@ -30,34 +30,33 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
diff --git a/machines/templates/machines/aff_iptype.html b/machines/templates/machines/aff_iptype.html
index b8ed5293..b408bfb1 100644
--- a/machines/templates/machines/aff_iptype.html
+++ b/machines/templates/machines/aff_iptype.html
@@ -31,36 +31,36 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "IP type" %}
-
{% trans "Extension" %}
-
{% trans "'infra' right required" %}
-
{% trans "IPv4 range" %}
-
{% trans "v6 prefix" %}
-
{% trans "DNSSEC reverse v4/v6" %}
-
{% trans "On VLAN(s)" %}
-
{% trans "Default ports opening" %}
-
-
+
+
{% trans "IP type" %}
+
{% trans "Extension" %}
+
{% trans "'infra' right required" %}
+
{% trans "IPv4 range" %}
+
{% trans "v6 prefix" %}
+
{% trans "DNSSEC reverse v4/v6" %}
+
{% trans "On VLAN(s)" %}
+
{% trans "Default ports opening" %}
+
+
{% for type in iptype_list %}
-
-
{{ type.type }}
-
{{ type.extension }}
-
{{ type.need_infra|tick }}
-
{{ type.domaine_ip_start }}-{{ type.domaine_ip_stop }}{% if type.ip_network %} on {{ type.ip_network }}{% endif %}
+ {% can_edit type %}
+ {% include 'buttons/edit.html' with href='machines:edit-iptype' id=type.id %}
+ {% acl_end %}
+ {% history_button type %}
+
+
{% endfor %}
-
diff --git a/machines/templates/machines/aff_ipv6.html b/machines/templates/machines/aff_ipv6.html
index a98c0327..e8e4a48e 100644
--- a/machines/templates/machines/aff_ipv6.html
+++ b/machines/templates/machines/aff_ipv6.html
@@ -28,26 +28,25 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "IPv6 addresses" %}
-
{% trans "SLAAC" %}
-
-
-
+
+
{% trans "IPv6 addresses" %}
+
{% trans "SLAAC" %}
+
+
+
{% for ipv6 in ipv6_list %}
{{ ipv6.ipv6 }}
{{ ipv6.slaac_ip }}
{% can_edit ipv6 %}
- {% include 'buttons/edit.html' with href='machines:edit-ipv6list' id=ipv6.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-ipv6list' id=ipv6.id %}
{% acl_end %}
{% can_delete ipv6 %}
- {% include 'buttons/suppr.html' with href='machines:del-ipv6list' id=ipv6.id %}
+ {% include 'buttons/suppr.html' with href='machines:del-ipv6list' id=ipv6.id %}
{% acl_end %}
{% history_button ipv6 %}
{% endfor %}
-
diff --git a/machines/templates/machines/aff_machines.html b/machines/templates/machines/aff_machines.html
index 76ba3451..bd65fc76 100644
--- a/machines/templates/machines/aff_machines.html
+++ b/machines/templates/machines/aff_machines.html
@@ -28,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if machines_list.paginator %}
- {% include "pagination.html" with list=machines_list %}
+ {% include "pagination.html" with list=machines_list %}
{% endif %}
@@ -61,156 +61,160 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% can_create Interface machine.id %}
{% trans "Create an interface" as tr_create_an_interface %}
{% include 'buttons/add.html' with href='machines:new-interface' id=machine.id desc=tr_create_an_interface %}
- {% acl_end %}
- {% history_button machine %}
- {% can_delete machine %}
+ {% acl_end %}
+ {% history_button machine %}
+ {% can_delete machine %}
{% include 'buttons/suppr.html' with href='machines:del-machine' id=machine.id %}
- {% acl_end %}
-
-
- {% for interface in machine.interface_set.all %}
+ {% acl_end %}
+
+
+ {% for interface in machine.interface_set.all %}
{% if machines_list.paginator %}
- {% include "pagination.html" with list=machines_list %}
+ {% include "pagination.html" with list=machines_list %}
{% endif %}
-
diff --git a/machines/templates/machines/aff_machinetype.html b/machines/templates/machines/aff_machinetype.html
index 4725ffb8..a55a5370 100644
--- a/machines/templates/machines/aff_machinetype.html
+++ b/machines/templates/machines/aff_machinetype.html
@@ -28,11 +28,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "Machine type" %}
-
{% trans "Matching IP type" %}
-
-
+
+
{% trans "Machine type" %}
+
{% trans "Matching IP type" %}
+
+
{% for type in machinetype_list %}
@@ -40,11 +40,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ type.ip_type }}
{% can_edit type %}
- {% include 'buttons/edit.html' with href='machines:edit-machinetype' id=type.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-machinetype' id=type.id %}
{% acl_end %}
{% history_button type %}
{% endfor %}
-
diff --git a/machines/templates/machines/aff_mx.html b/machines/templates/machines/aff_mx.html
index e57e73a4..4a50724b 100644
--- a/machines/templates/machines/aff_mx.html
+++ b/machines/templates/machines/aff_mx.html
@@ -28,12 +28,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "Concerned zone" %}
-
{% trans "Priority" %}
-
{% trans "Record" %}
-
-
+
+
{% trans "Concerned zone" %}
+
{% trans "Priority" %}
+
{% trans "Record" %}
+
+
{% for mx in mx_list %}
@@ -42,11 +42,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ mx.name }}
{% can_edit mx %}
- {% include 'buttons/edit.html' with href='machines:edit-mx' id=mx.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-mx' id=mx.id %}
{% acl_end %}
{% history_button mx %}
{% endfor %}
-
diff --git a/machines/templates/machines/aff_nas.html b/machines/templates/machines/aff_nas.html
index 0dd612cc..84013f90 100644
--- a/machines/templates/machines/aff_nas.html
+++ b/machines/templates/machines/aff_nas.html
@@ -29,29 +29,28 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "Name" %}
-
{% trans "NAS device type" %}
-
{% trans "Machine type linked to the NAS device" %}
-
{% trans "Access mode" %}
-
{% trans "MAC address auto capture" %}
-
-
+
+
{% trans "Name" %}
+
{% trans "NAS device type" %}
+
{% trans "Machine type linked to the NAS device" %}
+
{% trans "Access mode" %}
+
{% trans "MAC address auto capture" %}
+
+
{% for nas in nas_list %}
{{ nas.name }}
-
{{ nas.nas_type }}
+
{{ nas.nas_type }}
{{ nas.machine_type }}
{{ nas.port_access_mode }}
{{ nas.autocapture_mac|tick }}
{% can_edit nas %}
- {% include 'buttons/edit.html' with href='machines:edit-nas' id=nas.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-nas' id=nas.id %}
{% acl_end %}
{% history_button nas %}
{% endfor %}
-
diff --git a/machines/templates/machines/aff_ns.html b/machines/templates/machines/aff_ns.html
index e2187e3e..2968607a 100644
--- a/machines/templates/machines/aff_ns.html
+++ b/machines/templates/machines/aff_ns.html
@@ -28,11 +28,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "Concerned zone" %}
-
{% trans "Authoritarian interface for the concerned zone" %}
-
-
+
+
{% trans "Concerned zone" %}
+
{% trans "Authoritarian interface for the concerned zone" %}
+
+
{% for ns in ns_list %}
@@ -40,11 +40,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ ns.ns }}
{% can_edit ns %}
- {% include 'buttons/edit.html' with href='machines:edit-ns' id=ns.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-ns' id=ns.id %}
{% acl_end %}
{% history_button ns %}
{% endfor %}
-
diff --git a/machines/templates/machines/aff_role.html b/machines/templates/machines/aff_role.html
index bba094b3..b6303917 100644
--- a/machines/templates/machines/aff_role.html
+++ b/machines/templates/machines/aff_role.html
@@ -29,13 +29,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "Role name" %}
-
{% trans "Specific role" %}
-
{% trans "Servers" %}
-
-
-
+
+
{% trans "Role name" %}
+
{% trans "Specific role" %}
+
{% trans "Servers" %}
+
+
+
{% for role in role_list %}
@@ -43,12 +43,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ role.specific_role }}
{% for serv in role.servers.all %}{{ serv }}, {% endfor %}
- {% can_edit role %}
- {% include 'buttons/edit.html' with href='machines:edit-role' id=role.id %}
- {% acl_end %}
- {% history_button role %}
-
-
+ {% can_edit role %}
+ {% include 'buttons/edit.html' with href='machines:edit-role' id=role.id %}
+ {% acl_end %}
+ {% history_button role %}
+
+
{% endfor %}
-
diff --git a/machines/templates/machines/aff_servers.html b/machines/templates/machines/aff_servers.html
index 7dd25495..4134c269 100644
--- a/machines/templates/machines/aff_servers.html
+++ b/machines/templates/machines/aff_servers.html
@@ -27,13 +27,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "Service name" %}
-
{% trans "Server" %}
-
{% trans "Last regeneration" %}
-
{% trans "Regeneration required" %}
-
{% trans "Regeneration activated" %}
-
+
+
{% trans "Service name" %}
+
{% trans "Server" %}
+
{% trans "Last regeneration" %}
+
{% trans "Regeneration required" %}
+
{% trans "Regeneration activated" %}
+
{% for server in servers_list %}
@@ -47,4 +47,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endfor %}
-
diff --git a/machines/templates/machines/aff_service.html b/machines/templates/machines/aff_service.html
index df04b93c..102ceead 100644
--- a/machines/templates/machines/aff_service.html
+++ b/machines/templates/machines/aff_service.html
@@ -28,14 +28,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "Service name" %}
-
{% trans "Minimal time before regeneration" %}
-
{% trans "Maximal time before regeneration" %}
-
{% trans "Included servers" %}
-
{% trans "Ask for regeneration" %}
-
-
+
+
{% trans "Service name" %}
+
{% trans "Minimal time before regeneration" %}
+
{% trans "Maximal time before regeneration" %}
+
{% trans "Included servers" %}
+
{% trans "Ask for regeneration" %}
+
+
{% for service in service_list %}
@@ -43,14 +43,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ service.min_time_regen }}
{{ service.regular_time_regen }}
{% for serv in service.servers.all %}{{ serv }}, {% endfor %}
-
+
{% can_edit service %}
- {% include 'buttons/edit.html' with href='machines:edit-service' id=service.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-service' id=service.id %}
{% acl_end %}
{% history_button service %}
{% endfor %}
-
diff --git a/machines/templates/machines/aff_soa.html b/machines/templates/machines/aff_soa.html
index fbf206e0..9199533e 100644
--- a/machines/templates/machines/aff_soa.html
+++ b/machines/templates/machines/aff_soa.html
@@ -28,15 +28,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "Name" %}
-
{% trans "Mail" %}
-
{% trans "Refresh" %}
-
{% trans "Retry" %}
-
{% trans "Expire" %}
-
{% trans "TTL" %}
-
-
+
+
{% trans "Name" %}
+
{% trans "Mail" %}
+
{% trans "Refresh" %}
+
{% trans "Retry" %}
+
{% trans "Expire" %}
+
{% trans "TTL" %}
+
+
{% for soa in soa_list %}
@@ -48,11 +48,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ soa.ttl }}
{% can_edit soa %}
- {% include 'buttons/edit.html' with href='machines:edit-soa' id=soa.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-soa' id=soa.id %}
{% acl_end %}
{% history_button soa %}
{% endfor %}
-
diff --git a/machines/templates/machines/aff_srv.html b/machines/templates/machines/aff_srv.html
index 2ee569e0..71fb78a2 100644
--- a/machines/templates/machines/aff_srv.html
+++ b/machines/templates/machines/aff_srv.html
@@ -28,17 +28,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "Service" %}
-
{% trans "Protocol" %}
-
{% trans "Extension" %}
-
{% trans "TTL" %}
-
{% trans "Priority" %}
-
{% trans "Weight" %}
-
{% trans "Port" %}
-
{% trans "Target" %}
-
-
+
+
{% trans "Service" %}
+
{% trans "Protocol" %}
+
{% trans "Extension" %}
+
{% trans "TTL" %}
+
{% trans "Priority" %}
+
{% trans "Weight" %}
+
{% trans "Port" %}
+
{% trans "Target" %}
+
+
{% for srv in srv_list %}
@@ -52,11 +52,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ srv.target }}
{% can_edit srv %}
- {% include 'buttons/edit.html' with href='machines:edit-srv' id=srv.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-srv' id=srv.id %}
{% acl_end %}
{% history_button srv %}
{% endfor %}
-
diff --git a/machines/templates/machines/aff_sshfp.html b/machines/templates/machines/aff_sshfp.html
index f684d6a0..08d1df13 100644
--- a/machines/templates/machines/aff_sshfp.html
+++ b/machines/templates/machines/aff_sshfp.html
@@ -27,12 +27,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "SSH public key" %}
-
{% trans "Algorithm used" %}
-
{% trans "Comment" %}
-
-
+
+
{% trans "SSH public key" %}
+
{% trans "Algorithm used" %}
+
{% trans "Comment" %}
+
+
{% for sshfp in sshfp_list %}
@@ -41,15 +41,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ sshfp.comment }}
{% can_edit sshfp %}
- {% include 'buttons/edit.html' with href='machines:edit-sshfp' id=sshfp.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-sshfp' id=sshfp.id %}
{% acl_end %}
{% history_button sshfp %}
{% can_delete sshfp %}
- {% include 'buttons/suppr.html' with href='machines:del-sshfp' id=sshfp.id %}
+ {% include 'buttons/suppr.html' with href='machines:del-sshfp' id=sshfp.id %}
{% acl_end %}
{% endfor %}
-
diff --git a/machines/templates/machines/aff_txt.html b/machines/templates/machines/aff_txt.html
index 41778cba..456f7343 100644
--- a/machines/templates/machines/aff_txt.html
+++ b/machines/templates/machines/aff_txt.html
@@ -28,11 +28,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "Concerned zone" %}
-
{% trans "Record" %}
-
-
+
+
{% trans "Concerned zone" %}
+
{% trans "Record" %}
+
+
{% for txt in txt_list %}
@@ -40,11 +40,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ txt.dns_entry }}
{% can_edit txt %}
- {% include 'buttons/edit.html' with href='machines:edit-txt' id=txt.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-txt' id=txt.id %}
{% acl_end %}
{% history_button txt %}
{% endfor %}
-
diff --git a/machines/templates/machines/aff_vlan.html b/machines/templates/machines/aff_vlan.html
index 0c1ed053..3ccbfcb0 100644
--- a/machines/templates/machines/aff_vlan.html
+++ b/machines/templates/machines/aff_vlan.html
@@ -29,23 +29,23 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-
-
{% trans "ID" %}
-
{% trans "Name" %}
-
{% trans "Comment" %}
-
{% trans "IP ranges" %}
-
-
+
+
{% trans "ID" %}
+
{% trans "Name" %}
+
{% trans "Comment" %}
+
{% trans "IP ranges" %}
+
+
{% for vlan in vlan_list %}
{{ vlan.vlan_id }}
-
{{ vlan.name }}
+
{{ vlan.name }}
{{ vlan.comment }}
-
{% for range in vlan.iptype_set.all %}{{ range }}, {% endfor%}
+
{% for range in vlan.iptype_set.all %}{{ range }}, {% endfor %}
{% can_edit vlan %}
- {% include 'buttons/edit.html' with href='machines:edit-vlan' id=vlan.id %}
+ {% include 'buttons/edit.html' with href='machines:edit-vlan' id=vlan.id %}
{% acl_end %}
{% history_button vlan %}
@@ -53,4 +53,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endfor %}
-
diff --git a/machines/templates/machines/delete.html b/machines/templates/machines/delete.html
index ae365c69..f009f905 100644
--- a/machines/templates/machines/delete.html
+++ b/machines/templates/machines/delete.html
@@ -30,14 +30,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %}
-
-
-
-
+
+
+
+
{% endblock %}
-
diff --git a/machines/templates/machines/edit_portlist.html b/machines/templates/machines/edit_portlist.html
index 5bb8723f..a7aa6f04 100644
--- a/machines/templates/machines/edit_portlist.html
+++ b/machines/templates/machines/edit_portlist.html
@@ -29,44 +29,45 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Machines" %}{% endblock %}
{% block content %}
-{% bootstrap_form_errors port_list %}
+ {% bootstrap_form_errors port_list %}
-
-
+ function add_port() {
+ var new_index = document.getElementsByClassName('port').length;
+ document.getElementById('id_form-TOTAL_FORMS').value =
+ parseInt(document.getElementById('id_form-TOTAL_FORMS').value) + 1;
+ var new_port = document.createElement('div');
+ new_port.className = 'port';
+ new_port.innerHTML = template.replace(/__prefix__/g, new_index);
+ document.getElementById('formset').appendChild(new_port);
+ }
+
+ document.addEventListener("DOMContentLoaded", function () {
+ document.getElementById("add_one").addEventListener("click", add_port, true);
+ });
+
{% endblock %}
-
diff --git a/machines/templates/machines/index.html b/machines/templates/machines/index.html
index 509334a0..ceef062c 100644
--- a/machines/templates/machines/index.html
+++ b/machines/templates/machines/index.html
@@ -29,10 +29,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Machines" %}{% endblock %}
{% block content %}
-
{% trans "Machines" %}
- {% include "machines/aff_machines.html" with machines_list=machines_list %}
-
-
-
+
{% trans "Machines" %}
+ {% include "machines/aff_machines.html" with machines_list=machines_list %}
+
+
+
{% endblock %}
-
diff --git a/machines/templates/machines/index_alias.html b/machines/templates/machines/index_alias.html
index 2d33177f..a2ffe66b 100644
--- a/machines/templates/machines/index_alias.html
+++ b/machines/templates/machines/index_alias.html
@@ -30,11 +30,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %}
{% trans "List of the aliases of the interface" %}
- {% trans " Add an alias" %}
- {% trans " Delete one or several aliases" %}
- {% include "machines/aff_alias.html" with alias_list=alias_list %}
-
-
-
+ {% trans " Add an alias" %}
+ {% trans " Delete one or several aliases" %}
+ {% include "machines/aff_alias.html" with alias_list=alias_list %}
+
+
+
{% endblock %}
-
diff --git a/machines/templates/machines/index_extension.html b/machines/templates/machines/index_extension.html
index 6669d197..e689d479 100644
--- a/machines/templates/machines/index_extension.html
+++ b/machines/templates/machines/index_extension.html
@@ -24,67 +24,86 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %}
{% load bootstrap3 %}
-
{% load acl %}
{% load i18n %}
{% block title %}{% trans "Machines" %}{% endblock %}
{% block content %}
-
+ {% can_create IpType %}
+
+ {% trans " Add an IP type" %}
+
+ {% acl_end %}
+
+ {% trans " Delete one or several IP types" %}
+
+ {% include "machines/aff_iptype.html" with iptype_list=iptype_list %}
{% endblock %}
-
diff --git a/machines/templates/machines/index_ipv6.html b/machines/templates/machines/index_ipv6.html
index 06e287e2..2ab2231e 100644
--- a/machines/templates/machines/index_ipv6.html
+++ b/machines/templates/machines/index_ipv6.html
@@ -30,13 +30,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Machines" %}{% endblock %}
{% block content %}
-
{% trans "List of the IPv6 addresses of the interface" %}
- {% can_create Ipv6List interface_id %}
- {% trans " Add an IPv6 address" %}
- {% acl_end %}
- {% include "machines/aff_ipv6.html" with ipv6_list=ipv6_list %}
-
-
-
+
{% trans "List of the IPv6 addresses of the interface" %}
+ {% can_create Ipv6List interface_id %}
+
+ {% trans " Add an IPv6 address" %}
+
+ {% acl_end %}
+ {% include "machines/aff_ipv6.html" with ipv6_list=ipv6_list %}
+
+
+
{% endblock %}
-
diff --git a/machines/templates/machines/index_machinetype.html b/machines/templates/machines/index_machinetype.html
index de1e2f58..5d184e29 100644
--- a/machines/templates/machines/index_machinetype.html
+++ b/machines/templates/machines/index_machinetype.html
@@ -31,14 +31,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Machines" %}{% endblock %}
{% block content %}
-
+ {% can_create MachineType %}
+
+ {% trans " Add a machine type" %}
+
+ {% acl_end %}
+
+ {% trans " Delete one or several machine types" %}
+
+ {% include "machines/aff_machinetype.html" with machinetype_list=machinetype_list %}
+
+
+
{% endblock %}
-
diff --git a/machines/templates/machines/index_nas.html b/machines/templates/machines/index_nas.html
index 88f68213..c4da9779 100644
--- a/machines/templates/machines/index_nas.html
+++ b/machines/templates/machines/index_nas.html
@@ -31,15 +31,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Machines" %}{% endblock %}
{% block content %}
-
{% trans "List of NAS devices" %}
-
{% trans "The NAS device type and machine type are linked. It is useful for MAC address auto capture by RADIUS, and allows to choose the machine type to assign to the machines according to the NAS device type." %}
{% trans "The NAS device type and machine type are linked. It is useful for MAC address auto capture by RADIUS, and allows to choose the machine type to assign to the machines according to the NAS device type." %}
+ {% can_create Nas %}
+
+ {% trans " Add a NAS device type" %}
+
+ {% acl_end %}
+
+ {% trans " Delete one or several NAS device types" %}
+
+ {% include "machines/aff_nas.html" with nas_list=nas_list %}
+
+
+
{% endblock %}
-
diff --git a/machines/templates/machines/index_portlist.html b/machines/templates/machines/index_portlist.html
index 0d3d0741..c6659b65 100644
--- a/machines/templates/machines/index_portlist.html
+++ b/machines/templates/machines/index_portlist.html
@@ -8,60 +8,58 @@
{% block title %}{% trans "Machines" %}{% endblock %}
{% block content %}
-
+ {% can_create Role %}
+ {% trans " Add a role" %}
+ {% acl_end %}
+ {% trans " Delete one or several roles" %}
+ {% include "machines/aff_role.html" with role_list=role_list %}
{% endblock %}
-
diff --git a/machines/templates/machines/index_service.html b/machines/templates/machines/index_service.html
index 9dec7032..a41c79c6 100644
--- a/machines/templates/machines/index_service.html
+++ b/machines/templates/machines/index_service.html
@@ -30,16 +30,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Machines" %}{% endblock %}
{% block content %}
-