[IPv6ULA] add a delete functon

This commit is contained in:
kjg 2025-06-01 13:11:14 +00:00
commit d6a02cf945
2 changed files with 53 additions and 5 deletions

View file

@ -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()

View file

@ -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)