mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-22 11:23:10 +00:00
Pep8 compliance on machines
This commit is contained in:
parent
0c8bb61574
commit
287ce23d1c
7 changed files with 1010 additions and 348 deletions
|
@ -26,6 +26,7 @@
|
||||||
Here are defined some functions to check acl on the application.
|
Here are defined some functions to check acl on the application.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def can_view(user):
|
def can_view(user):
|
||||||
"""Check if an user can view the application.
|
"""Check if an user can view the application.
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@ class OuverturePortListAdmin(VersionAdmin):
|
||||||
|
|
||||||
|
|
||||||
class InterfaceAdmin(VersionAdmin):
|
class InterfaceAdmin(VersionAdmin):
|
||||||
list_display = ('machine','type','mac_address','ipv4','details')
|
list_display = ('machine', 'type', 'mac_address', 'ipv4', 'details')
|
||||||
|
|
||||||
|
|
||||||
class DomainAdmin(VersionAdmin):
|
class DomainAdmin(VersionAdmin):
|
||||||
|
@ -133,5 +133,3 @@ admin.site.register(Ipv6List, Ipv6ListAdmin)
|
||||||
admin.site.register(Nas, NasAdmin)
|
admin.site.register(Nas, NasAdmin)
|
||||||
admin.site.register(OuverturePort, OuverturePortAdmin)
|
admin.site.register(OuverturePort, OuverturePortAdmin)
|
||||||
admin.site.register(OuverturePortList, OuverturePortListAdmin)
|
admin.site.register(OuverturePortList, OuverturePortListAdmin)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,8 @@ class EditInterfaceForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
|
||||||
self.fields['type'].label = 'Type de machine'
|
self.fields['type'].label = 'Type de machine'
|
||||||
self.fields['type'].empty_label = "Séléctionner un type de machine"
|
self.fields['type'].empty_label = "Séléctionner un type de machine"
|
||||||
if "ipv4" in self.fields:
|
if "ipv4" in self.fields:
|
||||||
self.fields['ipv4'].empty_label = "Assignation automatique de l'ipv4"
|
self.fields['ipv4'].empty_label = ("Assignation automatique de "
|
||||||
|
"l'ipv4")
|
||||||
self.fields['ipv4'].queryset = IpList.objects.filter(
|
self.fields['ipv4'].queryset = IpList.objects.filter(
|
||||||
interface__isnull=True
|
interface__isnull=True
|
||||||
)
|
)
|
||||||
|
@ -328,6 +329,7 @@ class MxForm(FormRevMixin, ModelForm):
|
||||||
interface_parent=None
|
interface_parent=None
|
||||||
).select_related('extension')
|
).select_related('extension')
|
||||||
|
|
||||||
|
|
||||||
class DelMxForm(FormRevMixin, Form):
|
class DelMxForm(FormRevMixin, Form):
|
||||||
"""Suppression d'un ou plusieurs MX"""
|
"""Suppression d'un ou plusieurs MX"""
|
||||||
mx = forms.ModelMultipleChoiceField(
|
mx = forms.ModelMultipleChoiceField(
|
||||||
|
@ -472,8 +474,10 @@ class ServiceForm(FormRevMixin, ModelForm):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||||
super(ServiceForm, self).__init__(*args, prefix=prefix, **kwargs)
|
super(ServiceForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||||
self.fields['servers'].queryset = Interface.objects.all()\
|
self.fields['servers'].queryset = (Interface.objects.all()
|
||||||
.select_related('domain__extension')
|
.select_related(
|
||||||
|
'domain__extension'
|
||||||
|
))
|
||||||
|
|
||||||
def save(self, commit=True):
|
def save(self, commit=True):
|
||||||
instance = super(ServiceForm, self).save(commit=False)
|
instance = super(ServiceForm, self).save(commit=False)
|
||||||
|
|
|
@ -40,7 +40,7 @@ from django.core.validators import MaxValueValidator
|
||||||
from macaddress.fields import MACAddressField
|
from macaddress.fields import MACAddressField
|
||||||
|
|
||||||
from re2o.field_permissions import FieldPermissionModelMixin
|
from re2o.field_permissions import FieldPermissionModelMixin
|
||||||
from re2o.mixins import AclMixin, RevMixin
|
from re2o.mixins import AclMixin, RevMixin
|
||||||
|
|
||||||
import users.models
|
import users.models
|
||||||
import preferences.models
|
import preferences.models
|
||||||
|
@ -63,7 +63,8 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
permissions = (
|
permissions = (
|
||||||
("view_machine", "Peut voir un objet machine quelquonque"),
|
("view_machine", "Peut voir un objet machine quelquonque"),
|
||||||
("change_machine_user", "Peut changer le propriétaire d'une machine"),
|
("change_machine_user",
|
||||||
|
"Peut changer le propriétaire d'une machine"),
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_instance(machineid, *args, **kwargs):
|
def get_instance(machineid, *args, **kwargs):
|
||||||
|
@ -76,7 +77,12 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
def linked_objects(self):
|
def linked_objects(self):
|
||||||
"""Return linked objects : machine and domain.
|
"""Return linked objects : machine and domain.
|
||||||
Usefull in history display"""
|
Usefull in history display"""
|
||||||
return chain(self.interface_set.all(), Domain.objects.filter(interface_parent__in=self.interface_set.all()))
|
return chain(
|
||||||
|
self.interface_set.all(),
|
||||||
|
Domain.objects.filter(
|
||||||
|
interface_parent__in=self.interface_set.all()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def can_change_user(user_request, *args, **kwargs):
|
def can_change_user(user_request, *args, **kwargs):
|
||||||
|
@ -90,7 +96,8 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
A tuple with a boolean stating if edition is allowed and an
|
A tuple with a boolean stating if edition is allowed and an
|
||||||
explanation message.
|
explanation message.
|
||||||
"""
|
"""
|
||||||
return user_request.has_perm('machines.change_machine_user'), "Vous ne pouvez pas modifier l'utilisateur de la machine."
|
return (user_request.has_perm('machines.change_machine_user'),
|
||||||
|
"Vous ne pouvez pas modifier l'utilisateur de la machine.")
|
||||||
|
|
||||||
def can_view_all(user_request, *args, **kwargs):
|
def can_view_all(user_request, *args, **kwargs):
|
||||||
"""Vérifie qu'on peut bien afficher l'ensemble des machines,
|
"""Vérifie qu'on peut bien afficher l'ensemble des machines,
|
||||||
|
@ -98,7 +105,8 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
:param user_request: instance user qui fait l'edition
|
:param user_request: instance user qui fait l'edition
|
||||||
:return: True ou False avec la raison de l'échec le cas échéant"""
|
:return: True ou False avec la raison de l'échec le cas échéant"""
|
||||||
if not user_request.has_perm('machines.view_machine'):
|
if not user_request.has_perm('machines.view_machine'):
|
||||||
return False, u"Vous ne pouvez pas afficher l'ensemble des machines sans permission"
|
return False, (u"Vous ne pouvez pas afficher l'ensemble des "
|
||||||
|
"machines sans permission")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_create(user_request, userid, *args, **kwargs):
|
def can_create(user_request, userid, *args, **kwargs):
|
||||||
|
@ -111,17 +119,21 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
user = users.models.User.objects.get(pk=userid)
|
user = users.models.User.objects.get(pk=userid)
|
||||||
except users.models.User.DoesNotExist:
|
except users.models.User.DoesNotExist:
|
||||||
return False, u"Utilisateur inexistant"
|
return False, u"Utilisateur inexistant"
|
||||||
max_lambdauser_interfaces = preferences.models.OptionalMachine.get_cached_value('max_lambdauser_interfaces')
|
max_lambdauser_interfaces = (preferences.models.OptionalMachine
|
||||||
|
.get_cached_value(
|
||||||
|
'max_lambdauser_interfaces'
|
||||||
|
))
|
||||||
if not user_request.has_perm('machines.add_machine'):
|
if not user_request.has_perm('machines.add_machine'):
|
||||||
if not preferences.models.OptionalMachine.get_cached_value('create_machine'):
|
if not (preferences.models.OptionalMachine
|
||||||
|
.get_cached_value('create_machine')):
|
||||||
return False, u"Vous ne pouvez pas ajouter une machine"
|
return False, u"Vous ne pouvez pas ajouter une machine"
|
||||||
if user != user_request:
|
if user != user_request:
|
||||||
return False, u"Vous ne pouvez pas ajouter une machine à un\
|
return False, (u"Vous ne pouvez pas ajouter une machine à un "
|
||||||
autre user que vous sans droit"
|
"autre user que vous sans droit")
|
||||||
if user.user_interfaces().count() >= max_lambdauser_interfaces:
|
if user.user_interfaces().count() >= max_lambdauser_interfaces:
|
||||||
return False, u"Vous avez atteint le maximum d'interfaces\
|
return False, (u"Vous avez atteint le maximum d'interfaces "
|
||||||
autorisées que vous pouvez créer vous même (%s) "\
|
"autorisées que vous pouvez créer vous même "
|
||||||
% max_lambdauser_interfaces
|
"(%s) " % max_lambdauser_interfaces)
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_edit(self, user_request, *args, **kwargs):
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
|
@ -131,9 +143,15 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
:param user_request: instance user qui fait l'edition
|
:param user_request: instance user qui fait l'edition
|
||||||
:return: True ou False avec la raison le cas échéant"""
|
:return: True ou False avec la raison le cas échéant"""
|
||||||
if self.user != user_request:
|
if self.user != user_request:
|
||||||
if not user_request.has_perm('machines.change_interface') or not self.user.can_edit(self.user, user_request, *args, **kwargs)[0]:
|
if (not user_request.has_perm('machines.change_interface') or
|
||||||
return False, u"Vous ne pouvez pas éditer une machine\
|
not self.user.can_edit(
|
||||||
d'un autre user que vous sans droit"
|
self.user,
|
||||||
|
user_request,
|
||||||
|
*args,
|
||||||
|
**kwargs
|
||||||
|
)[0]):
|
||||||
|
return False, (u"Vous ne pouvez pas éditer une machine "
|
||||||
|
"d'un autre user que vous sans droit")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_delete(self, user_request, *args, **kwargs):
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
|
@ -143,9 +161,15 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
:param user_request: instance user qui fait l'edition
|
:param user_request: instance user qui fait l'edition
|
||||||
:return: True ou False avec la raison de l'échec le cas échéant"""
|
:return: True ou False avec la raison de l'échec le cas échéant"""
|
||||||
if self.user != user_request:
|
if self.user != user_request:
|
||||||
if not user_request.has_perm('machines.change_interface') or not self.user.can_edit(self.user, user_request, *args, **kwargs)[0]:
|
if (not user_request.has_perm('machines.change_interface') or
|
||||||
return False, u"Vous ne pouvez pas éditer une machine\
|
not self.user.can_edit(
|
||||||
d'un autre user que vous sans droit"
|
self.user,
|
||||||
|
user_request,
|
||||||
|
*args,
|
||||||
|
**kwargs
|
||||||
|
)[0]):
|
||||||
|
return False, (u"Vous ne pouvez pas éditer une machine "
|
||||||
|
"d'un autre user que vous sans droit")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_view(self, user_request, *args, **kwargs):
|
def can_view(self, user_request, *args, **kwargs):
|
||||||
|
@ -154,15 +178,16 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
|
||||||
:param self: instance machine à éditer
|
:param self: instance machine à éditer
|
||||||
:param user_request: instance user qui fait l'edition
|
:param user_request: instance user qui fait l'edition
|
||||||
:return: True ou False avec la raison de l'échec le cas échéant"""
|
:return: True ou False avec la raison de l'échec le cas échéant"""
|
||||||
if not user_request.has_perm('machines.view_machine') and self.user != user_request:
|
if (not user_request.has_perm('machines.view_machine') and
|
||||||
return False, u"Vous n'avez pas droit de voir les machines autre\
|
self.user != user_request):
|
||||||
que les vôtres"
|
return False, (u"Vous n'avez pas droit de voir les machines autre "
|
||||||
|
"que les vôtres")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(Machine, self).__init__(*args, **kwargs)
|
super(Machine, self).__init__(*args, **kwargs)
|
||||||
self.field_permissions = {
|
self.field_permissions = {
|
||||||
'user' : self.can_change_user,
|
'user': self.can_change_user,
|
||||||
}
|
}
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -184,7 +209,8 @@ class MachineType(RevMixin, AclMixin, models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
permissions = (
|
permissions = (
|
||||||
("view_machinetype", "Peut voir un objet machinetype"),
|
("view_machinetype", "Peut voir un objet machinetype"),
|
||||||
("use_all_machinetype", "Peut utiliser n'importe quel type de machine"),
|
("use_all_machinetype",
|
||||||
|
"Peut utiliser n'importe quel type de machine"),
|
||||||
)
|
)
|
||||||
|
|
||||||
def all_interfaces(self):
|
def all_interfaces(self):
|
||||||
|
@ -202,7 +228,8 @@ class MachineType(RevMixin, AclMixin, models.Model):
|
||||||
message is acces is not allowed.
|
message is acces is not allowed.
|
||||||
"""
|
"""
|
||||||
if not user_request.has_perm('machines.use_all_machinetype'):
|
if not user_request.has_perm('machines.use_all_machinetype'):
|
||||||
return False, u"Vous n'avez pas le droit d'utiliser tout types de machines"
|
return False, (u"Vous n'avez pas le droit d'utiliser tout types "
|
||||||
|
"de machines")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -300,7 +327,11 @@ class IpType(RevMixin, AclMixin, models.Model):
|
||||||
if not self.prefix_v6:
|
if not self.prefix_v6:
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
for ipv6 in Ipv6List.objects.filter(interface__in=Interface.objects.filter(type__in=MachineType.objects.filter(ip_type=self))):
|
for ipv6 in Ipv6List.objects.filter(
|
||||||
|
interface__in=Interface.objects.filter(
|
||||||
|
type__in=MachineType.objects.filter(ip_type=self)
|
||||||
|
)
|
||||||
|
):
|
||||||
ipv6.check_and_replace_prefix(prefix=self.prefix_v6)
|
ipv6.check_and_replace_prefix(prefix=self.prefix_v6)
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
|
@ -330,7 +361,8 @@ class IpType(RevMixin, AclMixin, models.Model):
|
||||||
super(IpType, self).save(*args, **kwargs)
|
super(IpType, self).save(*args, **kwargs)
|
||||||
|
|
||||||
def can_use_all(user_request, *args, **kwargs):
|
def can_use_all(user_request, *args, **kwargs):
|
||||||
"""Superdroit qui permet d'utiliser toutes les extensions sans restrictions
|
"""Superdroit qui permet d'utiliser toutes les extensions sans
|
||||||
|
restrictions
|
||||||
:param user_request: instance user qui fait l'edition
|
:param user_request: instance user qui fait l'edition
|
||||||
:return: True ou False avec la raison de l'échec le cas échéant"""
|
:return: True ou False avec la raison de l'échec le cas échéant"""
|
||||||
return user_request.has_perm('machines.use_all_iptype'), None
|
return user_request.has_perm('machines.use_all_iptype'), None
|
||||||
|
@ -409,17 +441,17 @@ class SOA(RevMixin, AclMixin, models.Model):
|
||||||
help_text='Email du contact pour la zone'
|
help_text='Email du contact pour la zone'
|
||||||
)
|
)
|
||||||
refresh = models.PositiveIntegerField(
|
refresh = models.PositiveIntegerField(
|
||||||
default=86400, # 24 hours
|
default=86400, # 24 hours
|
||||||
help_text='Secondes avant que les DNS secondaires doivent demander le\
|
help_text='Secondes avant que les DNS secondaires doivent demander le\
|
||||||
serial du DNS primaire pour détecter une modification'
|
serial du DNS primaire pour détecter une modification'
|
||||||
)
|
)
|
||||||
retry = models.PositiveIntegerField(
|
retry = models.PositiveIntegerField(
|
||||||
default=7200, # 2 hours
|
default=7200, # 2 hours
|
||||||
help_text='Secondes avant que les DNS secondaires fassent une nouvelle\
|
help_text='Secondes avant que les DNS secondaires fassent une nouvelle\
|
||||||
demande de serial en cas de timeout du DNS primaire'
|
demande de serial en cas de timeout du DNS primaire'
|
||||||
)
|
)
|
||||||
expire = models.PositiveIntegerField(
|
expire = models.PositiveIntegerField(
|
||||||
default=3600000, # 1000 hours
|
default=3600000, # 1000 hours
|
||||||
help_text='Secondes après lesquelles les DNS secondaires arrêtent de\
|
help_text='Secondes après lesquelles les DNS secondaires arrêtent de\
|
||||||
de répondre aux requêtes en cas de timeout du DNS primaire'
|
de répondre aux requêtes en cas de timeout du DNS primaire'
|
||||||
)
|
)
|
||||||
|
@ -469,8 +501,10 @@ class SOA(RevMixin, AclMixin, models.Model):
|
||||||
extensions .
|
extensions .
|
||||||
/!\ Ne jamais supprimer ou renommer cette fonction car elle est
|
/!\ Ne jamais supprimer ou renommer cette fonction car elle est
|
||||||
utilisée dans les migrations de la BDD. """
|
utilisée dans les migrations de la BDD. """
|
||||||
return cls.objects.get_or_create(name="SOA to edit", mail="postmaser@example.com")[0].pk
|
return cls.objects.get_or_create(
|
||||||
|
name="SOA to edit",
|
||||||
|
mail="postmaser@example.com"
|
||||||
|
)[0].pk
|
||||||
|
|
||||||
|
|
||||||
class Extension(RevMixin, AclMixin, models.Model):
|
class Extension(RevMixin, AclMixin, models.Model):
|
||||||
|
@ -522,7 +556,8 @@ class Extension(RevMixin, AclMixin, models.Model):
|
||||||
return entry
|
return entry
|
||||||
|
|
||||||
def can_use_all(user_request, *args, **kwargs):
|
def can_use_all(user_request, *args, **kwargs):
|
||||||
"""Superdroit qui permet d'utiliser toutes les extensions sans restrictions
|
"""Superdroit qui permet d'utiliser toutes les extensions sans
|
||||||
|
restrictions
|
||||||
:param user_request: instance user qui fait l'edition
|
:param user_request: instance user qui fait l'edition
|
||||||
:return: True ou False avec la raison de l'échec le cas échéant"""
|
:return: True ou False avec la raison de l'échec le cas échéant"""
|
||||||
return user_request.has_perm('machines.use_all_extension'), None
|
return user_request.has_perm('machines.use_all_extension'), None
|
||||||
|
@ -555,7 +590,10 @@ class Mx(RevMixin, AclMixin, models.Model):
|
||||||
def dns_entry(self):
|
def dns_entry(self):
|
||||||
"""Renvoie l'entrée DNS complète pour un MX à mettre dans les
|
"""Renvoie l'entrée DNS complète pour un MX à mettre dans les
|
||||||
fichiers de zones"""
|
fichiers de zones"""
|
||||||
return "@ IN MX " + str(self.priority).ljust(3) + " " + str(self.name)
|
return "@ IN MX {prior} {name}".format(
|
||||||
|
prior=str(self.priority).ljust(3),
|
||||||
|
name=str(name)
|
||||||
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.zone) + ' ' + str(self.priority) + ' ' + str(self.name)
|
return str(self.zone) + ' ' + str(self.priority) + ' ' + str(self.name)
|
||||||
|
@ -611,7 +649,7 @@ class Srv(RevMixin, AclMixin, models.Model):
|
||||||
TCP = 'TCP'
|
TCP = 'TCP'
|
||||||
UDP = 'UDP'
|
UDP = 'UDP'
|
||||||
|
|
||||||
service = models.CharField(max_length=31)
|
service = models.CharField(max_length=31)
|
||||||
protocole = models.CharField(
|
protocole = models.CharField(
|
||||||
max_length=3,
|
max_length=3,
|
||||||
choices=(
|
choices=(
|
||||||
|
@ -628,9 +666,9 @@ class Srv(RevMixin, AclMixin, models.Model):
|
||||||
priority = models.PositiveIntegerField(
|
priority = models.PositiveIntegerField(
|
||||||
default=0,
|
default=0,
|
||||||
validators=[MaxValueValidator(65535)],
|
validators=[MaxValueValidator(65535)],
|
||||||
help_text="La priorité du serveur cible (valeur entière non négative,\
|
help_text=("La priorité du serveur cible (valeur entière non "
|
||||||
plus elle est faible, plus ce serveur sera utilisé s'il est disponible)"
|
"négative, plus elle est faible, plus ce serveur sera "
|
||||||
|
"utilisé s'il est disponible)")
|
||||||
)
|
)
|
||||||
weight = models.PositiveIntegerField(
|
weight = models.PositiveIntegerField(
|
||||||
default=0,
|
default=0,
|
||||||
|
@ -667,7 +705,7 @@ class Srv(RevMixin, AclMixin, models.Model):
|
||||||
str(self.port) + ' ' + str(self.target) + '.'
|
str(self.port) + ' ' + str(self.target) + '.'
|
||||||
|
|
||||||
|
|
||||||
class Interface(RevMixin, AclMixin, FieldPermissionModelMixin,models.Model):
|
class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
||||||
""" Une interface. Objet clef de l'application machine :
|
""" Une interface. Objet clef de l'application machine :
|
||||||
- une address mac unique. Possibilité de la rendre unique avec le
|
- une address mac unique. Possibilité de la rendre unique avec le
|
||||||
typemachine
|
typemachine
|
||||||
|
@ -692,7 +730,8 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin,models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
permissions = (
|
permissions = (
|
||||||
("view_interface", "Peut voir un objet interface"),
|
("view_interface", "Peut voir un objet interface"),
|
||||||
("change_interface_machine", "Peut changer le propriétaire d'une interface"),
|
("change_interface_machine",
|
||||||
|
"Peut changer le propriétaire d'une interface"),
|
||||||
)
|
)
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
|
@ -719,7 +758,10 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin,models.Model):
|
||||||
prefix_v6 = self.type.ip_type.prefix_v6
|
prefix_v6 = self.type.ip_type.prefix_v6
|
||||||
if not prefix_v6:
|
if not prefix_v6:
|
||||||
return None
|
return None
|
||||||
return IPv6Address(IPv6Address(prefix_v6).exploded[:20] + IPv6Address(self.id).exploded[20:])
|
return IPv6Address(
|
||||||
|
IPv6Address(prefix_v6).exploded[:20] +
|
||||||
|
IPv6Address(self.id).exploded[20:]
|
||||||
|
)
|
||||||
|
|
||||||
def sync_ipv6_dhcpv6(self):
|
def sync_ipv6_dhcpv6(self):
|
||||||
"""Affecte une ipv6 dhcpv6 calculée à partir de l'id de la machine"""
|
"""Affecte une ipv6 dhcpv6 calculée à partir de l'id de la machine"""
|
||||||
|
@ -741,7 +783,9 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin,models.Model):
|
||||||
ipv6_slaac = self.ipv6_slaac
|
ipv6_slaac = self.ipv6_slaac
|
||||||
if not ipv6_slaac:
|
if not ipv6_slaac:
|
||||||
return
|
return
|
||||||
ipv6_object = Ipv6List.objects.filter(interface=self, slaac_ip=True).first()
|
ipv6_object = (Ipv6List.objects
|
||||||
|
.filter(interface=self, slaac_ip=True)
|
||||||
|
.first())
|
||||||
if not ipv6_object:
|
if not ipv6_object:
|
||||||
ipv6_object = Ipv6List(interface=self, slaac_ip=True)
|
ipv6_object = Ipv6List(interface=self, slaac_ip=True)
|
||||||
if ipv6_object.ipv6 != str(ipv6_slaac):
|
if ipv6_object.ipv6 != str(ipv6_slaac):
|
||||||
|
@ -750,19 +794,24 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin,models.Model):
|
||||||
|
|
||||||
def sync_ipv6(self):
|
def sync_ipv6(self):
|
||||||
"""Cree et met à jour l'ensemble des ipv6 en fonction du mode choisi"""
|
"""Cree et met à jour l'ensemble des ipv6 en fonction du mode choisi"""
|
||||||
if preferences.models.OptionalMachine.get_cached_value('ipv6_mode') == 'SLAAC':
|
if (preferences.models.OptionalMachine
|
||||||
|
.get_cached_value('ipv6_mode') == 'SLAAC'):
|
||||||
self.sync_ipv6_slaac()
|
self.sync_ipv6_slaac()
|
||||||
elif preferences.models.OptionalMachine.get_cached_value('ipv6_mode') == 'DHCPV6':
|
elif (preferences.models.OptionalMachine
|
||||||
|
.get_cached_value('ipv6_mode') == 'DHCPV6'):
|
||||||
self.sync_ipv6_dhcpv6()
|
self.sync_ipv6_dhcpv6()
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
def ipv6(self):
|
def ipv6(self):
|
||||||
""" Renvoie le queryset de la liste des ipv6
|
""" Renvoie le queryset de la liste des ipv6
|
||||||
On renvoie l'ipv6 slaac que si le mode slaac est activé (et non dhcpv6)"""
|
On renvoie l'ipv6 slaac que si le mode slaac est activé
|
||||||
if preferences.models.OptionalMachine.get_cached_value('ipv6_mode') == 'SLAAC':
|
(et non dhcpv6)"""
|
||||||
|
if (preferences.models.OptionalMachine
|
||||||
|
.get_cached_value('ipv6_mode') == 'SLAAC'):
|
||||||
return self.ipv6list.all()
|
return self.ipv6list.all()
|
||||||
elif preferences.models.OptionalMachine.get_cached_value('ipv6_mode') == 'DHCPV6':
|
elif (preferences.models.OptionalMachine
|
||||||
|
.get_cached_value('ipv6_mode') == 'DHCPV6'):
|
||||||
return self.ipv6list.filter(slaac_ip=False)
|
return self.ipv6list.filter(slaac_ip=False)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
@ -789,7 +838,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin,models.Model):
|
||||||
# instance.
|
# instance.
|
||||||
# But in our case, it's impossible to create a type value so we raise
|
# But in our case, it's impossible to create a type value so we raise
|
||||||
# the error.
|
# the error.
|
||||||
if not hasattr(self, 'type') :
|
if not hasattr(self, 'type'):
|
||||||
raise ValidationError("Le type d'ip choisi n'est pas valide")
|
raise ValidationError("Le type d'ip choisi n'est pas valide")
|
||||||
self.filter_macaddress()
|
self.filter_macaddress()
|
||||||
self.mac_address = str(EUI(self.mac_address)) or None
|
self.mac_address = str(EUI(self.mac_address)) or None
|
||||||
|
@ -836,13 +885,18 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin,models.Model):
|
||||||
except Machine.DoesNotExist:
|
except Machine.DoesNotExist:
|
||||||
return False, u"Machine inexistante"
|
return False, u"Machine inexistante"
|
||||||
if not user_request.has_perm('machines.add_interface'):
|
if not user_request.has_perm('machines.add_interface'):
|
||||||
if not preferences.models.OptionalMachine.get_cached_value('create_machine'):
|
if not (preferences.models.OptionalMachine
|
||||||
|
.get_cached_value('create_machine')):
|
||||||
return False, u"Vous ne pouvez pas ajouter une machine"
|
return False, u"Vous ne pouvez pas ajouter une machine"
|
||||||
max_lambdauser_interfaces = preferences.models.OptionalMachine.get_cached_value('max_lambdauser_interfaces')
|
max_lambdauser_interfaces = (preferences.models.OptionalMachine
|
||||||
|
.get_cached_value(
|
||||||
|
'max_lambdauser_interfaces'
|
||||||
|
))
|
||||||
if machine.user != user_request:
|
if machine.user != user_request:
|
||||||
return False, u"Vous ne pouvez pas ajouter une interface à une\
|
return False, u"Vous ne pouvez pas ajouter une interface à une\
|
||||||
machine d'un autre user que vous sans droit"
|
machine d'un autre user que vous sans droit"
|
||||||
if machine.user.user_interfaces().count() >= max_lambdauser_interfaces:
|
if (machine.user.user_interfaces().count() >=
|
||||||
|
max_lambdauser_interfaces):
|
||||||
return False, u"Vous avez atteint le maximum d'interfaces\
|
return False, u"Vous avez atteint le maximum d'interfaces\
|
||||||
autorisées que vous pouvez créer vous même (%s) "\
|
autorisées que vous pouvez créer vous même (%s) "\
|
||||||
% max_lambdauser_interfaces
|
% max_lambdauser_interfaces
|
||||||
|
@ -850,7 +904,8 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin,models.Model):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def can_change_machine(user_request, *args, **kwargs):
|
def can_change_machine(user_request, *args, **kwargs):
|
||||||
return user_request.has_perm('machines.change_interface_machine'), "Droit requis pour changer la machine"
|
return (user_request.has_perm('machines.change_interface_machine'),
|
||||||
|
"Droit requis pour changer la machine")
|
||||||
|
|
||||||
def can_edit(self, user_request, *args, **kwargs):
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
"""Verifie que l'user a les bons droits infra pour editer
|
"""Verifie que l'user a les bons droits infra pour editer
|
||||||
|
@ -859,9 +914,14 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin,models.Model):
|
||||||
:param user_request: Utilisateur qui fait la requête
|
:param user_request: Utilisateur qui fait la requête
|
||||||
:return: soit True, soit False avec la raison de l'échec"""
|
:return: soit True, soit False avec la raison de l'échec"""
|
||||||
if self.machine.user != user_request:
|
if self.machine.user != user_request:
|
||||||
if not user_request.has_perm('machines.change_interface') or not self.machine.user.can_edit(user_request, *args, **kwargs)[0]:
|
if (not user_request.has_perm('machines.change_interface') or
|
||||||
return False, u"Vous ne pouvez pas éditer une machine\
|
not self.machine.user.can_edit(
|
||||||
d'un autre user que vous sans droit"
|
user_request,
|
||||||
|
*args,
|
||||||
|
**kwargs
|
||||||
|
)[0]):
|
||||||
|
return False, (u"Vous ne pouvez pas éditer une machine "
|
||||||
|
"d'un autre user que vous sans droit")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_delete(self, user_request, *args, **kwargs):
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
|
@ -871,9 +931,14 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin,models.Model):
|
||||||
:param user_request: Utilisateur qui fait la requête
|
:param user_request: Utilisateur qui fait la requête
|
||||||
:return: soit True, soit False avec la raison de l'échec"""
|
:return: soit True, soit False avec la raison de l'échec"""
|
||||||
if self.machine.user != user_request:
|
if self.machine.user != user_request:
|
||||||
if not user_request.has_perm('machines.change_interface') or not self.machine.user.can_edit(user_request, *args, **kwargs)[0]:
|
if (not user_request.has_perm('machines.change_interface') or
|
||||||
return False, u"Vous ne pouvez pas éditer une machine\
|
not self.machine.user.can_edit(
|
||||||
d'un autre user que vous sans droit"
|
user_request,
|
||||||
|
*args,
|
||||||
|
**kwargs
|
||||||
|
)[0]):
|
||||||
|
return False, (u"Vous ne pouvez pas éditer une machine "
|
||||||
|
"d'un autre user que vous sans droit")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_view(self, user_request, *args, **kwargs):
|
def can_view(self, user_request, *args, **kwargs):
|
||||||
|
@ -882,15 +947,16 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin,models.Model):
|
||||||
:param self: instance interface à voir
|
:param self: instance interface à voir
|
||||||
:param user_request: instance user qui fait l'edition
|
:param user_request: instance user qui fait l'edition
|
||||||
:return: True ou False avec la raison de l'échec le cas échéant"""
|
:return: True ou False avec la raison de l'échec le cas échéant"""
|
||||||
if not user_request.has_perm('machines.view_interface') and self.machine.user != user_request:
|
if (not user_request.has_perm('machines.view_interface') and
|
||||||
return False, u"Vous n'avez pas le droit de voir des machines autre\
|
self.machine.user != user_request):
|
||||||
que les vôtres"
|
return False, (u"Vous n'avez pas le droit de voir des machines "
|
||||||
|
"autre que les vôtres")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(Interface, self).__init__(*args, **kwargs)
|
super(Interface, self).__init__(*args, **kwargs)
|
||||||
self.field_permissions = {
|
self.field_permissions = {
|
||||||
'machine' : self.can_change_machine,
|
'machine': self.can_change_machine,
|
||||||
}
|
}
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -921,13 +987,18 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
||||||
protocol='IPv6',
|
protocol='IPv6',
|
||||||
unique=True
|
unique=True
|
||||||
)
|
)
|
||||||
interface = models.ForeignKey('Interface', on_delete=models.CASCADE, related_name='ipv6list')
|
interface = models.ForeignKey(
|
||||||
|
'Interface',
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
related_name='ipv6list'
|
||||||
|
)
|
||||||
slaac_ip = models.BooleanField(default=False)
|
slaac_ip = models.BooleanField(default=False)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
permissions = (
|
permissions = (
|
||||||
("view_ipv6list", "Peut voir un objet ipv6"),
|
("view_ipv6list", "Peut voir un objet ipv6"),
|
||||||
("change_ipv6list_slaac_ip", "Peut changer la valeur slaac sur une ipv6"),
|
("change_ipv6list_slaac_ip",
|
||||||
|
"Peut changer la valeur slaac sur une ipv6"),
|
||||||
)
|
)
|
||||||
|
|
||||||
def can_create(user_request, interfaceid, *args, **kwargs):
|
def can_create(user_request, interfaceid, *args, **kwargs):
|
||||||
|
@ -948,7 +1019,8 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def can_change_slaac_ip(user_request, *args, **kwargs):
|
def can_change_slaac_ip(user_request, *args, **kwargs):
|
||||||
return user_request.has_perm('machines.change_ipv6list_slaac_ip'), "Droit requis pour changer la valeur slaac ip"
|
return (user_request.has_perm('machines.change_ipv6list_slaac_ip'),
|
||||||
|
"Droit requis pour changer la valeur slaac ip")
|
||||||
|
|
||||||
def can_edit(self, user_request, *args, **kwargs):
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
"""Verifie que l'user a les bons droits infra pour editer
|
"""Verifie que l'user a les bons droits infra pour editer
|
||||||
|
@ -957,9 +1029,14 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
||||||
:param user_request: Utilisateur qui fait la requête
|
:param user_request: Utilisateur qui fait la requête
|
||||||
:return: soit True, soit False avec la raison de l'échec"""
|
:return: soit True, soit False avec la raison de l'échec"""
|
||||||
if self.interface.machine.user != user_request:
|
if self.interface.machine.user != user_request:
|
||||||
if not user_request.has_perm('machines.change_ipv6list') or not self.interface.machine.user.can_edit(user_request, *args, **kwargs)[0]:
|
if (not user_request.has_perm('machines.change_ipv6list') or
|
||||||
return False, u"Vous ne pouvez pas éditer une machine\
|
not self.interface.machine.user.can_edit(
|
||||||
d'un autre user que vous sans droit"
|
user_request,
|
||||||
|
*args,
|
||||||
|
**kwargs
|
||||||
|
)[0]):
|
||||||
|
return False, (u"Vous ne pouvez pas éditer une machine "
|
||||||
|
"d'un autre user que vous sans droit")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_delete(self, user_request, *args, **kwargs):
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
|
@ -969,9 +1046,14 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
||||||
:param user_request: Utilisateur qui fait la requête
|
:param user_request: Utilisateur qui fait la requête
|
||||||
:return: soit True, soit False avec la raison de l'échec"""
|
:return: soit True, soit False avec la raison de l'échec"""
|
||||||
if self.interface.machine.user != user_request:
|
if self.interface.machine.user != user_request:
|
||||||
if not user_request.has_perm('machines.change_ipv6list') or not self.interface.machine.user.can_edit(user_request, *args, **kwargs)[0]:
|
if (not user_request.has_perm('machines.change_ipv6list') or
|
||||||
return False, u"Vous ne pouvez pas éditer une machine\
|
not self.interface.machine.user.can_edit(
|
||||||
d'un autre user que vous sans droit"
|
user_request,
|
||||||
|
*args,
|
||||||
|
**kwargs
|
||||||
|
)[0]):
|
||||||
|
return False, (u"Vous ne pouvez pas éditer une machine "
|
||||||
|
"d'un autre user que vous sans droit")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_view(self, user_request, *args, **kwargs):
|
def can_view(self, user_request, *args, **kwargs):
|
||||||
|
@ -980,15 +1062,16 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
||||||
:param self: instance interface à voir
|
:param self: instance interface à voir
|
||||||
:param user_request: instance user qui fait l'edition
|
:param user_request: instance user qui fait l'edition
|
||||||
:return: True ou False avec la raison de l'échec le cas échéant"""
|
:return: True ou False avec la raison de l'échec le cas échéant"""
|
||||||
if not user_request.has_perm('machines.view_ipv6list') and self.interface.machine.user != user_request:
|
if (not user_request.has_perm('machines.view_ipv6list') and
|
||||||
return False, u"Vous n'avez pas le droit de voir des machines autre\
|
self.interface.machine.user != user_request):
|
||||||
que les vôtres"
|
return False, (u"Vous n'avez pas le droit de voir des machines "
|
||||||
|
"autre que les vôtres")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(Ipv6List, self).__init__(*args, **kwargs)
|
super(Ipv6List, self).__init__(*args, **kwargs)
|
||||||
self.field_permissions = {
|
self.field_permissions = {
|
||||||
'slaac_ip' : self.can_change_slaac_ip,
|
'slaac_ip': self.can_change_slaac_ip,
|
||||||
}
|
}
|
||||||
|
|
||||||
def check_and_replace_prefix(self, prefix=None):
|
def check_and_replace_prefix(self, prefix=None):
|
||||||
|
@ -996,17 +1079,27 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
|
||||||
prefix_v6 = prefix or self.interface.type.ip_type.prefix_v6
|
prefix_v6 = prefix or self.interface.type.ip_type.prefix_v6
|
||||||
if not prefix_v6:
|
if not prefix_v6:
|
||||||
return
|
return
|
||||||
if IPv6Address(self.ipv6).exploded[:20] != IPv6Address(prefix_v6).exploded[:20]:
|
if (IPv6Address(self.ipv6).exploded[:20] !=
|
||||||
self.ipv6 = IPv6Address(IPv6Address(prefix_v6).exploded[:20] + IPv6Address(self.ipv6).exploded[20:])
|
IPv6Address(prefix_v6).exploded[:20]):
|
||||||
|
self.ipv6 = IPv6Address(
|
||||||
|
IPv6Address(prefix_v6).exploded[:20] +
|
||||||
|
IPv6Address(self.ipv6).exploded[20:]
|
||||||
|
)
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
def clean(self, *args, **kwargs):
|
def clean(self, *args, **kwargs):
|
||||||
if self.slaac_ip and Ipv6List.objects.filter(interface=self.interface, slaac_ip=True).exclude(id=self.id):
|
if self.slaac_ip and (Ipv6List.objects
|
||||||
|
.filter(interface=self.interface, slaac_ip=True)
|
||||||
|
.exclude(id=self.id)):
|
||||||
raise ValidationError("Une ip slaac est déjà enregistrée")
|
raise ValidationError("Une ip slaac est déjà enregistrée")
|
||||||
prefix_v6 = self.interface.type.ip_type.prefix_v6
|
prefix_v6 = self.interface.type.ip_type.prefix_v6
|
||||||
if prefix_v6:
|
if prefix_v6:
|
||||||
if IPv6Address(self.ipv6).exploded[:20] != IPv6Address(prefix_v6).exploded[:20]:
|
if (IPv6Address(self.ipv6).exploded[:20] !=
|
||||||
raise ValidationError("Le prefixv6 est incorrect et ne correspond pas au type associé à la machine")
|
IPv6Address(prefix_v6).exploded[:20]):
|
||||||
|
raise ValidationError(
|
||||||
|
"Le prefixv6 est incorrect et ne correspond pas au type "
|
||||||
|
"associé à la machine"
|
||||||
|
)
|
||||||
super(Ipv6List, self).clean(*args, **kwargs)
|
super(Ipv6List, self).clean(*args, **kwargs)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
@ -1089,7 +1182,10 @@ class Domain(RevMixin, AclMixin, models.Model):
|
||||||
def dns_entry(self):
|
def dns_entry(self):
|
||||||
""" Une entrée DNS"""
|
""" Une entrée DNS"""
|
||||||
if self.cname:
|
if self.cname:
|
||||||
return str(self.name).ljust(15) + " IN CNAME " + str(self.cname) + "."
|
return "{name} IN CNAME {cname}.".format(
|
||||||
|
name=str(self.name).ljust(15),
|
||||||
|
cname=str(self.cname)
|
||||||
|
)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
""" Empèche le save sans extension valide.
|
""" Empèche le save sans extension valide.
|
||||||
|
@ -1122,18 +1218,22 @@ class Domain(RevMixin, AclMixin, models.Model):
|
||||||
except Interface.DoesNotExist:
|
except Interface.DoesNotExist:
|
||||||
return False, u"Interface inexistante"
|
return False, u"Interface inexistante"
|
||||||
if not user_request.has_perm('machines.add_domain'):
|
if not user_request.has_perm('machines.add_domain'):
|
||||||
max_lambdauser_aliases = preferences.models.OptionalMachine.get_cached_value('max_lambdauser_aliases')
|
max_lambdauser_aliases = (preferences.models.OptionalMachine
|
||||||
|
.get_cached_value(
|
||||||
|
'max_lambdauser_aliases'
|
||||||
|
))
|
||||||
if interface.machine.user != user_request:
|
if interface.machine.user != user_request:
|
||||||
return False, u"Vous ne pouvez pas ajouter un alias à une\
|
return False, (u"Vous ne pouvez pas ajouter un alias à une "
|
||||||
machine d'un autre user que vous sans droit"
|
"machine d'un autre user que vous sans droit")
|
||||||
if Domain.objects.filter(
|
if Domain.objects.filter(
|
||||||
cname__in=Domain.objects.filter(
|
cname__in=Domain.objects.filter(
|
||||||
interface_parent__in=interface.machine.user.user_interfaces()
|
interface_parent__in=(interface.machine.user
|
||||||
)
|
.user_interfaces())
|
||||||
).count() >= max_lambdauser_aliases:
|
)
|
||||||
return False, u"Vous avez atteint le maximum d'alias\
|
).count() >= max_lambdauser_aliases:
|
||||||
autorisés que vous pouvez créer vous même (%s) "\
|
return False, (u"Vous avez atteint le maximum d'alias "
|
||||||
% max_lambdauser_aliases
|
"autorisés que vous pouvez créer vous même "
|
||||||
|
"(%s) " % max_lambdauser_aliases)
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_edit(self, user_request, *args, **kwargs):
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
|
@ -1142,10 +1242,10 @@ class Domain(RevMixin, AclMixin, models.Model):
|
||||||
:param self: Instance domain à editer
|
:param self: Instance domain à editer
|
||||||
:param user_request: Utilisateur qui fait la requête
|
:param user_request: Utilisateur qui fait la requête
|
||||||
:return: soit True, soit False avec la raison de l'échec"""
|
:return: soit True, soit False avec la raison de l'échec"""
|
||||||
if not user_request.has_perm('machines.change_domain') and\
|
if (not user_request.has_perm('machines.change_domain') and
|
||||||
self.get_source_interface.machine.user != user_request:
|
self.get_source_interface.machine.user != user_request):
|
||||||
return False, u"Vous ne pouvez pas editer un alias à une machine\
|
return False, (u"Vous ne pouvez pas editer un alias à une machine "
|
||||||
d'un autre user que vous sans droit"
|
"d'un autre user que vous sans droit")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_delete(self, user_request, *args, **kwargs):
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
|
@ -1154,10 +1254,10 @@ class Domain(RevMixin, AclMixin, models.Model):
|
||||||
:param self: Instance domain à del
|
:param self: Instance domain à del
|
||||||
:param user_request: Utilisateur qui fait la requête
|
:param user_request: Utilisateur qui fait la requête
|
||||||
:return: soit True, soit False avec la raison de l'échec"""
|
:return: soit True, soit False avec la raison de l'échec"""
|
||||||
if not user_request.has_perm('machines.delete_domain') and\
|
if (not user_request.has_perm('machines.delete_domain') and
|
||||||
self.get_source_interface.machine.user != user_request:
|
self.get_source_interface.machine.user != user_request):
|
||||||
return False, u"Vous ne pouvez pas supprimer un alias à une machine\
|
return False, (u"Vous ne pouvez pas supprimer un alias à une "
|
||||||
d'un autre user que vous sans droit"
|
"machine d'un autre user que vous sans droit")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_view(self, user_request, *args, **kwargs):
|
def can_view(self, user_request, *args, **kwargs):
|
||||||
|
@ -1166,10 +1266,10 @@ class Domain(RevMixin, AclMixin, models.Model):
|
||||||
:param self: instance domain à voir
|
:param self: instance domain à voir
|
||||||
:param user_request: instance user qui fait l'edition
|
:param user_request: instance user qui fait l'edition
|
||||||
:return: True ou False avec la raison de l'échec le cas échéant"""
|
:return: True ou False avec la raison de l'échec le cas échéant"""
|
||||||
if not user_request.has_perm('machines.view_domain') and\
|
if (not user_request.has_perm('machines.view_domain') and
|
||||||
self.get_source_interface.machine.user != user_request:
|
self.get_source_interface.machine.user != user_request):
|
||||||
return False, u"Vous n'avez pas le droit de voir des machines autre\
|
return False, (u"Vous n'avez pas le droit de voir des machines "
|
||||||
que les vôtres"
|
"autre que les vôtres")
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -1238,8 +1338,8 @@ class Service(RevMixin, AclMixin, models.Model):
|
||||||
""" Django ne peut créer lui meme les relations manytomany avec table
|
""" Django ne peut créer lui meme les relations manytomany avec table
|
||||||
intermediaire explicite"""
|
intermediaire explicite"""
|
||||||
for serv in servers.exclude(
|
for serv in servers.exclude(
|
||||||
pk__in=Interface.objects.filter(service=self)
|
pk__in=Interface.objects.filter(service=self)
|
||||||
):
|
):
|
||||||
link = Service_link(service=self, server=serv)
|
link = Service_link(service=self, server=serv)
|
||||||
link.save()
|
link.save()
|
||||||
Service_link.objects.filter(service=self).exclude(server__in=servers)\
|
Service_link.objects.filter(service=self).exclude(server__in=servers)\
|
||||||
|
@ -1314,8 +1414,8 @@ class OuverturePortList(RevMixin, AclMixin, models.Model):
|
||||||
:param user_request: Utilisateur qui fait la requête
|
:param user_request: Utilisateur qui fait la requête
|
||||||
:return: soit True, soit False avec la raison de l'échec"""
|
:return: soit True, soit False avec la raison de l'échec"""
|
||||||
if not user_request.has_perm('machines.delete_ouvertureportlist'):
|
if not user_request.has_perm('machines.delete_ouvertureportlist'):
|
||||||
return False, u"Vous n'avez pas le droit de supprimer une ouverture\
|
return False, (u"Vous n'avez pas le droit de supprimer une "
|
||||||
de port"
|
"ouverture de port")
|
||||||
if self.interface_set.all():
|
if self.interface_set.all():
|
||||||
return False, u"Cette liste de ports est utilisée"
|
return False, u"Cette liste de ports est utilisée"
|
||||||
return True, None
|
return True, None
|
||||||
|
@ -1542,4 +1642,3 @@ def srv_post_save(sender, **kwargs):
|
||||||
def srv_post_delete(sender, **kwargs):
|
def srv_post_delete(sender, **kwargs):
|
||||||
"""Regeneration dns après modification d'un SRV"""
|
"""Regeneration dns après modification d'un SRV"""
|
||||||
regen('dns')
|
regen('dns')
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
#Augustin Lemesle
|
# Augustin Lemesle
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from machines.models import (
|
from machines.models import (
|
||||||
|
@ -181,7 +181,7 @@ class ExtensionSerializer(serializers.ModelSerializer):
|
||||||
return str(obj.dns_entry)
|
return str(obj.dns_entry)
|
||||||
|
|
||||||
def get_soa_data(self, obj):
|
def get_soa_data(self, obj):
|
||||||
return { 'mail': obj.soa.dns_soa_mail, 'param': obj.soa.dns_soa_param }
|
return {'mail': obj.soa.dns_soa_mail, 'param': obj.soa.dns_soa_param}
|
||||||
|
|
||||||
|
|
||||||
class MxSerializer(serializers.ModelSerializer):
|
class MxSerializer(serializers.ModelSerializer):
|
||||||
|
@ -316,23 +316,23 @@ class OuverturePortsSerializer(serializers.Serializer):
|
||||||
ipv6 = serializers.SerializerMethodField()
|
ipv6 = serializers.SerializerMethodField()
|
||||||
|
|
||||||
def get_ipv4():
|
def get_ipv4():
|
||||||
return {i.ipv4.ipv4:
|
return {
|
||||||
{
|
i.ipv4.ipv4: {
|
||||||
"tcp_in":[j.tcp_ports_in() for j in i.port_lists.all()],
|
"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_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()],
|
"udp_out": [j.udp_ports_out() for j in i.port_lists.all()],
|
||||||
}
|
}
|
||||||
for i in Interface.objects.all() if i.ipv4
|
for i in Interface.objects.all() if i.ipv4
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_ipv6():
|
def get_ipv6():
|
||||||
return {i.ipv6:
|
return {
|
||||||
{
|
i.ipv6: {
|
||||||
"tcp_in":[j.tcp_ports_in() for j in i.port_lists.all()],
|
"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_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()],
|
"udp_out": [j.udp_ports_out() for j in i.port_lists.all()],
|
||||||
}
|
}
|
||||||
for i in Interface.objects.all() if i.ipv6
|
for i in Interface.objects.all() if i.ipv6
|
||||||
}
|
}
|
||||||
|
|
105
machines/urls.py
105
machines/urls.py
|
@ -28,21 +28,39 @@ import re2o
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^new_machine/(?P<userid>[0-9]+)$', views.new_machine, name='new-machine'),
|
url(r'^new_machine/(?P<userid>[0-9]+)$',
|
||||||
url(r'^edit_interface/(?P<interfaceid>[0-9]+)$', views.edit_interface, name='edit-interface'),
|
views.new_machine,
|
||||||
url(r'^del_machine/(?P<machineid>[0-9]+)$', views.del_machine, name='del-machine'),
|
name='new-machine'),
|
||||||
url(r'^new_interface/(?P<machineid>[0-9]+)$', views.new_interface, name='new-interface'),
|
url(r'^edit_interface/(?P<interfaceid>[0-9]+)$',
|
||||||
url(r'^del_interface/(?P<interfaceid>[0-9]+)$', views.del_interface, name='del-interface'),
|
views.edit_interface,
|
||||||
|
name='edit-interface'),
|
||||||
|
url(r'^del_machine/(?P<machineid>[0-9]+)$',
|
||||||
|
views.del_machine,
|
||||||
|
name='del-machine'),
|
||||||
|
url(r'^new_interface/(?P<machineid>[0-9]+)$',
|
||||||
|
views.new_interface,
|
||||||
|
name='new-interface'),
|
||||||
|
url(r'^del_interface/(?P<interfaceid>[0-9]+)$',
|
||||||
|
views.del_interface,
|
||||||
|
name='del-interface'),
|
||||||
url(r'^add_machinetype/$', views.add_machinetype, name='add-machinetype'),
|
url(r'^add_machinetype/$', views.add_machinetype, name='add-machinetype'),
|
||||||
url(r'^edit_machinetype/(?P<machinetypeid>[0-9]+)$', views.edit_machinetype, name='edit-machinetype'),
|
url(r'^edit_machinetype/(?P<machinetypeid>[0-9]+)$',
|
||||||
|
views.edit_machinetype,
|
||||||
|
name='edit-machinetype'),
|
||||||
url(r'^del_machinetype/$', views.del_machinetype, name='del-machinetype'),
|
url(r'^del_machinetype/$', views.del_machinetype, name='del-machinetype'),
|
||||||
url(r'^index_machinetype/$', views.index_machinetype, name='index-machinetype'),
|
url(r'^index_machinetype/$',
|
||||||
|
views.index_machinetype,
|
||||||
|
name='index-machinetype'),
|
||||||
url(r'^add_iptype/$', views.add_iptype, name='add-iptype'),
|
url(r'^add_iptype/$', views.add_iptype, name='add-iptype'),
|
||||||
url(r'^edit_iptype/(?P<iptypeid>[0-9]+)$', views.edit_iptype, name='edit-iptype'),
|
url(r'^edit_iptype/(?P<iptypeid>[0-9]+)$',
|
||||||
|
views.edit_iptype,
|
||||||
|
name='edit-iptype'),
|
||||||
url(r'^del_iptype/$', views.del_iptype, name='del-iptype'),
|
url(r'^del_iptype/$', views.del_iptype, name='del-iptype'),
|
||||||
url(r'^index_iptype/$', views.index_iptype, name='index-iptype'),
|
url(r'^index_iptype/$', views.index_iptype, name='index-iptype'),
|
||||||
url(r'^add_extension/$', views.add_extension, name='add-extension'),
|
url(r'^add_extension/$', views.add_extension, name='add-extension'),
|
||||||
url(r'^edit_extension/(?P<extensionid>[0-9]+)$', views.edit_extension, name='edit-extension'),
|
url(r'^edit_extension/(?P<extensionid>[0-9]+)$',
|
||||||
|
views.edit_extension,
|
||||||
|
name='edit-extension'),
|
||||||
url(r'^del_extension/$', views.del_extension, name='del-extension'),
|
url(r'^del_extension/$', views.del_extension, name='del-extension'),
|
||||||
url(r'^add_soa/$', views.add_soa, name='add-soa'),
|
url(r'^add_soa/$', views.add_soa, name='add-soa'),
|
||||||
url(r'^edit_soa/(?P<soaid>[0-9]+)$', views.edit_soa, name='edit-soa'),
|
url(r'^edit_soa/(?P<soaid>[0-9]+)$', views.edit_soa, name='edit-soa'),
|
||||||
|
@ -60,16 +78,34 @@ urlpatterns = [
|
||||||
url(r'^edit_srv/(?P<srvid>[0-9]+)$', views.edit_srv, name='edit-srv'),
|
url(r'^edit_srv/(?P<srvid>[0-9]+)$', views.edit_srv, name='edit-srv'),
|
||||||
url(r'^del_srv/$', views.del_srv, name='del-srv'),
|
url(r'^del_srv/$', views.del_srv, name='del-srv'),
|
||||||
url(r'^index_extension/$', views.index_extension, name='index-extension'),
|
url(r'^index_extension/$', views.index_extension, name='index-extension'),
|
||||||
url(r'^add_alias/(?P<interfaceid>[0-9]+)$', views.add_alias, name='add-alias'),
|
url(r'^add_alias/(?P<interfaceid>[0-9]+)$',
|
||||||
url(r'^edit_alias/(?P<domainid>[0-9]+)$', views.edit_alias, name='edit-alias'),
|
views.add_alias,
|
||||||
url(r'^del_alias/(?P<interfaceid>[0-9]+)$', views.del_alias, name='del-alias'),
|
name='add-alias'),
|
||||||
url(r'^index_alias/(?P<interfaceid>[0-9]+)$', views.index_alias, name='index-alias'),
|
url(r'^edit_alias/(?P<domainid>[0-9]+)$',
|
||||||
url(r'^new_ipv6list/(?P<interfaceid>[0-9]+)$', views.new_ipv6list, name='new-ipv6list'),
|
views.edit_alias,
|
||||||
url(r'^edit_ipv6list/(?P<ipv6listid>[0-9]+)$', views.edit_ipv6list, name='edit-ipv6list'),
|
name='edit-alias'),
|
||||||
url(r'^del_ipv6list/(?P<ipv6listid>[0-9]+)$', views.del_ipv6list, name='del-ipv6list'),
|
url(r'^del_alias/(?P<interfaceid>[0-9]+)$',
|
||||||
url(r'^index_ipv6/(?P<interfaceid>[0-9]+)$', views.index_ipv6, name='index-ipv6'),
|
views.del_alias,
|
||||||
|
name='del-alias'),
|
||||||
|
url(r'^index_alias/(?P<interfaceid>[0-9]+)$',
|
||||||
|
views.index_alias,
|
||||||
|
name='index-alias'),
|
||||||
|
url(r'^new_ipv6list/(?P<interfaceid>[0-9]+)$',
|
||||||
|
views.new_ipv6list,
|
||||||
|
name='new-ipv6list'),
|
||||||
|
url(r'^edit_ipv6list/(?P<ipv6listid>[0-9]+)$',
|
||||||
|
views.edit_ipv6list,
|
||||||
|
name='edit-ipv6list'),
|
||||||
|
url(r'^del_ipv6list/(?P<ipv6listid>[0-9]+)$',
|
||||||
|
views.del_ipv6list,
|
||||||
|
name='del-ipv6list'),
|
||||||
|
url(r'^index_ipv6/(?P<interfaceid>[0-9]+)$',
|
||||||
|
views.index_ipv6,
|
||||||
|
name='index-ipv6'),
|
||||||
url(r'^add_service/$', views.add_service, name='add-service'),
|
url(r'^add_service/$', views.add_service, name='add-service'),
|
||||||
url(r'^edit_service/(?P<serviceid>[0-9]+)$', views.edit_service, name='edit-service'),
|
url(r'^edit_service/(?P<serviceid>[0-9]+)$',
|
||||||
|
views.edit_service,
|
||||||
|
name='edit-service'),
|
||||||
url(r'^del_service/$', views.del_service, name='del-service'),
|
url(r'^del_service/$', views.del_service, name='del-service'),
|
||||||
url(r'^index_service/$', views.index_service, name='index-service'),
|
url(r'^index_service/$', views.index_service, name='index-service'),
|
||||||
url(r'^add_vlan/$', views.add_vlan, name='add-vlan'),
|
url(r'^add_vlan/$', views.add_vlan, name='add-vlan'),
|
||||||
|
@ -80,15 +116,15 @@ urlpatterns = [
|
||||||
url(r'^edit_nas/(?P<nasid>[0-9]+)$', views.edit_nas, name='edit-nas'),
|
url(r'^edit_nas/(?P<nasid>[0-9]+)$', views.edit_nas, name='edit-nas'),
|
||||||
url(r'^del_nas/$', views.del_nas, name='del-nas'),
|
url(r'^del_nas/$', views.del_nas, name='del-nas'),
|
||||||
url(r'^index_nas/$', views.index_nas, name='index-nas'),
|
url(r'^index_nas/$', views.index_nas, name='index-nas'),
|
||||||
url(
|
url(r'history/(?P<object_name>\w+)/(?P<object_id>[0-9]+)$',
|
||||||
r'history/(?P<object_name>\w+)/(?P<object_id>[0-9]+)$',
|
|
||||||
re2o.views.history,
|
re2o.views.history,
|
||||||
name='history',
|
name='history',
|
||||||
kwargs={'application':'machines'},
|
kwargs={'application': 'machines'}),
|
||||||
),
|
|
||||||
url(r'^$', views.index, name='index'),
|
url(r'^$', views.index, name='index'),
|
||||||
url(r'^rest/mac-ip/$', views.mac_ip, name='mac-ip'),
|
url(r'^rest/mac-ip/$', views.mac_ip, name='mac-ip'),
|
||||||
url(r'^rest/regen-achieved/$', views.regen_achieved, name='regen-achieved'),
|
url(r'^rest/regen-achieved/$',
|
||||||
|
views.regen_achieved,
|
||||||
|
name='regen-achieved'),
|
||||||
url(r'^rest/mac-ip-dns/$', views.mac_ip_dns, name='mac-ip-dns'),
|
url(r'^rest/mac-ip-dns/$', views.mac_ip_dns, name='mac-ip-dns'),
|
||||||
url(r'^rest/alias/$', views.alias, name='alias'),
|
url(r'^rest/alias/$', views.alias, name='alias'),
|
||||||
url(r'^rest/corresp/$', views.corresp, name='corresp'),
|
url(r'^rest/corresp/$', views.corresp, name='corresp'),
|
||||||
|
@ -97,12 +133,21 @@ urlpatterns = [
|
||||||
url(r'^rest/txt/$', views.txt, name='txt'),
|
url(r'^rest/txt/$', views.txt, name='txt'),
|
||||||
url(r'^rest/srv/$', views.srv, name='srv'),
|
url(r'^rest/srv/$', views.srv, name='srv'),
|
||||||
url(r'^rest/zones/$', views.zones, name='zones'),
|
url(r'^rest/zones/$', views.zones, name='zones'),
|
||||||
url(r'^rest/service_servers/$', views.service_servers, name='service-servers'),
|
url(r'^rest/service_servers/$',
|
||||||
url(r'^rest/ouverture_ports/$', views.ouverture_ports, name='ouverture-ports'),
|
views.service_servers,
|
||||||
|
name='service-servers'),
|
||||||
|
url(r'^rest/ouverture_ports/$',
|
||||||
|
views.ouverture_ports,
|
||||||
|
name='ouverture-ports'),
|
||||||
url(r'index_portlist/$', views.index_portlist, name='index-portlist'),
|
url(r'index_portlist/$', views.index_portlist, name='index-portlist'),
|
||||||
url(r'^edit_portlist/(?P<ouvertureportlistid>[0-9]+)$', views.edit_portlist, name='edit-portlist'),
|
url(r'^edit_portlist/(?P<ouvertureportlistid>[0-9]+)$',
|
||||||
url(r'^del_portlist/(?P<ouvertureportlistid>[0-9]+)$', views.del_portlist, name='del-portlist'),
|
views.edit_portlist,
|
||||||
|
name='edit-portlist'),
|
||||||
|
url(r'^del_portlist/(?P<ouvertureportlistid>[0-9]+)$',
|
||||||
|
views.del_portlist,
|
||||||
|
name='del-portlist'),
|
||||||
url(r'^add_portlist/$', views.add_portlist, name='add-portlist'),
|
url(r'^add_portlist/$', views.add_portlist, name='add-portlist'),
|
||||||
url(r'^port_config/(?P<interfaceid>[0-9]+)$', views.configure_ports, name='port-config'),
|
url(r'^port_config/(?P<interfaceid>[0-9]+)$',
|
||||||
|
views.configure_ports,
|
||||||
]
|
name='port-config'),
|
||||||
|
]
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue