From d6a02cf945d57d8464567b0a9807cd26800943f1 Mon Sep 17 00:00:00 2001 From: kjg Date: Sun, 1 Jun 2025 13:11:14 +0000 Subject: [PATCH] [IPv6ULA] add a delete functon --- ipv6ula/forms.py | 26 +++++++++++++++++++++++--- ipv6ula/views.py | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/ipv6ula/forms.py b/ipv6ula/forms.py index 2569abc..4756908 100644 --- a/ipv6ula/forms.py +++ b/ipv6ula/forms.py @@ -2,6 +2,7 @@ from django import forms import ipaddress from .models import validate_ula_prefix, ULA, validate_owner_ula_prefix from django.core.exceptions import ValidationError +import logging class ULAForm(forms.ModelForm): class Meta: @@ -52,14 +53,33 @@ class ULAUpdateForm(forms.ModelForm): class ULADeleteForm(forms.ModelForm): + def __init__(self, *args, **kwargs): + self.owner = kwargs.pop('owner', None) + super().__init__(*args, **kwargs) + class Meta: model = ULA fields = [ 'prefix' ] def clean_prefix(self): prefix = self.cleaned_data['prefix'] - validate_ula_prefix(prefix) - validate_owner_ula_prefix(prefix) - return prefix + if not prefix or not self.owner: + return prefix + net_str = f"{prefix}/48" + net = ipaddress.IPv6Network(net_str, strict=False) + normalized_prefix = str(net[0]) + self.cleaned_data['prefix'] = normalized_prefix + + try: + self.instance = ULA.objects.get(prefix=normalized_prefix, owner=self.owner) + except ULA.DoesNotExist: + raise ValidationError("No ULA with this prefix was found for the current user.") + + return normalized_prefix + + def delete(self): + if self.instance: + print(f"Deleting: {self.instance}") + self.instance.delete() diff --git a/ipv6ula/views.py b/ipv6ula/views.py index 0a7cbe5..e284013 100644 --- a/ipv6ula/views.py +++ b/ipv6ula/views.py @@ -10,6 +10,9 @@ from django.contrib.auth import logout from django.shortcuts import redirect import ipaddress +from django.http import HttpResponseRedirect +from django.urls import reverse_lazy +from django.contrib.messages import success from django.conf import settings @@ -76,6 +79,12 @@ class LoginView(auth_views.LoginView): class UpdateView(GenerateSubmitView): form_class = ULAUpdateForm gen_method = "update" + success_message = "%(the_prefix)s/48 was updated successfully" + + def get_success_message(self, cleaned_data): + return self.success_message % { + "the_prefix": cleaned_data.get("prefix", "(unknown)") + } def get_form_kwargs(self): kwargs = super().get_form_kwargs() @@ -83,16 +92,35 @@ class UpdateView(GenerateSubmitView): return kwargs def form_valid(self, form): + prefix = form.cleaned_data["prefix"] form.instance.owner = self.request.user + if not ULA.objects.filter(prefix=prefix, owner=self.request.user).exists(): + form.add_error('prefix', 'This prefix is not yours') + return self.form_invalid(form) return super().form_valid(form) class DeleteView(GenerateSubmitView): form_class = ULADeleteForm gen_method = "delete" + success_message = "%(the_prefix)s/48 was deleted successfully" + success_url = reverse_lazy("index") + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['owner'] = self.request.user + return kwargs def form_valid(self, form): - form.instance.owner = self.request.user - return super().form_valid(form) + prefix = form.cleaned_data["prefix"] + try: + instance = ULA.objects.get(prefix=prefix, owner=self.request.user) + instance.delete() + self.object = instance + except ULA.DoesNotExist: + form.add_error("prefix", "The prefix does not exist or does not belong to you.") + return self.form_invalid(form) + success(self.request, self.get_success_message(form.cleaned_data)) + return HttpResponseRedirect(self.get_success_url()) def logout_view(request): logout(request)