diff --git a/machines/admin.py b/machines/admin.py index 49b02a7e..e0256fe0 100644 --- a/machines/admin.py +++ b/machines/admin.py @@ -30,51 +30,67 @@ from .models import IpType, Machine, MachineType, Domain, IpList, Interface from .models import Extension, Mx, Ns, Vlan, Text, Nas, Service, OuverturePort from .models import OuverturePortList + class MachineAdmin(VersionAdmin): pass + class IpTypeAdmin(VersionAdmin): pass + class MachineTypeAdmin(VersionAdmin): pass + class VlanAdmin(VersionAdmin): pass + class ExtensionAdmin(VersionAdmin): pass + class MxAdmin(VersionAdmin): pass + class NsAdmin(VersionAdmin): pass + class TextAdmin(VersionAdmin): pass + class NasAdmin(VersionAdmin): pass + class IpListAdmin(VersionAdmin): pass + class OuverturePortAdmin(VersionAdmin): pass + class OuverturePortListAdmin(VersionAdmin): pass + class InterfaceAdmin(VersionAdmin): list_display = ('machine','type','mac_address','ipv4','details') + class DomainAdmin(VersionAdmin): list_display = ('interface_parent', 'name', 'extension', 'cname') + class ServiceAdmin(VersionAdmin): list_display = ('service_type', 'min_time_regen', 'regular_time_regen') + 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 eb16e2c9..9820fbdc 100644 --- a/machines/forms.py +++ b/machines/forms.py @@ -21,20 +21,43 @@ # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +""" +Formulaires d'ajout, edition et suppressions de : + - machines + - interfaces + - domain (noms de machine) + - alias (cname) + - service (dhcp, dns..) + - ns (serveur dns) + - mx (serveur mail) + - ports ouverts et profils d'ouverture par interface +""" from __future__ import unicode_literals -import re - -from django.forms import ModelForm, Form, ValidationError +from django.forms import ModelForm, Form from django import forms -from .models import Domain, Machine, Interface, IpList, MachineType, Extension, Mx, Text, Ns, Service, Vlan, Nas, IpType, OuverturePortList, OuverturePort -from django.db.models import Q -from django.core.validators import validate_email -from users.models import User +from .models import ( + Domain, + Machine, + Interface, + IpList, + MachineType, + Extension, + Mx, + Text, + Ns, + Service, + Vlan, + Nas, + IpType, + OuverturePortList, +) + class EditMachineForm(ModelForm): + """Formulaire d'édition d'une machine""" class Meta: model = Machine fields = '__all__' @@ -44,15 +67,22 @@ class EditMachineForm(ModelForm): super(EditMachineForm, self).__init__(*args, prefix=prefix, **kwargs) self.fields['name'].label = 'Nom de la machine' + class NewMachineForm(EditMachineForm): + """Creation d'une machine, ne renseigne que le nom""" class Meta(EditMachineForm.Meta): fields = ['name'] + class BaseEditMachineForm(EditMachineForm): + """Edition basique, ne permet que de changer le nom et le statut. + Réservé aux users sans droits spécifiques""" class Meta(EditMachineForm.Meta): - fields = ['name','active'] + fields = ['name', 'active'] + class EditInterfaceForm(ModelForm): + """Edition d'une interface. Edition complète""" class Meta: model = Interface fields = ['machine', 'type', 'ipv4', 'mac_address', 'details'] @@ -64,85 +94,126 @@ class EditInterfaceForm(ModelForm): self.fields['type'].label = 'Type de machine' self.fields['type'].empty_label = "Séléctionner un type de machine" if "ipv4" in self.fields: - self.fields['ipv4'].empty_label = "Assignation automatique de l'ipv4" - self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True) + self.fields['ipv4'].empty_label = "Assignation automatique\ + de l'ipv4" + self.fields['ipv4'].queryset = IpList.objects.filter( + interface__isnull=True + ) # Add it's own address - self.fields['ipv4'].queryset |= IpList.objects.filter(interface=self.instance) + self.fields['ipv4'].queryset |= IpList.objects.filter( + interface=self.instance + ) if "machine" in self.fields: - self.fields['machine'].queryset = Machine.objects.all().select_related('user') + self.fields['machine'].queryset = Machine.objects.all()\ + .select_related('user') + 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'] + fields = ['type', 'ipv4', 'mac_address', 'details'] def __init__(self, *args, **kwargs): infra = kwargs.pop('infra') super(AddInterfaceForm, self).__init__(*args, **kwargs) self.fields['ipv4'].empty_label = "Assignation automatique de l'ipv4" if not infra: - self.fields['type'].queryset = MachineType.objects.filter(ip_type__in=IpType.objects.filter(need_infra=False)) - self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True).filter(ip_type__in=IpType.objects.filter(need_infra=False)) + self.fields['type'].queryset = MachineType.objects.filter( + ip_type__in=IpType.objects.filter(need_infra=False) + ) + self.fields['ipv4'].queryset = IpList.objects.filter( + interface__isnull=True + ).filter(ip_type__in=IpType.objects.filter(need_infra=False)) else: - self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True) + self.fields['ipv4'].queryset = IpList.objects.filter( + interface__isnull=True + ) + class NewInterfaceForm(EditInterfaceForm): + """Formulaire light, sans choix de l'ipv4; d'ajout d'une interface""" class Meta(EditInterfaceForm.Meta): - fields = ['type','mac_address','details'] + fields = ['type', 'mac_address', 'details'] + class BaseEditInterfaceForm(EditInterfaceForm): + """Edition basique d'une interface. En fonction des droits, + ajoute ou non l'ensemble des ipv4 disponibles (infra)""" class Meta(EditInterfaceForm.Meta): - fields = ['type','ipv4','mac_address','details'] + fields = ['type', 'ipv4', 'mac_address', 'details'] def __init__(self, *args, **kwargs): infra = kwargs.pop('infra') super(BaseEditInterfaceForm, self).__init__(*args, **kwargs) self.fields['ipv4'].empty_label = "Assignation automatique de l'ipv4" if not infra: - self.fields['type'].queryset = MachineType.objects.filter(ip_type__in=IpType.objects.filter(need_infra=False)) - self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True).filter(ip_type__in=IpType.objects.filter(need_infra=False)) + self.fields['type'].queryset = MachineType.objects.filter( + ip_type__in=IpType.objects.filter(need_infra=False) + ) + self.fields['ipv4'].queryset = IpList.objects.filter( + interface__isnull=True + ).filter(ip_type__in=IpType.objects.filter(need_infra=False)) # Add it's own address - self.fields['ipv4'].queryset |= IpList.objects.filter(interface=self.instance) + self.fields['ipv4'].queryset |= IpList.objects.filter( + interface=self.instance + ) else: - self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True) - self.fields['ipv4'].queryset |= IpList.objects.filter(interface=self.instance) + self.fields['ipv4'].queryset = IpList.objects.filter( + interface__isnull=True + ) + self.fields['ipv4'].queryset |= IpList.objects.filter( + interface=self.instance + ) + class AliasForm(ModelForm): + """Ajout d'un alias (et edition), CNAME, contenant nom et extension""" class Meta: model = Domain - fields = ['name','extension'] + fields = ['name', 'extension'] def __init__(self, *args, **kwargs): prefix = kwargs.pop('prefix', self.Meta.model.__name__) - if 'infra' in kwargs: - infra = kwargs.pop('infra') super(AliasForm, self).__init__(*args, prefix=prefix, **kwargs) + class DomainForm(AliasForm): + """Ajout et edition d'un enregistrement de nom, relié à interface""" class Meta(AliasForm.Meta): fields = ['name'] def __init__(self, *args, **kwargs): if 'user' in kwargs: user = kwargs.pop('user') - nb_machine = kwargs.pop('nb_machine') initial = kwargs.get('initial', {}) initial['name'] = user.get_next_domain_name() - kwargs['initial'] = initial + kwargs['initial'] = initial prefix = kwargs.pop('prefix', self.Meta.model.__name__) super(DomainForm, self).__init__(*args, prefix=prefix, **kwargs) - + + class DelAliasForm(Form): - alias = forms.ModelMultipleChoiceField(queryset=Domain.objects.all(), label="Alias actuels", widget=forms.CheckboxSelectMultiple) + """Suppression d'un ou plusieurs objets alias""" + alias = forms.ModelMultipleChoiceField( + queryset=Domain.objects.all(), + label="Alias actuels", + widget=forms.CheckboxSelectMultiple + ) def __init__(self, *args, **kwargs): interface = kwargs.pop('interface') super(DelAliasForm, self).__init__(*args, **kwargs) - self.fields['alias'].queryset = Domain.objects.filter(cname__in=Domain.objects.filter(interface_parent=interface)) + self.fields['alias'].queryset = Domain.objects.filter( + cname__in=Domain.objects.filter(interface_parent=interface) + ) + class MachineTypeForm(ModelForm): + """Ajout et edition d'un machinetype, relié à un iptype""" class Meta: model = MachineType - fields = ['type','ip_type'] + fields = ['type', 'ip_type'] def __init__(self, *args, **kwargs): prefix = kwargs.pop('prefix', self.Meta.model.__name__) @@ -150,27 +221,49 @@ class MachineTypeForm(ModelForm): self.fields['type'].label = 'Type de machine à ajouter' self.fields['ip_type'].label = "Type d'ip relié" + class DelMachineTypeForm(Form): - machinetypes = forms.ModelMultipleChoiceField(queryset=MachineType.objects.all(), label="Types de machines actuelles", widget=forms.CheckboxSelectMultiple) + """Suppression d'un ou plusieurs machinetype""" + machinetypes = forms.ModelMultipleChoiceField( + queryset=MachineType.objects.all(), + label="Types de machines actuelles", + widget=forms.CheckboxSelectMultiple + ) + class IpTypeForm(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 = ['type','extension','need_infra','domaine_ip_start','domaine_ip_stop', 'prefix_v6', 'vlan', 'ouverture_ports'] - + fields = ['type', 'extension', 'need_infra', 'domaine_ip_start', + 'domaine_ip_stop', 'prefix_v6', 'vlan', 'ouverture_ports'] + def __init__(self, *args, **kwargs): prefix = kwargs.pop('prefix', self.Meta.model.__name__) super(IpTypeForm, self).__init__(*args, prefix=prefix, **kwargs) self.fields['type'].label = 'Type ip à ajouter' + 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', 'prefix_v6', 'vlan', 'ouverture_ports'] + fields = ['extension', 'type', 'need_infra', 'prefix_v6', 'vlan', + 'ouverture_ports'] + class DelIpTypeForm(Form): - iptypes = forms.ModelMultipleChoiceField(queryset=IpType.objects.all(), label="Types d'ip actuelles", widget=forms.CheckboxSelectMultiple) + """Suppression d'un ou plusieurs iptype""" + iptypes = forms.ModelMultipleChoiceField( + queryset=IpType.objects.all(), + label="Types d'ip actuelles", + widget=forms.CheckboxSelectMultiple + ) + class ExtensionForm(ModelForm): + """Formulaire d'ajout et edition d'une extension""" class Meta: model = Extension fields = ['name', 'need_infra', 'origin'] @@ -181,23 +274,41 @@ class ExtensionForm(ModelForm): self.fields['name'].label = 'Extension à ajouter' self.fields['origin'].label = 'Enregistrement A origin' + class DelExtensionForm(Form): - extensions = forms.ModelMultipleChoiceField(queryset=Extension.objects.all(), label="Extensions actuelles", widget=forms.CheckboxSelectMultiple) + """Suppression d'une ou plusieurs extensions""" + extensions = forms.ModelMultipleChoiceField( + queryset=Extension.objects.all(), + label="Extensions actuelles", + widget=forms.CheckboxSelectMultiple + ) + class MxForm(ModelForm): + """Ajout et edition d'un MX""" class Meta: model = Mx fields = ['zone', 'priority', 'name'] - + def __init__(self, *args, **kwargs): prefix = kwargs.pop('prefix', self.Meta.model.__name__) super(MxForm, self).__init__(*args, prefix=prefix, **kwargs) - self.fields['name'].queryset = Domain.objects.exclude(interface_parent=None) - + self.fields['name'].queryset = Domain.objects.exclude( + interface_parent=None + ) + + class DelMxForm(Form): - mx = forms.ModelMultipleChoiceField(queryset=Mx.objects.all(), label="MX actuels", widget=forms.CheckboxSelectMultiple) + """Suppression d'un ou plusieurs MX""" + mx = forms.ModelMultipleChoiceField( + queryset=Mx.objects.all(), + label="MX actuels", + widget=forms.CheckboxSelectMultiple + ) + class NsForm(ModelForm): + """Ajout d'un NS pour une zone""" class Meta: model = Ns fields = ['zone', 'ns'] @@ -205,12 +316,22 @@ class NsForm(ModelForm): def __init__(self, *args, **kwargs): prefix = kwargs.pop('prefix', self.Meta.model.__name__) super(NsForm, self).__init__(*args, prefix=prefix, **kwargs) - self.fields['ns'].queryset = Domain.objects.exclude(interface_parent=None) + self.fields['ns'].queryset = Domain.objects.exclude( + interface_parent=None + ) + class DelNsForm(Form): - ns = forms.ModelMultipleChoiceField(queryset=Ns.objects.all(), label="Enregistrements NS actuels", widget=forms.CheckboxSelectMultiple) + """Suppresion d'un ou plusieurs NS""" + ns = forms.ModelMultipleChoiceField( + queryset=Ns.objects.all(), + label="Enregistrements NS actuels", + widget=forms.CheckboxSelectMultiple + ) + class TxtForm(ModelForm): + """Ajout d'un txt pour une zone""" class Meta: model = Text fields = '__all__' @@ -219,10 +340,19 @@ class TxtForm(ModelForm): prefix = kwargs.pop('prefix', self.Meta.model.__name__) super(TxtForm, self).__init__(*args, prefix=prefix, **kwargs) + class DelTxtForm(Form): - txt = forms.ModelMultipleChoiceField(queryset=Text.objects.all(), label="Enregistrements Txt actuels", widget=forms.CheckboxSelectMultiple) + """Suppression d'un ou plusieurs TXT""" + txt = forms.ModelMultipleChoiceField( + queryset=Text.objects.all(), + label="Enregistrements Txt actuels", + widget=forms.CheckboxSelectMultiple + ) + class NasForm(ModelForm): + """Ajout d'un type de nas (machine d'authentification, + swicths, bornes...)""" class Meta: model = Nas fields = '__all__' @@ -231,10 +361,18 @@ class NasForm(ModelForm): prefix = kwargs.pop('prefix', self.Meta.model.__name__) super(NasForm, self).__init__(*args, prefix=prefix, **kwargs) + class DelNasForm(Form): - nas = forms.ModelMultipleChoiceField(queryset=Nas.objects.all(), label="Enregistrements Nas actuels", widget=forms.CheckboxSelectMultiple) + """Suppression d'un ou plusieurs nas""" + nas = forms.ModelMultipleChoiceField( + queryset=Nas.objects.all(), + label="Enregistrements Nas actuels", + widget=forms.CheckboxSelectMultiple + ) + class ServiceForm(ModelForm): + """Ajout et edition d'une classe de service : dns, dhcp, etc""" class Meta: model = Service fields = '__all__' @@ -250,10 +388,18 @@ class ServiceForm(ModelForm): instance.process_link(self.cleaned_data.get('servers')) return instance + class DelServiceForm(Form): - service = forms.ModelMultipleChoiceField(queryset=Service.objects.all(), label="Services actuels", widget=forms.CheckboxSelectMultiple) + """Suppression d'un ou plusieurs service""" + service = forms.ModelMultipleChoiceField( + queryset=Service.objects.all(), + label="Services actuels", + widget=forms.CheckboxSelectMultiple + ) + class VlanForm(ModelForm): + """Ajout d'un vlan : id, nom""" class Meta: model = Vlan fields = '__all__' @@ -262,24 +408,43 @@ class VlanForm(ModelForm): prefix = kwargs.pop('prefix', self.Meta.model.__name__) super(VlanForm, self).__init__(*args, prefix=prefix, **kwargs) + class DelVlanForm(Form): - vlan = forms.ModelMultipleChoiceField(queryset=Vlan.objects.all(), label="Vlan actuels", widget=forms.CheckboxSelectMultiple) + """Suppression d'un ou plusieurs vlans""" + vlan = forms.ModelMultipleChoiceField( + queryset=Vlan.objects.all(), + label="Vlan actuels", + widget=forms.CheckboxSelectMultiple + ) + class EditOuverturePortConfigForm(ModelForm): + """Edition de la liste des profils d'ouverture de ports + pour l'interface""" class Meta: model = Interface fields = ['port_lists'] def __init__(self, *args, **kwargs): prefix = kwargs.pop('prefix', self.Meta.model.__name__) - super(EditOuverturePortConfigForm, self).__init__(*args, prefix=prefix, **kwargs) + super(EditOuverturePortConfigForm, self).__init__( + *args, + prefix=prefix, + **kwargs + ) + class EditOuverturePortListForm(ModelForm): + """Edition de la liste des ports et profils d'ouverture + des ports""" class Meta: model = OuverturePortList fields = '__all__' def __init__(self, *args, **kwargs): prefix = kwargs.pop('prefix', self.Meta.model.__name__) - super(EditOuverturePortListForm, self).__init__(*args, prefix=prefix, **kwargs) - + super(EditOuverturePortListForm, self).__init__( + *args, + prefix=prefix, + **kwargs + )