@ -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
)