2017-01-15 18:01:18 -05:00
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
#
# Copyright © 2017 Gabriel Détraz
# Copyright © 2017 Goulven Kermarec
# Copyright © 2017 Augustin Lemesle
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# 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.
2017-09-11 01:29:24 +02:00
from __future__ import unicode_literals
2016-07-06 22:49:16 +02:00
from django . forms import ModelForm , Form , ValidationError
2016-07-07 13:19:03 +02:00
from django import forms
2017-09-11 00:33:45 +02:00
from . models import Domain , Machine , Interface , IpList , MachineType , Extension , Mx , Text , Ns , Service , Vlan , Nas , IpType
2016-11-30 04:48:47 +01:00
from django . db . models import Q
2017-01-14 12:52:23 +01:00
from django . core . validators import validate_email
2016-07-06 22:49:16 +02:00
2017-05-27 04:39:53 +02:00
from users . models import User
2016-07-06 22:49:16 +02:00
class EditMachineForm ( ModelForm ) :
class Meta :
model = Machine
fields = ' __all__ '
def __init__ ( self , * args , * * kwargs ) :
super ( EditMachineForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' name ' ] . label = ' Nom de la machine '
class NewMachineForm ( EditMachineForm ) :
class Meta ( EditMachineForm . Meta ) :
2016-07-18 19:14:48 +02:00
fields = [ ' name ' ]
2016-07-06 22:49:16 +02:00
2016-07-09 19:51:37 +02:00
class BaseEditMachineForm ( EditMachineForm ) :
class Meta ( EditMachineForm . Meta ) :
2016-07-18 19:14:48 +02:00
fields = [ ' name ' , ' active ' ]
2016-07-09 19:51:37 +02:00
2016-07-06 22:49:16 +02:00
class EditInterfaceForm ( ModelForm ) :
class Meta :
model = Interface
fields = ' __all__ '
def __init__ ( self , * args , * * kwargs ) :
super ( EditInterfaceForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' mac_address ' ] . label = ' Adresse mac '
2016-07-18 19:14:48 +02:00
self . fields [ ' type ' ] . label = ' Type de machine '
self . fields [ ' type ' ] . empty_label = " Séléctionner un type de machine "
2017-05-28 19:22:45 +02:00
if " machine " in self . fields :
self . fields [ ' machine ' ] . queryset = Machine . objects . all ( ) . select_related ( ' user ' )
2016-07-06 22:49:16 +02:00
class AddInterfaceForm ( EditInterfaceForm ) :
class Meta ( EditInterfaceForm . Meta ) :
2016-12-24 20:04:53 +01:00
fields = [ ' ipv4 ' , ' mac_address ' , ' type ' , ' details ' ]
2016-07-06 22:49:16 +02:00
2016-07-07 19:15:33 +02:00
def __init__ ( self , * args , * * kwargs ) :
2016-10-13 02:11:23 +02:00
infra = kwargs . pop ( ' infra ' )
2016-07-07 19:15:33 +02:00
super ( AddInterfaceForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' ipv4 ' ] . empty_label = " Assignation automatique de l ' ipv4 "
2016-10-13 02:11:23 +02:00
if not infra :
2016-12-14 03:08:57 +01:00
self . fields [ ' type ' ] . queryset = MachineType . objects . filter ( ip_type__in = IpType . objects . filter ( need_infra = False ) )
2017-07-21 05:06:53 +02:00
self . fields [ ' ipv4 ' ] . queryset = IpList . objects . filter ( interface__isnull = True ) . filter ( ip_type__in = IpType . objects . filter ( need_infra = False ) )
2016-11-30 04:48:47 +01:00
else :
self . fields [ ' ipv4 ' ] . queryset = IpList . objects . filter ( interface__isnull = True )
2016-07-07 19:15:33 +02:00
2016-07-06 22:49:16 +02:00
class NewInterfaceForm ( EditInterfaceForm ) :
class Meta ( EditInterfaceForm . Meta ) :
2016-12-24 20:04:53 +01:00
fields = [ ' mac_address ' , ' type ' , ' details ' ]
2016-07-06 22:49:16 +02:00
2016-07-09 19:51:37 +02:00
class BaseEditInterfaceForm ( EditInterfaceForm ) :
class Meta ( EditInterfaceForm . Meta ) :
2016-12-24 20:04:53 +01:00
fields = [ ' ipv4 ' , ' mac_address ' , ' type ' , ' details ' ]
2016-07-09 19:51:37 +02:00
2016-10-24 19:52:29 +02:00
def __init__ ( self , * args , * * kwargs ) :
2016-10-13 02:11:23 +02:00
infra = kwargs . pop ( ' infra ' )
2016-07-09 19:51:37 +02:00
super ( BaseEditInterfaceForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' ipv4 ' ] . empty_label = " Assignation automatique de l ' ipv4 "
2016-10-13 02:11:23 +02:00
if not infra :
2016-12-14 03:08:57 +01:00
self . fields [ ' type ' ] . queryset = MachineType . objects . filter ( ip_type__in = IpType . objects . filter ( need_infra = False ) )
2017-07-21 05:06:53 +02:00
self . fields [ ' ipv4 ' ] . queryset = IpList . objects . filter ( interface__isnull = True ) . filter ( ip_type__in = IpType . objects . filter ( need_infra = False ) )
2016-11-30 04:48:47 +01:00
else :
self . fields [ ' ipv4 ' ] . queryset = IpList . objects . filter ( interface__isnull = True )
2016-07-09 19:51:37 +02:00
2016-11-19 21:15:43 +01:00
class AliasForm ( ModelForm ) :
2016-11-01 02:14:06 +01:00
class Meta :
2016-12-24 20:04:53 +01:00
model = Domain
fields = [ ' name ' , ' extension ' ]
2016-11-01 02:14:06 +01:00
2016-11-19 23:19:44 +01:00
def __init__ ( self , * args , * * kwargs ) :
2017-01-13 22:25:03 +01:00
if ' infra ' in kwargs :
infra = kwargs . pop ( ' infra ' )
2017-07-23 04:22:22 +02:00
super ( AliasForm , self ) . __init__ ( * args , * * kwargs )
class DomainForm ( AliasForm ) :
class Meta ( AliasForm . Meta ) :
fields = [ ' name ' ]
def __init__ ( self , * args , * * kwargs ) :
2017-01-09 16:20:13 +01:00
if ' name_user ' in kwargs :
name_user = kwargs . pop ( ' name_user ' )
nb_machine = kwargs . pop ( ' nb_machine ' )
initial = kwargs . get ( ' initial ' , { } )
initial [ ' name ' ] = name_user . lower ( ) + str ( nb_machine )
kwargs [ ' initial ' ] = initial
2017-07-23 04:22:22 +02:00
super ( DomainForm , self ) . __init__ ( * args , * * kwargs )
2016-11-19 23:19:44 +01:00
2017-08-19 00:01:06 +02:00
class DelAliasForm ( Form ) :
2016-12-24 20:04:53 +01:00
alias = forms . ModelMultipleChoiceField ( queryset = Domain . objects . all ( ) , label = " Alias actuels " , widget = forms . CheckboxSelectMultiple )
2016-11-19 21:15:43 +01:00
def __init__ ( self , * args , * * kwargs ) :
interface = kwargs . pop ( ' interface ' )
super ( DelAliasForm , self ) . __init__ ( * args , * * kwargs )
2016-12-24 20:04:53 +01:00
self . fields [ ' alias ' ] . queryset = Domain . objects . filter ( cname__in = Domain . objects . filter ( interface_parent = interface ) )
2016-11-19 17:44:43 +01:00
2016-07-07 13:19:03 +02:00
class MachineTypeForm ( ModelForm ) :
class Meta :
model = MachineType
2016-10-23 00:55:58 +02:00
fields = [ ' type ' , ' ip_type ' ]
2016-07-07 13:19:03 +02:00
def __init__ ( self , * args , * * kwargs ) :
super ( MachineTypeForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' type ' ] . label = ' Type de machine à ajouter '
2016-10-23 00:55:58 +02:00
self . fields [ ' ip_type ' ] . label = " Type d ' ip relié "
2016-07-07 13:19:03 +02:00
2017-08-08 06:56:19 +02:00
class DelMachineTypeForm ( Form ) :
2016-07-07 13:19:03 +02:00
machinetypes = forms . ModelMultipleChoiceField ( queryset = MachineType . objects . all ( ) , label = " Types de machines actuelles " , widget = forms . CheckboxSelectMultiple )
2016-10-23 00:55:58 +02:00
class IpTypeForm ( ModelForm ) :
class Meta :
model = IpType
2017-08-29 00:35:03 +02:00
fields = [ ' type ' , ' extension ' , ' need_infra ' , ' domaine_ip_start ' , ' domaine_ip_stop ' , ' vlan ' ]
2016-10-23 00:55:58 +02:00
def __init__ ( self , * args , * * kwargs ) :
super ( IpTypeForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' type ' ] . label = ' Type ip à ajouter '
2017-07-21 05:06:53 +02:00
class EditIpTypeForm ( IpTypeForm ) :
class Meta ( IpTypeForm . Meta ) :
2017-08-26 15:10:18 +02:00
fields = [ ' extension ' , ' type ' , ' need_infra ' , ' vlan ' ]
2016-10-23 00:55:58 +02:00
2017-08-08 06:56:19 +02:00
class DelIpTypeForm ( Form ) :
2017-07-21 05:06:53 +02:00
iptypes = forms . ModelMultipleChoiceField ( queryset = IpType . objects . all ( ) , label = " Types d ' ip actuelles " , widget = forms . CheckboxSelectMultiple )
2016-10-23 00:55:58 +02:00
2016-07-08 17:54:06 +02:00
class ExtensionForm ( ModelForm ) :
class Meta :
model = Extension
2016-11-19 23:19:44 +01:00
fields = [ ' name ' , ' need_infra ' , ' origin ' ]
2016-07-08 17:54:06 +02:00
def __init__ ( self , * args , * * kwargs ) :
super ( ExtensionForm , self ) . __init__ ( * args , * * kwargs )
2016-10-26 14:05:40 +02:00
self . fields [ ' name ' ] . label = ' Extension à ajouter '
2016-11-19 18:52:59 +01:00
self . fields [ ' origin ' ] . label = ' Enregistrement A origin '
2016-07-08 17:54:06 +02:00
2017-08-19 00:01:06 +02:00
class DelExtensionForm ( Form ) :
2016-07-08 17:54:06 +02:00
extensions = forms . ModelMultipleChoiceField ( queryset = Extension . objects . all ( ) , label = " Extensions actuelles " , widget = forms . CheckboxSelectMultiple )
2016-11-19 17:44:43 +01:00
class MxForm ( ModelForm ) :
class Meta :
model = Mx
fields = [ ' zone ' , ' priority ' , ' name ' ]
2017-01-05 23:48:45 +01:00
def __init__ ( self , * args , * * kwargs ) :
super ( MxForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' name ' ] . queryset = Domain . objects . exclude ( interface_parent = None )
2017-08-08 06:56:19 +02:00
class DelMxForm ( Form ) :
2016-11-19 17:44:43 +01:00
mx = forms . ModelMultipleChoiceField ( queryset = Mx . objects . all ( ) , label = " MX actuels " , widget = forms . CheckboxSelectMultiple )
2016-11-19 18:21:05 +01:00
class NsForm ( ModelForm ) :
class Meta :
model = Ns
2016-12-26 17:43:41 +01:00
fields = [ ' zone ' , ' ns ' ]
2016-11-19 18:21:05 +01:00
2016-12-26 19:45:43 +01:00
def __init__ ( self , * args , * * kwargs ) :
super ( NsForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' ns ' ] . queryset = Domain . objects . exclude ( interface_parent = None )
2017-08-08 06:56:19 +02:00
class DelNsForm ( Form ) :
2016-11-19 18:21:05 +01:00
ns = forms . ModelMultipleChoiceField ( queryset = Ns . objects . all ( ) , label = " Enregistrements NS actuels " , widget = forms . CheckboxSelectMultiple )
2017-09-05 18:18:41 +02:00
class TextForm ( ModelForm ) :
class Meta :
model = Text
fields = ' __all__ '
class DelTextForm ( Form ) :
text = forms . ModelMultipleChoiceField ( queryset = Text . objects . all ( ) , label = " Enregistrements Text actuels " , widget = forms . CheckboxSelectMultiple )
2017-09-11 00:33:45 +02:00
class NasForm ( ModelForm ) :
class Meta :
model = Nas
fields = ' __all__ '
class DelNasForm ( Form ) :
nas = forms . ModelMultipleChoiceField ( queryset = Nas . objects . all ( ) , label = " Enregistrements Nas actuels " , widget = forms . CheckboxSelectMultiple )
2017-08-08 06:56:19 +02:00
class ServiceForm ( ModelForm ) :
2016-11-19 18:21:05 +01:00
class Meta :
2017-08-08 06:56:19 +02:00
model = Service
fields = ' __all__ '
def save ( self , commit = True ) :
instance = super ( ServiceForm , self ) . save ( commit = False )
if commit :
instance . save ( )
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 )
2017-08-26 15:10:18 +02:00
class VlanForm ( ModelForm ) :
class Meta :
model = Vlan
fields = ' __all__ '
class DelVlanForm ( Form ) :
vlan = forms . ModelMultipleChoiceField ( queryset = Vlan . objects . all ( ) , label = " Vlan actuels " , widget = forms . CheckboxSelectMultiple )