mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-22 11:23:10 +00:00
Phase 2 modification domain
This commit is contained in:
parent
adf88afa2b
commit
b56cbe6a17
10 changed files with 102 additions and 51 deletions
|
@ -19,7 +19,7 @@ from reversion.models import Version
|
||||||
|
|
||||||
from users.models import User, ServiceUser, Right, School, ListRight, ListShell, Ban, Whitelist
|
from users.models import User, ServiceUser, Right, School, ListRight, ListShell, Ban, Whitelist
|
||||||
from cotisations.models import Facture, Vente, Article, Banque, Paiement, Cotisation
|
from cotisations.models import Facture, Vente, Article, Banque, Paiement, Cotisation
|
||||||
from machines.models import Machine, MachineType, IpType, Extension, Interface, Alias, IpList
|
from machines.models import Machine, MachineType, IpType, Extension, Interface, Domain, IpList
|
||||||
from topologie.models import Switch, Port, Room
|
from topologie.models import Switch, Port, Room
|
||||||
|
|
||||||
from re2o.settings import PAGINATION_NUMBER, PAGINATION_LARGE_NUMBER
|
from re2o.settings import PAGINATION_NUMBER, PAGINATION_LARGE_NUMBER
|
||||||
|
@ -99,7 +99,7 @@ def stats_models(request):
|
||||||
'typeip' : [IpType.PRETTY_NAME, IpType.objects.count()],
|
'typeip' : [IpType.PRETTY_NAME, IpType.objects.count()],
|
||||||
'extension' : [Extension.PRETTY_NAME, Extension.objects.count()],
|
'extension' : [Extension.PRETTY_NAME, Extension.objects.count()],
|
||||||
'interface' : [Interface.PRETTY_NAME, Interface.objects.count()],
|
'interface' : [Interface.PRETTY_NAME, Interface.objects.count()],
|
||||||
'alias' : [Alias.PRETTY_NAME, Alias.objects.count()],
|
'alias' : [Domain.PRETTY_NAME, Domain.objects.exclude(cname=None).count()],
|
||||||
'iplist' : [IpList.PRETTY_NAME, IpList.objects.count()],
|
'iplist' : [IpList.PRETTY_NAME, IpList.objects.count()],
|
||||||
},
|
},
|
||||||
'Topologie' : {
|
'Topologie' : {
|
||||||
|
|
|
@ -26,7 +26,7 @@ class IpListAdmin(VersionAdmin):
|
||||||
list_display = ('ipv4','ip_type')
|
list_display = ('ipv4','ip_type')
|
||||||
|
|
||||||
class InterfaceAdmin(VersionAdmin):
|
class InterfaceAdmin(VersionAdmin):
|
||||||
list_display = ('machine','type','dns','mac_address','ipv4','details')
|
list_display = ('machine','type','mac_address','ipv4','details')
|
||||||
|
|
||||||
class DomainAdmin(VersionAdmin):
|
class DomainAdmin(VersionAdmin):
|
||||||
list_display = ('interface_parent', 'name', 'extension', 'cname')
|
list_display = ('interface_parent', 'name', 'extension', 'cname')
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from django.forms import ModelForm, Form, ValidationError
|
from django.forms import ModelForm, Form, ValidationError
|
||||||
from django import forms
|
from django import forms
|
||||||
from .models import Alias, Machine, Interface, IpList, MachineType, Extension, Mx, Ns, IpType
|
from .models import Domain, Machine, Interface, IpList, MachineType, Extension, Mx, Ns, IpType
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
|
||||||
class EditMachineForm(ModelForm):
|
class EditMachineForm(ModelForm):
|
||||||
|
@ -27,14 +27,13 @@ class EditInterfaceForm(ModelForm):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(EditInterfaceForm, self).__init__(*args, **kwargs)
|
super(EditInterfaceForm, self).__init__(*args, **kwargs)
|
||||||
self.fields['dns'].label = 'Nom dns de la machine'
|
|
||||||
self.fields['mac_address'].label = 'Adresse mac'
|
self.fields['mac_address'].label = 'Adresse mac'
|
||||||
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"
|
||||||
|
|
||||||
class AddInterfaceForm(EditInterfaceForm):
|
class AddInterfaceForm(EditInterfaceForm):
|
||||||
class Meta(EditInterfaceForm.Meta):
|
class Meta(EditInterfaceForm.Meta):
|
||||||
fields = ['ipv4','mac_address','dns','type','details']
|
fields = ['ipv4','mac_address','type','details']
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
infra = kwargs.pop('infra')
|
infra = kwargs.pop('infra')
|
||||||
|
@ -48,11 +47,11 @@ class AddInterfaceForm(EditInterfaceForm):
|
||||||
|
|
||||||
class NewInterfaceForm(EditInterfaceForm):
|
class NewInterfaceForm(EditInterfaceForm):
|
||||||
class Meta(EditInterfaceForm.Meta):
|
class Meta(EditInterfaceForm.Meta):
|
||||||
fields = ['mac_address','dns','type','details']
|
fields = ['mac_address','type','details']
|
||||||
|
|
||||||
class BaseEditInterfaceForm(EditInterfaceForm):
|
class BaseEditInterfaceForm(EditInterfaceForm):
|
||||||
class Meta(EditInterfaceForm.Meta):
|
class Meta(EditInterfaceForm.Meta):
|
||||||
fields = ['ipv4','mac_address','dns','type','details']
|
fields = ['ipv4','mac_address','type','details']
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
infra = kwargs.pop('infra')
|
infra = kwargs.pop('infra')
|
||||||
|
@ -66,8 +65,8 @@ class BaseEditInterfaceForm(EditInterfaceForm):
|
||||||
|
|
||||||
class AliasForm(ModelForm):
|
class AliasForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Alias
|
model = Domain
|
||||||
fields = ['alias','extension']
|
fields = ['name','extension']
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
infra = kwargs.pop('infra')
|
infra = kwargs.pop('infra')
|
||||||
|
@ -76,16 +75,16 @@ class AliasForm(ModelForm):
|
||||||
self.fields['extension'].queryset = Extension.objects.filter(need_infra=False)
|
self.fields['extension'].queryset = Extension.objects.filter(need_infra=False)
|
||||||
|
|
||||||
class DelAliasForm(ModelForm):
|
class DelAliasForm(ModelForm):
|
||||||
alias = forms.ModelMultipleChoiceField(queryset=Alias.objects.all(), label="Alias actuels", widget=forms.CheckboxSelectMultiple)
|
alias = forms.ModelMultipleChoiceField(queryset=Domain.objects.all(), label="Alias actuels", widget=forms.CheckboxSelectMultiple)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
interface = kwargs.pop('interface')
|
interface = kwargs.pop('interface')
|
||||||
super(DelAliasForm, self).__init__(*args, **kwargs)
|
super(DelAliasForm, self).__init__(*args, **kwargs)
|
||||||
self.fields['alias'].queryset = Alias.objects.filter(interface_parent=interface)
|
self.fields['alias'].queryset = Domain.objects.filter(cname__in=Domain.objects.filter(interface_parent=interface))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
exclude = ['interface_parent', 'alias', 'extension']
|
exclude = ['interface_parent', 'name', 'extension', 'cname']
|
||||||
model = Alias
|
model = Domain
|
||||||
|
|
||||||
class MachineTypeForm(ModelForm):
|
class MachineTypeForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
18
machines/migrations/0040_remove_interface_dns.py
Normal file
18
machines/migrations/0040_remove_interface_dns.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('machines', '0039_auto_20161224_1732'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='interface',
|
||||||
|
name='dns',
|
||||||
|
),
|
||||||
|
]
|
|
@ -78,7 +78,6 @@ class Interface(models.Model):
|
||||||
machine = models.ForeignKey('Machine', on_delete=models.CASCADE)
|
machine = models.ForeignKey('Machine', on_delete=models.CASCADE)
|
||||||
type = models.ForeignKey('MachineType', on_delete=models.PROTECT)
|
type = models.ForeignKey('MachineType', on_delete=models.PROTECT)
|
||||||
details = models.CharField(max_length=255, blank=True)
|
details = models.CharField(max_length=255, blank=True)
|
||||||
dns = models.CharField(help_text="Obligatoire et unique, ne doit pas comporter de points", max_length=255, unique=True)
|
|
||||||
|
|
||||||
def is_active(self):
|
def is_active(self):
|
||||||
""" Renvoie si une interface doit avoir accès ou non """
|
""" Renvoie si une interface doit avoir accès ou non """
|
||||||
|
@ -93,7 +92,11 @@ class Interface(models.Model):
|
||||||
self.mac_address = str(EUI(self.mac_address)) or None
|
self.mac_address = str(EUI(self.mac_address)) or None
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.domain_set.all().first()
|
try:
|
||||||
|
domain = self.domain
|
||||||
|
except:
|
||||||
|
domain = None
|
||||||
|
return str(domain)
|
||||||
|
|
||||||
class Domain(models.Model):
|
class Domain(models.Model):
|
||||||
PRETTY_NAME = "Domaine dns"
|
PRETTY_NAME = "Domaine dns"
|
||||||
|
@ -109,7 +112,7 @@ class Domain(models.Model):
|
||||||
def clean(self):
|
def clean(self):
|
||||||
if self.interface_parent and self.cname:
|
if self.interface_parent and self.cname:
|
||||||
raise ValidationError("On ne peut créer à la fois A et CNAME")
|
raise ValidationError("On ne peut créer à la fois A et CNAME")
|
||||||
if self.related==self:
|
if self.cname==self:
|
||||||
raise ValidationError("On ne peut créer un cname sur lui même")
|
raise ValidationError("On ne peut créer un cname sur lui même")
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#Augustin Lemesle
|
#Augustin Lemesle
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from machines.models import Interface, IpType, Extension, IpList, MachineType, Alias, Mx, Ns
|
from machines.models import Interface, IpType, Extension, IpList, MachineType, Domain, Mx, Ns
|
||||||
|
|
||||||
class IpTypeField(serializers.RelatedField):
|
class IpTypeField(serializers.RelatedField):
|
||||||
def to_representation(self, value):
|
def to_representation(self, value):
|
||||||
|
@ -17,10 +17,14 @@ class IpListSerializer(serializers.ModelSerializer):
|
||||||
class InterfaceSerializer(serializers.ModelSerializer):
|
class InterfaceSerializer(serializers.ModelSerializer):
|
||||||
ipv4 = IpListSerializer(read_only=True)
|
ipv4 = IpListSerializer(read_only=True)
|
||||||
mac_address = serializers.SerializerMethodField('get_macaddress')
|
mac_address = serializers.SerializerMethodField('get_macaddress')
|
||||||
|
dns = serializers.SerializerMethodField('get_dns')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Interface
|
model = Interface
|
||||||
fields = ('ipv4', 'mac_address', 'dns')
|
fields = ('ipv4', 'mac_address')
|
||||||
|
|
||||||
|
def get_dns(self, obj):
|
||||||
|
return obj.domain_set.all().first()
|
||||||
|
|
||||||
def get_macaddress(self, obj):
|
def get_macaddress(self, obj):
|
||||||
return str(obj.mac_address)
|
return str(obj.mac_address)
|
||||||
|
@ -74,16 +78,20 @@ class NsSerializer(serializers.ModelSerializer):
|
||||||
def get_interface_name(self, obj):
|
def get_interface_name(self, obj):
|
||||||
return obj.interface.dns + obj.interface.ipv4.ip_type.extension.name
|
return obj.interface.dns + obj.interface.ipv4.ip_type.extension.name
|
||||||
|
|
||||||
class AliasSerializer(serializers.ModelSerializer):
|
class DomainSerializer(serializers.ModelSerializer):
|
||||||
interface_parent = serializers.SerializerMethodField('get_interface_name')
|
interface_parent = serializers.SerializerMethodField('get_interface_name')
|
||||||
extension = serializers.SerializerMethodField('get_zone_name')
|
extension = serializers.SerializerMethodField('get_zone_name')
|
||||||
|
cname = serializers.SerializerMethodField('get_cname')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Alias
|
model = Domain
|
||||||
fields = ('interface_parent', 'alias', 'extension')
|
fields = ('interface_parent', 'name', 'extension', 'cname')
|
||||||
|
|
||||||
def get_zone_name(self, obj):
|
def get_zone_name(self, obj):
|
||||||
return obj.extension.name
|
return obj.extension.name
|
||||||
|
|
||||||
|
def get_cname(self, obj):
|
||||||
|
return obj.cname.name + obj.cname.extension.name
|
||||||
|
|
||||||
def get_interface_name(self, obj):
|
def get_interface_name(self, obj):
|
||||||
return obj.interface_parent.dns + obj.interface_parent.ipv4.ip_type.extension.name
|
return obj.name + obj.extension.name
|
||||||
|
|
|
@ -28,13 +28,13 @@
|
||||||
</td>
|
</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<td>
|
<td>
|
||||||
{% if interface.alias_set.all %}
|
{% if interface.domain.related_domain.all %}
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button class="btn btn-default dropdown-toggle" type="button" id="editioninterface" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
<button class="btn btn-default dropdown-toggle" type="button" id="editioninterface" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||||
{{ interface.dns }} <span class="caret"></span>
|
{{ interface.domain }} <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu" aria-labelledby="editioninterface">
|
<ul class="dropdown-menu" aria-labelledby="editioninterface">
|
||||||
{% for al in interface.alias_set.all %}
|
{% for al in interface.domain.related_domain.all %}
|
||||||
<li>
|
<li>
|
||||||
<a href="http://{{ al }}">
|
<a href="http://{{ al }}">
|
||||||
{{ al }}
|
{{ al }}
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ interface.dns }}
|
{{ interface.domain }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>{{ interface.type }}</td>
|
<td>{{ interface.type }}</td>
|
||||||
|
|
|
@ -19,6 +19,9 @@
|
||||||
{% if interfaceform %}
|
{% if interfaceform %}
|
||||||
{% bootstrap_form interfaceform %}
|
{% bootstrap_form interfaceform %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if domainform %}
|
||||||
|
{% bootstrap_form domainform %}
|
||||||
|
{% endif %}
|
||||||
{% bootstrap_button "Créer ou modifier" button_type="submit" icon="star" %}
|
{% bootstrap_button "Créer ou modifier" button_type="submit" icon="star" %}
|
||||||
</form>
|
</form>
|
||||||
<br />
|
<br />
|
||||||
|
|
|
@ -16,21 +16,21 @@ from django.contrib.auth import authenticate, login
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
|
|
||||||
from rest_framework.renderers import JSONRenderer
|
from rest_framework.renderers import JSONRenderer
|
||||||
from machines.serializers import InterfaceSerializer, TypeSerializer, AliasSerializer, MxSerializer, ExtensionSerializer, NsSerializer
|
from machines.serializers import InterfaceSerializer, TypeSerializer, DomainSerializer, MxSerializer, ExtensionSerializer, NsSerializer
|
||||||
from reversion import revisions as reversion
|
from reversion import revisions as reversion
|
||||||
from reversion.models import Version
|
from reversion.models import Version
|
||||||
|
|
||||||
import re
|
import re
|
||||||
from .forms import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, MachineTypeForm, DelMachineTypeForm, ExtensionForm, DelExtensionForm, BaseEditInterfaceForm, BaseEditMachineForm
|
from .forms import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, MachineTypeForm, DelMachineTypeForm, ExtensionForm, DelExtensionForm, BaseEditInterfaceForm, BaseEditMachineForm
|
||||||
from .forms import IpTypeForm, DelIpTypeForm, AliasForm, DelAliasForm, NsForm, DelNsForm, MxForm, DelMxForm
|
from .forms import IpTypeForm, DelIpTypeForm, AliasForm, DelAliasForm, NsForm, DelNsForm, MxForm, DelMxForm
|
||||||
from .models import IpType, Machine, Interface, IpList, MachineType, Extension, Mx, Ns, Alias
|
from .models import IpType, Machine, Interface, IpList, MachineType, Extension, Mx, Ns, Domain
|
||||||
from users.models import User
|
from users.models import User
|
||||||
from re2o.settings import PAGINATION_NUMBER, PAGINATION_LARGE_NUMBER, MAX_INTERFACES, MAX_ALIAS
|
from re2o.settings import PAGINATION_NUMBER, PAGINATION_LARGE_NUMBER, MAX_INTERFACES, MAX_ALIAS
|
||||||
|
|
||||||
def full_domain_validator(request, interface):
|
def full_domain_validator(request, domain):
|
||||||
""" Validation du nom de domaine, extensions dans type de machine, prefixe pas plus long que 63 caractères """
|
""" Validation du nom de domaine, extensions dans type de machine, prefixe pas plus long que 63 caractères """
|
||||||
HOSTNAME_LABEL_PATTERN = re.compile("(?!-)[A-Z\d-]+(?<!-)$", re.IGNORECASE)
|
HOSTNAME_LABEL_PATTERN = re.compile("(?!-)[A-Z\d-]+(?<!-)$", re.IGNORECASE)
|
||||||
dns = interface.dns.lower()
|
dns = domain.name.lower()
|
||||||
if len(dns) > 63:
|
if len(dns) > 63:
|
||||||
messages.error(request,
|
messages.error(request,
|
||||||
"Le nom de domaine %s est trop long (maximum de 63 caractères)." % dns)
|
"Le nom de domaine %s est trop long (maximum de 63 caractères)." % dns)
|
||||||
|
@ -99,11 +99,13 @@ def new_machine(request, userid):
|
||||||
return redirect("/users/profil/" + str(request.user.id))
|
return redirect("/users/profil/" + str(request.user.id))
|
||||||
machine = NewMachineForm(request.POST or None)
|
machine = NewMachineForm(request.POST or None)
|
||||||
interface = AddInterfaceForm(request.POST or None, infra=request.user.has_perms(('infra',)))
|
interface = AddInterfaceForm(request.POST or None, infra=request.user.has_perms(('infra',)))
|
||||||
|
domain = AliasForm(request.POST or None, infra=request.user.has_perms(('infra',)))
|
||||||
if machine.is_valid() and interface.is_valid():
|
if machine.is_valid() and interface.is_valid():
|
||||||
new_machine = machine.save(commit=False)
|
new_machine = machine.save(commit=False)
|
||||||
new_machine.user = user
|
new_machine.user = user
|
||||||
new_interface = interface.save(commit=False)
|
new_interface = interface.save(commit=False)
|
||||||
if full_domain_validator(request, new_interface):
|
new_domain = domain.save(commit=False)
|
||||||
|
if full_domain_validator(request, new_domain):
|
||||||
with transaction.atomic(), reversion.create_revision():
|
with transaction.atomic(), reversion.create_revision():
|
||||||
new_machine.save()
|
new_machine.save()
|
||||||
reversion.set_user(request.user)
|
reversion.set_user(request.user)
|
||||||
|
@ -117,9 +119,14 @@ def new_machine(request, userid):
|
||||||
new_interface.save()
|
new_interface.save()
|
||||||
reversion.set_user(request.user)
|
reversion.set_user(request.user)
|
||||||
reversion.set_comment("Création")
|
reversion.set_comment("Création")
|
||||||
|
new_domain.interface_parent = new_interface
|
||||||
|
with transaction.atomic(), reversion.create_revision():
|
||||||
|
new_domain.save()
|
||||||
|
reversion.set_user(request.user)
|
||||||
|
reversion.set_comment("Création")
|
||||||
messages.success(request, "La machine a été crée")
|
messages.success(request, "La machine a été crée")
|
||||||
return redirect("/users/profil/" + userid)
|
return redirect("/users/profil/" + userid)
|
||||||
return form({'machineform': machine, 'interfaceform': interface}, 'machines/machine.html', request)
|
return form({'machineform': machine, 'interfaceform': interface, 'domainform': domain}, 'machines/machine.html', request)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def edit_interface(request, interfaceid):
|
def edit_interface(request, interfaceid):
|
||||||
|
@ -137,10 +144,12 @@ def edit_interface(request, interfaceid):
|
||||||
else:
|
else:
|
||||||
machine_form = EditMachineForm(request.POST or None, instance=interface.machine)
|
machine_form = EditMachineForm(request.POST or None, instance=interface.machine)
|
||||||
interface_form = EditInterfaceForm(request.POST or None, instance=interface)
|
interface_form = EditInterfaceForm(request.POST or None, instance=interface)
|
||||||
if machine_form.is_valid() and interface_form.is_valid():
|
domain_form = AliasForm(request.POST or None, infra=request.user.has_perms(('infra',)), instance=interface.domain)
|
||||||
|
if machine_form.is_valid() and interface_form.is_valid() and domain_form.is_valid():
|
||||||
new_interface = interface_form.save(commit=False)
|
new_interface = interface_form.save(commit=False)
|
||||||
new_machine = machine_form.save(commit=False)
|
new_machine = machine_form.save(commit=False)
|
||||||
if full_domain_validator(request, new_interface):
|
new_domain = domain_form.save(commit=False)
|
||||||
|
if full_domain_validator(request, new_domain):
|
||||||
with transaction.atomic(), reversion.create_revision():
|
with transaction.atomic(), reversion.create_revision():
|
||||||
new_machine.save()
|
new_machine.save()
|
||||||
reversion.set_user(request.user)
|
reversion.set_user(request.user)
|
||||||
|
@ -151,9 +160,13 @@ def edit_interface(request, interfaceid):
|
||||||
new_interface.save()
|
new_interface.save()
|
||||||
reversion.set_user(request.user)
|
reversion.set_user(request.user)
|
||||||
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in interface_form.changed_data))
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in interface_form.changed_data))
|
||||||
|
with transaction.atomic(), reversion.create_revision():
|
||||||
|
new_domain.save()
|
||||||
|
reversion.set_user(request.user)
|
||||||
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in domain_form.changed_data))
|
||||||
messages.success(request, "La machine a été modifiée")
|
messages.success(request, "La machine a été modifiée")
|
||||||
return redirect("/users/profil/" + str(interface.machine.user.id))
|
return redirect("/users/profil/" + str(interface.machine.user.id))
|
||||||
return form({'machineform': machine_form, 'interfaceform': interface_form}, 'machines/machine.html', request)
|
return form({'machineform': machine_form, 'interfaceform': interface_form, 'domainform': domain_form}, 'machines/machine.html', request)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def del_machine(request, machineid):
|
def del_machine(request, machineid):
|
||||||
|
@ -189,10 +202,12 @@ def new_interface(request, machineid):
|
||||||
messages.error(request, "Vous avez atteint le maximum d'interfaces autorisées que vous pouvez créer vous même (%s) " % MAX_INTERFACES)
|
messages.error(request, "Vous avez atteint le maximum d'interfaces autorisées que vous pouvez créer vous même (%s) " % MAX_INTERFACES)
|
||||||
return redirect("/users/profil/" + str(request.user.id))
|
return redirect("/users/profil/" + str(request.user.id))
|
||||||
interface_form = AddInterfaceForm(request.POST or None, infra=request.user.has_perms(('infra',)))
|
interface_form = AddInterfaceForm(request.POST or None, infra=request.user.has_perms(('infra',)))
|
||||||
|
domain_form = AliasForm(request.POST or None, infra=request.user.has_perms(('infra',)))
|
||||||
if interface_form.is_valid():
|
if interface_form.is_valid():
|
||||||
new_interface = interface_form.save(commit=False)
|
new_interface = interface_form.save(commit=False)
|
||||||
new_interface.machine = machine
|
new_interface.machine = machine
|
||||||
if full_domain_validator(request, new_interface):
|
new_domain = domain_form.save(commit=False)
|
||||||
|
if full_domain_validator(request, new_domain):
|
||||||
if free_ip(new_interface.type.ip_type) and not new_interface.ipv4:
|
if free_ip(new_interface.type.ip_type) and not new_interface.ipv4:
|
||||||
new_interface = assign_ipv4(new_interface)
|
new_interface = assign_ipv4(new_interface)
|
||||||
elif not new_interface.ipv4:
|
elif not new_interface.ipv4:
|
||||||
|
@ -201,9 +216,14 @@ def new_interface(request, machineid):
|
||||||
new_interface.save()
|
new_interface.save()
|
||||||
reversion.set_user(request.user)
|
reversion.set_user(request.user)
|
||||||
reversion.set_comment("Création")
|
reversion.set_comment("Création")
|
||||||
|
new_domain.interface_parent = new_interface
|
||||||
|
with transaction.atomic(), reversion.create_revision():
|
||||||
|
new_domain.save()
|
||||||
|
reversion.set_user(request.user)
|
||||||
|
reversion.set_comment("Création")
|
||||||
messages.success(request, "L'interface a été ajoutée")
|
messages.success(request, "L'interface a été ajoutée")
|
||||||
return redirect("/users/profil/" + str(machine.user.id))
|
return redirect("/users/profil/" + str(machine.user.id))
|
||||||
return form({'interfaceform': interface_form}, 'machines/machine.html', request)
|
return form({'interfaceform': interface_form, 'domainform': domain_form}, 'machines/machine.html', request)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def del_interface(request, interfaceid):
|
def del_interface(request, interfaceid):
|
||||||
|
@ -478,13 +498,13 @@ def add_alias(request, interfaceid):
|
||||||
if interface.machine.user != request.user:
|
if interface.machine.user != request.user:
|
||||||
messages.error(request, "Vous ne pouvez pas ajouter un alias à une machine d'un autre user que vous sans droit")
|
messages.error(request, "Vous ne pouvez pas ajouter un alias à une machine d'un autre user que vous sans droit")
|
||||||
return redirect("/users/profil/" + str(request.user.id))
|
return redirect("/users/profil/" + str(request.user.id))
|
||||||
if Alias.objects.filter(interface_parent__in=interface.machine.user.user_interfaces()).count() >= MAX_ALIAS:
|
if Domain.objects.filter(cname__in=Domain.objects.filter(interface_parent__in=interface.machine.user.user_interfaces())).count() >= MAX_ALIAS:
|
||||||
messages.error(request, "Vous avez atteint le maximum d'alias autorisées que vous pouvez créer vous même (%s) " % MAX_ALIAS)
|
messages.error(request, "Vous avez atteint le maximum d'alias autorisées que vous pouvez créer vous même (%s) " % MAX_ALIAS)
|
||||||
return redirect("/users/profil/" + str(request.user.id))
|
return redirect("/users/profil/" + str(request.user.id))
|
||||||
alias = AliasForm(request.POST or None, infra=request.user.has_perms(('infra',)))
|
alias = AliasForm(request.POST or None, infra=request.user.has_perms(('infra',)))
|
||||||
if alias.is_valid():
|
if alias.is_valid():
|
||||||
alias = alias.save(commit=False)
|
alias = alias.save(commit=False)
|
||||||
alias.interface_parent = interface
|
alias.cname = interface.domain
|
||||||
with transaction.atomic(), reversion.create_revision():
|
with transaction.atomic(), reversion.create_revision():
|
||||||
alias.save()
|
alias.save()
|
||||||
reversion.set_user(request.user)
|
reversion.set_user(request.user)
|
||||||
|
@ -496,11 +516,11 @@ def add_alias(request, interfaceid):
|
||||||
@login_required
|
@login_required
|
||||||
def edit_alias(request, aliasid):
|
def edit_alias(request, aliasid):
|
||||||
try:
|
try:
|
||||||
alias_instance = Alias.objects.get(pk=aliasid)
|
alias_instance = Domain.objects.get(pk=aliasid)
|
||||||
except Alias.DoesNotExist:
|
except Domain.DoesNotExist:
|
||||||
messages.error(request, u"Entrée inexistante" )
|
messages.error(request, u"Entrée inexistante" )
|
||||||
return redirect("/machines/index_extension/")
|
return redirect("/machines/index_extension/")
|
||||||
if not request.user.has_perms(('cableur',)) and alias_instance.interface_parent.machine.user != request.user:
|
if not request.user.has_perms(('cableur',)) and alias_instance.cname.interface_parent.machine.user != request.user:
|
||||||
messages.error(request, "Vous ne pouvez pas ajouter un alias à une machine d'un autre user que vous sans droit")
|
messages.error(request, "Vous ne pouvez pas ajouter un alias à une machine d'un autre user que vous sans droit")
|
||||||
return redirect("/users/profil/" + str(request.user.id))
|
return redirect("/users/profil/" + str(request.user.id))
|
||||||
alias = AliasForm(request.POST or None, instance=alias_instance, infra=request.user.has_perms(('infra',)))
|
alias = AliasForm(request.POST or None, instance=alias_instance, infra=request.user.has_perms(('infra',)))
|
||||||
|
@ -510,7 +530,7 @@ def edit_alias(request, aliasid):
|
||||||
reversion.set_user(request.user)
|
reversion.set_user(request.user)
|
||||||
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in alias.changed_data))
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in alias.changed_data))
|
||||||
messages.success(request, "Alias modifié")
|
messages.success(request, "Alias modifié")
|
||||||
return redirect("/machines/index_alias/" + str(alias_instance.interface_parent.id))
|
return redirect("/machines/index_alias/" + str(alias_instance.cname.interface_parent.id))
|
||||||
return form({'machineform': alias}, 'machines/machine.html', request)
|
return form({'machineform': alias}, 'machines/machine.html', request)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -583,7 +603,7 @@ def index_alias(request, interfaceid):
|
||||||
if not request.user.has_perms(('cableur',)) and interface.machine.user != request.user:
|
if not request.user.has_perms(('cableur',)) and interface.machine.user != request.user:
|
||||||
messages.error(request, "Vous ne pouvez pas éditer une machine d'un autre user que vous sans droit")
|
messages.error(request, "Vous ne pouvez pas éditer une machine d'un autre user que vous sans droit")
|
||||||
return redirect("/users/profil/" + str(request.user.id))
|
return redirect("/users/profil/" + str(request.user.id))
|
||||||
alias_list = Alias.objects.filter(interface_parent=interface).order_by('alias')
|
alias_list = Domain.objects.filter(cname=Domain.objects.filter(interface_parent=interface)).order_by('name')
|
||||||
return render(request, 'machines/index_alias.html', {'alias_list':alias_list, 'interface_id': interfaceid})
|
return render(request, 'machines/index_alias.html', {'alias_list':alias_list, 'interface_id': interfaceid})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -608,11 +628,11 @@ def history(request, object, id):
|
||||||
return redirect("/users/profil/" + str(request.user.id))
|
return redirect("/users/profil/" + str(request.user.id))
|
||||||
elif object == 'alias':
|
elif object == 'alias':
|
||||||
try:
|
try:
|
||||||
object_instance = Alias.objects.get(pk=id)
|
object_instance = Domain.objects.get(pk=id)
|
||||||
except Alias.DoesNotExist:
|
except Domain.DoesNotExist:
|
||||||
messages.error(request, "Alias inexistant")
|
messages.error(request, "Alias inexistant")
|
||||||
return redirect("/machines/")
|
return redirect("/machines/")
|
||||||
if not request.user.has_perms(('cableur',)) and object_instance.interface_parent.machine.user != request.user:
|
if not request.user.has_perms(('cableur',)) and object_instance.cname.interface_parent.machine.user != request.user:
|
||||||
messages.error(request, "Vous ne pouvez pas afficher l'historique d'un alias d'un autre user que vous sans droit cableur")
|
messages.error(request, "Vous ne pouvez pas afficher l'historique d'un alias d'un autre user que vous sans droit cableur")
|
||||||
return redirect("/users/profil/" + str(request.user.id))
|
return redirect("/users/profil/" + str(request.user.id))
|
||||||
elif object == 'machinetype' and request.user.has_perms(('cableur',)):
|
elif object == 'machinetype' and request.user.has_perms(('cableur',)):
|
||||||
|
@ -686,8 +706,8 @@ def interface_list(request):
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('serveur')
|
@permission_required('serveur')
|
||||||
def alias(request):
|
def alias(request):
|
||||||
alias = Alias.objects.filter(interface_parent__in=Interface.objects.exclude(ipv4=None))
|
alias = Domain.objects.filter(interface_parent=None).filter(cname=Domain.objects.filter(interface_parent__in=Interface.objects.exclude(ipv4=None)))
|
||||||
seria = AliasSerializer(alias, many=True)
|
seria = DomainSerializer(alias, many=True)
|
||||||
return JSONResponse(seria.data)
|
return JSONResponse(seria.data)
|
||||||
|
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
|
|
|
@ -55,7 +55,7 @@ def search_result(search, type, request):
|
||||||
if i == '0':
|
if i == '0':
|
||||||
recherche['users_list'] = User.objects.filter((Q(room__name__icontains = search) | Q(pseudo__icontains = search) | Q(name__icontains = search) | Q(surname__icontains = search)) & query1).order_by('state', 'surname')
|
recherche['users_list'] = User.objects.filter((Q(room__name__icontains = search) | Q(pseudo__icontains = search) | Q(name__icontains = search) | Q(surname__icontains = search)) & query1).order_by('state', 'surname')
|
||||||
if i == '1':
|
if i == '1':
|
||||||
data = Interface.objects.filter(Q(machine__user__pseudo__icontains = search) | Q(machine__user__name__icontains = search) | Q(machine__user__surname__icontains = search) | Q(dns__icontains = search) | Q(mac_address__icontains = search) | Q(ipv4__ipv4__icontains = search))
|
data = Interface.objects.filter(Q(machine__user__pseudo__icontains = search) | Q(machine__user__name__icontains = search) | Q(machine__user__surname__icontains = search) | Q(mac_address__icontains = search) | Q(ipv4__ipv4__icontains = search))
|
||||||
for d in data:
|
for d in data:
|
||||||
recherche['machines_list'].append(d.machine)
|
recherche['machines_list'].append(d.machine)
|
||||||
if i == '2':
|
if i == '2':
|
||||||
|
|
Loading…
Reference in a new issue