mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-27 07:02:26 +00:00
Merge branch 'cleanup_machines' into 'dev'
Clean up of machines See merge request federez/re2o!310
This commit is contained in:
commit
ee2ee0ad12
41 changed files with 823 additions and 806 deletions
|
@ -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.")
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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__'
|
||||
|
@ -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__'
|
||||
|
@ -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__'
|
||||
|
@ -645,6 +667,7 @@ class EditOuverturePortListForm(FormRevMixin, ModelForm):
|
|||
|
||||
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
|
||||
)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -814,7 +812,7 @@ class Txt(RevMixin, AclMixin, models.Model):
|
|||
verbose_name_plural = _("TXT records")
|
||||
|
||||
def __str__(self):
|
||||
return str(self.zone) + " : " + str(self.field1) + " " +\
|
||||
return str(self.zone) + " : " + str(self.field1) + " " + \
|
||||
str(self.field2)
|
||||
|
||||
@cached_property
|
||||
|
@ -894,16 +892,16 @@ 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) +\
|
||||
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) + ' ' +\
|
||||
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) + '.'
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -1707,7 +1704,7 @@ class Service(RevMixin, AclMixin, models.Model):
|
|||
):
|
||||
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
|
||||
|
||||
|
@ -1877,7 +1874,6 @@ class OuverturePort(RevMixin, AclMixin, models.Model):
|
|||
)
|
||||
|
||||
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')
|
||||
|
||||
|
|
|
@ -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()],
|
||||
}
|
||||
|
|
|
@ -45,4 +45,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -45,4 +45,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -60,4 +60,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -48,7 +48,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
<td>{{ type.type }}</td>
|
||||
<td>{{ type.extension }}</td>
|
||||
<td>{{ type.need_infra|tick }}</td>
|
||||
<td>{{ type.domaine_ip_start }}-{{ type.domaine_ip_stop }}{% if type.ip_network %}<b><u> on </b></u>{{ type.ip_network }}{% endif %}</td>
|
||||
<td>{{ type.domaine_ip_start }}-{{ type.domaine_ip_stop }}{% if type.ip_network %}<b><u> on </u></b>
|
||||
{{ type.ip_network }}{% endif %}</td>
|
||||
<td>{{ type.prefix_v6 }}/{{ type.prefix_v6_length }}</td>
|
||||
<td>{{ type.reverse_v4|tick }}/{{ type.reverse_v6|tick }}</td>
|
||||
<td>{{ type.vlan }}</td>
|
||||
|
@ -63,4 +64,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -50,4 +50,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -73,7 +73,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
<td>
|
||||
{% if interface.domain.related_domain.all %}
|
||||
{{ interface.domain }}
|
||||
<button class="btn btn-default btn-xs" type="button" data-toggle="collapse" data-target="#collapseDomain_{{ interface.id }}" aria-expanded="true" aria-controls="collapseDomain_{{ interface.id }}">
|
||||
<button class="btn btn-default btn-xs" type="button" data-toggle="collapse"
|
||||
data-target="#collapseDomain_{{ interface.id }}" aria-expanded="true"
|
||||
aria-controls="collapseDomain_{{ interface.id }}">
|
||||
{% trans "Display the aliases" %}
|
||||
</button>
|
||||
{% else %}
|
||||
|
@ -89,9 +91,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
<td>
|
||||
<b>IPv4</b> {{ interface.ipv4 }}
|
||||
<br>
|
||||
{% if ipv6_enabled and interface.ipv6 != 'None'%}
|
||||
{% if ipv6_enabled and interface.ipv6 != 'None' %}
|
||||
<b>IPv6</b>
|
||||
<button class="btn btn-default btn-xs" type="button" data-toggle="collapse" data-target="#collapseIpv6_{{ interface.id }}" aria-expanded="true" aria-controls="collapseIpv6_{{ interface.id }}">
|
||||
<button class="btn btn-default btn-xs" type="button" data-toggle="collapse"
|
||||
data-target="#collapseIpv6_{{ interface.id }}" aria-expanded="true"
|
||||
aria-controls="collapseIpv6_{{ interface.id }}">
|
||||
{% trans "Display the IPv6 address" %}
|
||||
</button>
|
||||
{% endif %}
|
||||
|
@ -99,7 +103,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
<td class="text-right">
|
||||
<div style="width: 128px;">
|
||||
<div class="btn-group" role="group">
|
||||
<button class="btn btn-primary btn-sm dropdown-toggle" type="button" id="editioninterface" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<button class="btn btn-primary btn-sm dropdown-toggle" type="button"
|
||||
id="editioninterface" data-toggle="dropdown" aria-haspopup="true"
|
||||
aria-expanded="true">
|
||||
<i class="fa fa-edit"></i> <span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="editioninterface">
|
||||
|
@ -107,7 +113,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
<li>
|
||||
<a href="{% url 'machines:edit-interface' interface.id %}">
|
||||
<i class="fa fa-edit"></i>
|
||||
{% trans " Edit"%}
|
||||
{% trans " Edit" %}
|
||||
</a>
|
||||
</li>
|
||||
{% acl_end %}
|
||||
|
@ -137,7 +143,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% acl_end %}
|
||||
{% can_create OuverturePortList %}
|
||||
<li>
|
||||
<a href="{% url 'machines:port-config' interface.id%}">
|
||||
<a href="{% url 'machines:port-config' interface.id %}">
|
||||
<i class="fa fa-edit"></i>
|
||||
{% trans " Manage the ports configuration" %}
|
||||
</a>
|
||||
|
@ -152,11 +158,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% if ipv6_enabled and interface.ipv6 != 'None'%}
|
||||
{% if ipv6_enabled and interface.ipv6 != 'None' %}
|
||||
<tr>
|
||||
<td colspan=5 style="border-top: none; padding: 1px;">
|
||||
<div class="collapse in" id="collapseIpv6_{{interface.id}}">
|
||||
<ul class="list-group" style="margin-bottom: 0px;">
|
||||
<div class="collapse in" id="collapseIpv6_{{ interface.id }}">
|
||||
<ul class="list-group" style="margin-bottom: 0;">
|
||||
{% for ipv6 in interface.ipv6.all %}
|
||||
<li class="list-group-item col-xs-6 col-sm-6 col-md-6" style="border: none;">
|
||||
{{ ipv6 }}
|
||||
|
@ -170,8 +176,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% if interface.domain.related_domain.all %}
|
||||
<tr>
|
||||
<td colspan=5 style="border-top: none; padding: 1px;">
|
||||
<div class="collapse in" id="collapseDomain_{{interface.id}}">
|
||||
<ul class="list-group" style="margin-bottom: 0px;">
|
||||
<div class="collapse in" id="collapseDomain_{{ interface.id }}">
|
||||
<ul class="list-group" style="margin-bottom: 0;">
|
||||
{% for al in interface.domain.related_domain.all %}
|
||||
<li class="list-group-item col-xs-6 col-sm-4 col-md-3" style="border: none;">
|
||||
<a href="http://{{ al }}">
|
||||
|
@ -191,26 +197,24 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<script>
|
||||
$("#machines_table").ready( function() {
|
||||
$("#machines_table").ready(function () {
|
||||
var alias_div = [{% for machine in machines_list %}{% for interface in machine.interface_set.all %}{% if interface.domain.related_domain.all %}$("#collapseDomain_{{ interface.id }}"), {% endif %}{% endfor %}{% endfor %}];
|
||||
for (var i=0 ; i<alias_div.length ; i++) {
|
||||
for (var i = 0; i < alias_div.length; i++) {
|
||||
alias_div[i].collapse('hide');
|
||||
}
|
||||
} );
|
||||
$("#machines_table").ready( function() {
|
||||
});
|
||||
$("#machines_table").ready(function () {
|
||||
var ipv6_div = [{% for machine in machines_list %}{% for interface in machine.interface_set.all %}{% if interface.ipv6.all %}$("#collapseIpv6_{{ interface.id }}"), {% endif %}{% endfor %}{% endfor %}];
|
||||
for (var i=0 ; i<ipv6_div.length ; i++) {
|
||||
for (var i = 0; i < ipv6_div.length; i++) {
|
||||
ipv6_div[i].collapse('hide');
|
||||
}
|
||||
} );
|
||||
});
|
||||
</script>
|
||||
|
||||
{% if machines_list.paginator %}
|
||||
{% include "pagination.html" with list=machines_list %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
|
|
|
@ -47,4 +47,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -49,4 +49,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -54,4 +54,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -47,4 +47,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -51,4 +51,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -47,4 +47,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -43,7 +43,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
<td>{{ service.min_time_regen }}</td>
|
||||
<td>{{ service.regular_time_regen }}</td>
|
||||
<td>{% for serv in service.servers.all %}{{ serv }}, {% endfor %}</td>
|
||||
<td><a role="button" class="btn btn-danger" href="{% url 'machines:regen-service' service.id %}"><i class="fa fa-sync"></i></a></td>
|
||||
<td><a role="button" class="btn btn-danger" href="{% url 'machines:regen-service' service.id %}"><i
|
||||
class="fa fa-sync"></i></a></td>
|
||||
<td class="text-right">
|
||||
{% can_edit service %}
|
||||
{% include 'buttons/edit.html' with href='machines:edit-service' id=service.id %}
|
||||
|
@ -53,4 +54,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -55,4 +55,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -59,4 +59,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -52,4 +52,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -47,4 +47,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
<td>{{ vlan.vlan_id }}</td>
|
||||
<td>{{ vlan.name }}</td>
|
||||
<td>{{ vlan.comment }}</td>
|
||||
<td>{% for range in vlan.iptype_set.all %}{{ range }}, {% endfor%}</td>
|
||||
<td>{% for range in vlan.iptype_set.all %}{{ range }}, {% endfor %}</td>
|
||||
<td class="text-right">
|
||||
{% can_edit vlan %}
|
||||
{% include 'buttons/edit.html' with href='machines:edit-vlan' id=vlan.id %}
|
||||
|
@ -53,4 +53,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -30,14 +30,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
|
||||
{% block content %}
|
||||
|
||||
<form class="form" method="post">
|
||||
<form class="form" method="post">
|
||||
{% csrf_token %}
|
||||
<h4>{% blocktrans %}Warning: are you sure you want to delete this object {{ objet_name }} ( {{ objet }} )?{% endblocktrans %}</h4>
|
||||
<h4>{% blocktrans %}Warning: are you sure you want to delete this object {{ objet_name }} ( {{ objet }}
|
||||
)?{% endblocktrans %}</h4>
|
||||
{% trans "Confirm" as tr_confirm %}
|
||||
{% bootstrap_button tr_confirm button_type="submit" icon='trash' button_class='btn-danger' %}
|
||||
</form>
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
</form>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -29,10 +29,10 @@ 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 %}
|
||||
|
||||
|
||||
<form class="form" method="post">
|
||||
<form class="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form port_list %}
|
||||
{{ ports.management_form }}
|
||||
|
@ -48,14 +48,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
|
||||
<p>
|
||||
{% trans "Add a port" as value %}
|
||||
<input class="btn btn-primary btn-sm" role="button" value=value id="add_one">
|
||||
<input class="btn btn-primary btn-sm" role="button" value="value" id="add_one">
|
||||
</p>
|
||||
{% trans "Create or edit" as tr_create_or_edit %}
|
||||
{% bootstrap_button tr_create_or_edit icon='ok' button_class='btn-success' %}
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
var template = `{{ports.empty_form}}`;
|
||||
function add_port(){
|
||||
|
||||
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;
|
||||
|
@ -64,9 +65,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
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);});
|
||||
|
||||
</script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
document.getElementById("add_one").addEventListener("click", add_port, true);
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -31,8 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% block content %}
|
||||
<h2>{% trans "Machines" %}</h2>
|
||||
{% include "machines/aff_machines.html" with machines_list=machines_list %}
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -30,11 +30,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
|
||||
{% block content %}
|
||||
<h2>{% trans "List of the aliases of the interface" %}</h2>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-alias' interface_id %}"><i class="fa fa-plus"></i>{% trans " Add an alias" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-alias' interface_id %}"><i class="fa fa-trash"></i>{% trans " Delete one or several aliases" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-alias' interface_id %}"><i
|
||||
class="fa fa-plus"></i>{% trans " Add an alias" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-alias' interface_id %}"><i
|
||||
class="fa fa-trash"></i>{% trans " Delete one or several aliases" %}</a>
|
||||
{% include "machines/aff_alias.html" with alias_list=alias_list %}
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -24,46 +24,65 @@ 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 %}
|
||||
<h2>{% trans "List of extensions" %}</h2>
|
||||
<h2>{% trans "List of extensions" %}</h2>
|
||||
{% can_create Extension %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-extension' %}"><i class="fa fa-plus"></i>{% trans " Add an extension" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-extension' %}">
|
||||
<i class="fa fa-plus"></i>
|
||||
{% trans " Add an extension" %}</a>
|
||||
{% acl_end %}
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-extension' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several extensions" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-extension' %}">
|
||||
<i class="fa fa-trash"></i>{% trans " Delete one or several extensions" %}
|
||||
</a>
|
||||
{% include "machines/aff_extension.html" with extension_list=extension_list %}
|
||||
|
||||
<h2>{% trans "List of SOA records" %}</h2>
|
||||
{% can_create SOA %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-soa' %}"><i class="fa fa-plus"></i>{% trans " Add an SOA record" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-soa' %}">
|
||||
<i class="fa fa-plus"></i>{% trans " Add an SOA record" %}
|
||||
</a>
|
||||
{% acl_end %}
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-soa' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several SOA records" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-soa' %}">
|
||||
<i class="fa fa-trash"></i>{% trans " Delete one or several SOA records" %}
|
||||
</a>
|
||||
{% include "machines/aff_soa.html" with soa_list=soa_list %}
|
||||
|
||||
<h2>{% trans "List of MX records" %}</h2>
|
||||
{% can_create Mx %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-mx' %}"><i class="fa fa-plus"></i>{% trans " Add an MX record" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-mx' %}">
|
||||
<i class="fa fa-plus"></i>{% trans " Add an MX record" %}
|
||||
</a>
|
||||
{% acl_end %}
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-mx' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several MX records" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-mx' %}">
|
||||
<i class="fa fa-trash"></i>{% trans " Delete one or several MX records" %}
|
||||
</a>
|
||||
{% include "machines/aff_mx.html" with mx_list=mx_list %}
|
||||
|
||||
<h2>{% trans "List of NS records" %}</h2>
|
||||
{% can_create Ns %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-ns' %}"><i class="fa fa-plus"></i>{% trans " Add an NS record" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-ns' %}">
|
||||
<i class="fa fa-plus"></i>{% trans " Add an NS record" %}
|
||||
</a>
|
||||
{% acl_end %}
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-ns' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several NS records" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-ns' %}">
|
||||
<i class="fa fa-trash"></i>{% trans " Delete one or several NS records" %}
|
||||
</a>
|
||||
{% include "machines/aff_ns.html" with ns_list=ns_list %}
|
||||
|
||||
<h2>{% trans "List of TXT records" %}</h2>
|
||||
{% can_create Txt %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-txt' %}"><i class="fa fa-plus"></i>{% trans " Add a TXT record" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-txt' %}">
|
||||
<i class="fa fa-plus"></i>{% trans " Add a TXT record" %}
|
||||
</a>
|
||||
{% acl_end %}
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-txt' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several TXT records" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-txt' %}">
|
||||
<i class="fa fa-trash"></i>{% trans " Delete one or several TXT records" %}
|
||||
</a>
|
||||
{% include "machines/aff_txt.html" with txt_list=txt_list %}
|
||||
|
||||
<h2>{% trans "List of DNAME records" %}</h2>
|
||||
|
@ -79,12 +98,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
|
||||
<h2>{% trans "List of SRV records" %}</h2>
|
||||
{% can_create Srv %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-srv' %}"><i class="fa fa-plus"></i>{% trans " Add an SRV record" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-srv' %}">
|
||||
<i class="fa fa-plus"></i>{% trans " Add an SRV record" %}
|
||||
</a>
|
||||
{% acl_end %}
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-srv' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several SRV records" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-srv' %}">
|
||||
<i class="fa fa-trash"></i>{% trans " Delete one or several SRV records" %}
|
||||
</a>
|
||||
{% include "machines/aff_srv.html" with srv_list=srv_list %}
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
{% endblock %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -24,21 +24,20 @@ 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 %}
|
||||
<h2>{% trans "List of IP types" %}</h2>
|
||||
<h2>{% trans "List of IP types" %}</h2>
|
||||
{% can_create IpType %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-iptype' %}"><i class="fa fa-plus"></i>{% trans " Add an IP type" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-iptype' %}">
|
||||
<i class="fa fa-plus"></i>{% trans " Add an IP type" %}
|
||||
</a>
|
||||
{% acl_end %}
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-iptype' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several IP types" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-iptype' %}">
|
||||
<i class="fa fa-trash"></i>{% trans " Delete one or several IP types" %}
|
||||
</a>
|
||||
{% include "machines/aff_iptype.html" with iptype_list=iptype_list %}
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -30,13 +30,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% block title %}{% trans "Machines" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h2>{% trans "List of the IPv6 addresses of the interface" %}</h2>
|
||||
<h2>{% trans "List of the IPv6 addresses of the interface" %}</h2>
|
||||
{% can_create Ipv6List interface_id %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:new-ipv6list' interface_id %}"><i class="fa fa-plus"></i>{% trans " Add an IPv6 address" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:new-ipv6list' interface_id %}">
|
||||
<i class="fa fa-plus"></i>{% trans " Add an IPv6 address" %}
|
||||
</a>
|
||||
{% acl_end %}
|
||||
{% include "machines/aff_ipv6.html" with ipv6_list=ipv6_list %}
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -33,12 +33,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% block content %}
|
||||
<h2>{% trans "List of machine types" %}</h2>
|
||||
{% can_create MachineType %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-machinetype' %}"><i class="fa fa-plus"></i>{% trans " Add a machine type" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-machinetype' %}">
|
||||
<i class="fa fa-plus"></i>{% trans " Add a machine type" %}
|
||||
</a>
|
||||
{% acl_end %}
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-machinetype' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several machine types" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-machinetype' %}">
|
||||
<i class="fa fa-trash"></i>{% trans " Delete one or several machine types" %}
|
||||
</a>
|
||||
{% include "machines/aff_machinetype.html" with machinetype_list=machinetype_list %}
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -34,12 +34,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
<h2>{% trans "List of NAS devices" %}</h2>
|
||||
<h5>{% 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." %}</h5>
|
||||
{% can_create Nas %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-nas' %}"><i class="fa fa-plus"></i>{% trans " Add a NAS device type" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-nas' %}">
|
||||
<i class="fa fa-plus"></i>{% trans " Add a NAS device type" %}
|
||||
</a>
|
||||
{% acl_end %}
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-nas' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several NAS device types" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-nas' %}">
|
||||
<i class="fa fa-trash"></i>{% trans " Delete one or several NAS device types" %}
|
||||
</a>
|
||||
{% include "machines/aff_nas.html" with nas_list=nas_list %}
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -8,9 +8,11 @@
|
|||
{% block title %}{% trans "Machines" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h2>{% trans "List of ports configurations" %}</h2>
|
||||
<h2>{% trans "List of ports configurations" %}</h2>
|
||||
{% can_create OuverturePortList %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-portlist' %}"><i class="fa fa-plus"></i>{% trans " Add a configuration" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-portlist' %}">
|
||||
<i class="fa fa-plus"></i>{% trans " Add a configuration" %}
|
||||
</a>
|
||||
{% acl_end %}
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
|
@ -26,15 +28,16 @@
|
|||
</thead>
|
||||
{% for pl in port_list %}
|
||||
<tr>
|
||||
<td>{{pl.name}}</td>
|
||||
<td>{% for p in pl.tcp_ports_in %}{{p.show_port}}, {%endfor%}</td>
|
||||
<td>{% for p in pl.tcp_ports_out %}{{p.show_port}}, {%endfor%}</td>
|
||||
<td>{% for p in pl.udp_ports_in %}{{p.show_port}}, {%endfor%}</td>
|
||||
<td>{% for p in pl.udp_ports_out %}{{p.show_port}}, {%endfor%}</td>
|
||||
<td>{{ pl.name }}</td>
|
||||
<td>{% for p in pl.tcp_ports_in %}{{ p.show_port }}, {% endfor %}</td>
|
||||
<td>{% for p in pl.tcp_ports_out %}{{ p.show_port }}, {% endfor %}</td>
|
||||
<td>{% for p in pl.udp_ports_in %}{{ p.show_port }}, {% endfor %}</td>
|
||||
<td>{% for p in pl.udp_ports_out %}{{ p.show_port }}, {% endfor %}</td>
|
||||
<td>
|
||||
{% if pl.interface_set.all %}
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-default dropdown-toggle" type="button" id="editioninterface" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<button class="btn btn-default dropdown-toggle" type="button" id="editioninterface"
|
||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="editioninterface">
|
||||
|
@ -57,11 +60,6 @@
|
|||
{% acl_end %}
|
||||
</td>
|
||||
</tr>
|
||||
{%endfor%}
|
||||
{% endfor %}
|
||||
</table>
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -30,13 +30,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% block title %}{% trans "Machines" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h2>{% trans "List of roles" %}</h2>
|
||||
<h2>{% trans "List of roles" %}</h2>
|
||||
{% can_create Role %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-role' %}"><i class="fa fa-plus"></i>{% trans " Add a role"%}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-role' %}"><i
|
||||
class="fa fa-plus"></i>{% trans " Add a role" %}</a>
|
||||
{% acl_end %}
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-role' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several roles" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-role' %}"><i
|
||||
class="fa fa-trash"></i>{% trans " Delete one or several roles" %}</a>
|
||||
{% include "machines/aff_role.html" with role_list=role_list %}
|
||||
<br />
|
||||
<br />
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -30,16 +30,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% block title %}{% trans "Machines" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h2>{% trans "List of services" %}</h2>
|
||||
<h2>{% trans "List of services" %}</h2>
|
||||
{% can_create machines.Service %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-service' %}"><i class="fa fa-plus"></i>{% trans " Add a service" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-service' %}"><i
|
||||
class="fa fa-plus"></i>{% trans " Add a service" %}</a>
|
||||
{% acl_end %}
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-service' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several services" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-service' %}"><i
|
||||
class="fa fa-trash"></i>{% trans " Delete one or several services" %}</a>
|
||||
{% include "machines/aff_service.html" with service_list=service_list %}
|
||||
|
||||
<h2>{% trans "States of servers" %}</h2>
|
||||
{% include "machines/aff_servers.html" with servers_list=servers_list %}
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -36,4 +36,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% acl_end %}
|
||||
{% include "machines/aff_sshfp.html" with sshfp_list=sshfp_list %}
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -24,21 +24,18 @@ 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 %}
|
||||
<h2>{% trans "List of VLANs" %}</h2>
|
||||
<h2>{% trans "List of VLANs" %}</h2>
|
||||
{% can_create Vlan %}
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-vlan' %}"><i class="fa fa-plus"></i>{% trans " Add a VLAN" %}</a>
|
||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-vlan' %}"><i
|
||||
class="fa fa-plus"></i>{% trans " Add a VLAN" %}</a>
|
||||
{% acl_end %}
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-vlan' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several VLANs" %}</a>
|
||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-vlan' %}"><i
|
||||
class="fa fa-trash"></i>{% trans " Delete one or several VLANs" %}</a>
|
||||
{% include "machines/aff_vlan.html" with vlan_list=vlan_list %}
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -31,62 +31,62 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% block title %}{% trans "Machines" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% if machineform %}
|
||||
{% if machineform %}
|
||||
{% bootstrap_form_errors machineform %}
|
||||
{% endif %}
|
||||
{% if interfaceform %}
|
||||
{% endif %}
|
||||
{% if interfaceform %}
|
||||
{% bootstrap_form_errors interfaceform %}
|
||||
{% endif %}
|
||||
{% if domainform %}
|
||||
{% endif %}
|
||||
{% if domainform %}
|
||||
{% bootstrap_form_errors domainform %}
|
||||
{% endif %}
|
||||
{% if iptypeform %}
|
||||
{% endif %}
|
||||
{% if iptypeform %}
|
||||
{% bootstrap_form_errors iptypeform %}
|
||||
{% endif %}
|
||||
{% if machinetypeform %}
|
||||
{% endif %}
|
||||
{% if machinetypeform %}
|
||||
{% bootstrap_form_errors machinetypeform %}
|
||||
{% endif %}
|
||||
{% if extensionform %}
|
||||
{% endif %}
|
||||
{% if extensionform %}
|
||||
{% bootstrap_form_errors extensionform %}
|
||||
{% endif %}
|
||||
{% if mxform %}
|
||||
{% endif %}
|
||||
{% if mxform %}
|
||||
{% bootstrap_form_errors mxform %}
|
||||
{% endif %}
|
||||
{% if nsform %}
|
||||
{% endif %}
|
||||
{% if nsform %}
|
||||
{% bootstrap_form_errors nsform %}
|
||||
{% endif %}
|
||||
{% if txtform %}
|
||||
{% endif %}
|
||||
{% if txtform %}
|
||||
{% bootstrap_form_errors txtform %}
|
||||
{% endif %}
|
||||
{% if dnameform %}
|
||||
{% endif %}
|
||||
{% if dnameform %}
|
||||
{% bootstrap_form_errors dnameform %}
|
||||
{% endif %}
|
||||
{% if srvform %}
|
||||
{% endif %}
|
||||
{% if srvform %}
|
||||
{% bootstrap_form_errors srvform %}
|
||||
{% endif %}
|
||||
{% if aliasform %}
|
||||
{% endif %}
|
||||
{% if aliasform %}
|
||||
{% bootstrap_form_errors aliasform %}
|
||||
{% endif %}
|
||||
{% if serviceform %}
|
||||
{% endif %}
|
||||
{% if serviceform %}
|
||||
{% bootstrap_form_errors serviceform %}
|
||||
{% endif %}
|
||||
{% if sshfpform %}
|
||||
{% endif %}
|
||||
{% if sshfpform %}
|
||||
{% bootstrap_form_errors sshfpform %}
|
||||
{% endif %}
|
||||
{% if roleform %}
|
||||
{% endif %}
|
||||
{% if roleform %}
|
||||
{% bootstrap_form_errors roleform %}
|
||||
{% endif %}
|
||||
{% if vlanform %}
|
||||
{% endif %}
|
||||
{% if vlanform %}
|
||||
{% bootstrap_form_errors vlanform %}
|
||||
{% endif %}
|
||||
{% if nasform %}
|
||||
{% endif %}
|
||||
{% if nasform %}
|
||||
{% bootstrap_form_errors nasform %}
|
||||
{% endif %}
|
||||
{% if ipv6form %}
|
||||
{% endif %}
|
||||
{% if ipv6form %}
|
||||
{% bootstrap_form_errors ipv6form %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<form class="form" method="post">
|
||||
<form class="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% if machineform %}
|
||||
<h3>{% trans "Machine" %}</h3>
|
||||
|
@ -169,9 +169,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
{% bootstrap_form ipv6form %}
|
||||
{% endif %}
|
||||
{% bootstrap_button action_name button_type="submit" icon='ok' button_class='btn-success' %}
|
||||
</form>
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -82,4 +82,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
</a>
|
||||
{% acl_end %}
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ The defined URLs for the Machines app
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf.urls import url
|
||||
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
|
|
|
@ -32,26 +32,18 @@ The views for the Machines app
|
|||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.urls import reverse
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django.shortcuts import render, redirect
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required, permission_required
|
||||
from django.db.models import ProtectedError, F
|
||||
from django.forms import modelformset_factory
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import render, redirect
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from rest_framework.renderers import JSONRenderer
|
||||
|
||||
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,
|
||||
|
@ -60,21 +52,14 @@ from re2o.acl import (
|
|||
can_view_all,
|
||||
can_delete_set,
|
||||
)
|
||||
from re2o.views import form
|
||||
|
||||
from .serializers import (
|
||||
FullInterfaceSerializer,
|
||||
InterfaceSerializer,
|
||||
TypeSerializer,
|
||||
DomainSerializer,
|
||||
TxtSerializer,
|
||||
SrvSerializer,
|
||||
MxSerializer,
|
||||
ExtensionSerializer,
|
||||
ServiceServersSerializer,
|
||||
NsSerializer,
|
||||
from re2o.utils import (
|
||||
all_active_assigned_interfaces,
|
||||
filter_active_interfaces,
|
||||
SortTable,
|
||||
re2o_paginator,
|
||||
)
|
||||
|
||||
from re2o.views import form
|
||||
from users.models import User
|
||||
from .forms import (
|
||||
NewMachineForm,
|
||||
EditMachineForm,
|
||||
|
@ -139,6 +124,18 @@ from .models import (
|
|||
OuverturePort,
|
||||
Ipv6List,
|
||||
)
|
||||
from .serializers import (
|
||||
FullInterfaceSerializer,
|
||||
InterfaceSerializer,
|
||||
TypeSerializer,
|
||||
DomainSerializer,
|
||||
TxtSerializer,
|
||||
SrvSerializer,
|
||||
MxSerializer,
|
||||
ExtensionSerializer,
|
||||
ServiceServersSerializer,
|
||||
NsSerializer,
|
||||
)
|
||||
|
||||
|
||||
def f_type_id(is_type_tt):
|
||||
|
@ -153,7 +150,7 @@ def generate_ipv4_choices(form_obj):
|
|||
"""
|
||||
f_ipv4 = form_obj.fields['ipv4']
|
||||
used_mtype_id = []
|
||||
choices = '{"":[{key:"",value:"'+_("Select a machine type first.") + '"}'
|
||||
choices = '{"":[{key:"",value:"' + _("Select a machine type first.") + '"}'
|
||||
mtype_id = -1
|
||||
|
||||
for ip in (f_ipv4.queryset
|
||||
|
@ -172,7 +169,7 @@ def generate_ipv4_choices(form_obj):
|
|||
)
|
||||
|
||||
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 += ']}'
|
||||
return choices
|
||||
|
@ -889,6 +886,7 @@ def del_ns(request, instances):
|
|||
request
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
@can_create(DName)
|
||||
def add_dname(request):
|
||||
|
@ -1252,16 +1250,16 @@ def del_service(request, instances):
|
|||
request
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
@can_edit(Service)
|
||||
def regen_service(request,service, **_kwargs):
|
||||
def regen_service(request, service, **_kwargs):
|
||||
"""Ask for a regen of the service"""
|
||||
|
||||
regen(service)
|
||||
return index_service(request)
|
||||
|
||||
|
||||
|
||||
@login_required
|
||||
@can_create(Vlan)
|
||||
def add_vlan(request):
|
||||
|
@ -1939,4 +1937,3 @@ def regen_achieved(request):
|
|||
if obj:
|
||||
obj.first().done_regen()
|
||||
return HttpResponse("Ok")
|
||||
|
||||
|
|
Loading…
Reference in a new issue