diff --git a/machines/forms.py b/machines/forms.py index ffdf4239..d9e656be 100644 --- a/machines/forms.py +++ b/machines/forms.py @@ -2,6 +2,7 @@ from django.forms import ModelForm, Form, ValidationError from django import forms from .models import Domain, Machine, Interface, IpList, MachineType, Extension, Mx, Ns, IpType from django.db.models import Q +from django.core.validators import validate_email class EditMachineForm(ModelForm): class Meta: diff --git a/machines/views.py b/machines/views.py index ab5bf567..9212499c 100644 --- a/machines/views.py +++ b/machines/views.py @@ -106,7 +106,7 @@ def new_machine(request, userid): new_machine = machine.save(commit=False) new_machine.user = user if len(interface.cleaned_data['mac_address']) != 12: - messages.error(request, u"Adresse mac trop courte") + messages.error(request, u"Adresse mac de taille incorrecte") return form({'machineform': machine, 'interfaceform': interface, 'domainform': domain}, 'machines/machine.html', request) new_interface = interface.save(commit=False) new_domain = domain.save(commit=False) @@ -152,27 +152,33 @@ def edit_interface(request, interfaceid): machine_form = EditMachineForm(request.POST or None, instance=interface.machine) interface_form = EditInterfaceForm(request.POST or None, instance=interface) 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_machine = machine_form.save(commit=False) - new_domain = domain_form.save(commit=False) - if full_domain_validator(request, new_domain): - with transaction.atomic(), reversion.create_revision(): - new_machine.save() - reversion.set_user(request.user) - reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in machine_form.changed_data)) - if free_ip(new_interface.type.ip_type) and not new_interface.ipv4: - new_interface = assign_ipv4(new_interface) - with transaction.atomic(), reversion.create_revision(): - new_interface.save() - reversion.set_user(request.user) - 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") - return redirect("/users/profil/" + str(interface.machine.user.id)) + try: + if machine_form.is_valid() and interface_form.is_valid() and domain_form.is_valid(): + new_interface = interface_form.save(commit=False) + new_machine = machine_form.save(commit=False) + if len(interface_form.cleaned_data['mac_address']) != 12: + messages.error(request, u"Adresse mac de taille incorrecte") + return form({'machineform': machine_form, 'interfaceform': interface_form, 'domainform': domain_form}, 'machines/machine.html', request) + new_domain = domain_form.save(commit=False) + if full_domain_validator(request, new_domain): + with transaction.atomic(), reversion.create_revision(): + new_machine.save() + reversion.set_user(request.user) + reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in machine_form.changed_data)) + if free_ip(new_interface.type.ip_type) and not new_interface.ipv4: + new_interface = assign_ipv4(new_interface) + with transaction.atomic(), reversion.create_revision(): + new_interface.save() + reversion.set_user(request.user) + 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") + return redirect("/users/profil/" + str(interface.machine.user.id)) + except TypeError: + messages.error(request, u"Adresse mac invalide") return form({'machineform': machine_form, 'interfaceform': interface_form, 'domainform': domain_form}, 'machines/machine.html', request) @login_required @@ -210,26 +216,32 @@ def new_interface(request, machineid): return redirect("/users/profil/" + str(request.user.id)) 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(): - new_interface = interface_form.save(commit=False) - new_interface.machine = machine - 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: - new_interface = assign_ipv4(new_interface) - elif not new_interface.ipv4: - messages.error(request, u"Il n'y a plus d'ip disponibles") - with transaction.atomic(), reversion.create_revision(): - new_interface.save() - reversion.set_user(request.user) - 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") - return redirect("/users/profil/" + str(machine.user.id)) + try: + if interface_form.is_valid() and domain_form.is_valid(): + new_interface = interface_form.save(commit=False) + if len(interface_form.cleaned_data['mac_address']) != 12: + messages.error(request, u"Adresse mac de taille incorrecte") + return form({'machineform': machine_form, 'interfaceform': interface_form, 'domainform': domain_form}, 'machines/machine.html', request) + new_interface.machine = machine + 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: + new_interface = assign_ipv4(new_interface) + elif not new_interface.ipv4: + messages.error(request, u"Il n'y a plus d'ip disponibles") + with transaction.atomic(), reversion.create_revision(): + new_interface.save() + reversion.set_user(request.user) + 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") + return redirect("/users/profil/" + str(machine.user.id)) + except TypeError: + messages.error(request, u"Adresse mac invalide") return form({'interfaceform': interface_form, 'domainform': domain_form}, 'machines/machine.html', request) @login_required