From ccc7053eb433b9367071446967f142aff69cb701 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Sat, 5 Dec 2020 00:21:43 +0100 Subject: [PATCH] validate prefix --- ipv6ula/forms.py | 2 ++ ipv6ula/models.py | 20 +++++++++++++++----- ipv6ula/views.py | 3 ++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/ipv6ula/forms.py b/ipv6ula/forms.py index ebd3c1e..5be0447 100644 --- a/ipv6ula/forms.py +++ b/ipv6ula/forms.py @@ -10,3 +10,5 @@ class ULAForm(forms.ModelForm): def clean_prefix(self): prefix = self.cleaned_data['prefix'] validate_ula_prefix(prefix) + + return prefix diff --git a/ipv6ula/models.py b/ipv6ula/models.py index fb1f529..772985f 100644 --- a/ipv6ula/models.py +++ b/ipv6ula/models.py @@ -13,14 +13,24 @@ def validate_ula_prefix(prefix): net = ipaddress.IPv6Network(net_str, strict=False) if not net.subnet_of(ula_net): - print("raising error here") - v = ValidationError( + raise ValidationError( _(f"Prefix {prefix} is not within ULA range ({ula_net})"), code='invalid', - params = {'prefix': prefix } + params = {'prefix': net } ) - print(v) - raise v + + + try: + ULA.objects.get(prefix=str(net[0])) + except ULA.DoesNotExist: + pass + else: + raise ValidationError( + _(f"Prefix {net} is already registered"), + code='invalid', + params = {'prefix': net } + ) + class User(AbstractUser): diff --git a/ipv6ula/views.py b/ipv6ula/views.py index 859e4e8..d4e874f 100644 --- a/ipv6ula/views.py +++ b/ipv6ula/views.py @@ -21,9 +21,10 @@ class IndexView(ListView): class SubmitView(LoginRequiredMixin, CreateView): model = ULA + form_class = ULAForm login_url = '/login/' success_url = '/' - form_class = ULAForm + def form_valid(self, form): form.instance.owner = self.request.user