aboutsummaryrefslogtreecommitdiff
path: root/rpkid
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2012-11-15 21:58:10 +0000
committerRob Austein <sra@hactrn.net>2012-11-15 21:58:10 +0000
commit11f3b8df179a16ebe1446dab620522ac97e3c327 (patch)
treec0af81a5987e9859d12a0323d0d240f58d8b2f36 /rpkid
parentc43c7100b22a6a203094c7143683e69b60eb425c (diff)
Pull from /trunk.
svn path=/branches/tk274/; revision=4877
Diffstat (limited to 'rpkid')
-rw-r--r--rpkid/rpki/gui/app/forms.py21
-rw-r--r--rpkid/rpki/gui/app/views.py25
2 files changed, 15 insertions, 31 deletions
diff --git a/rpkid/rpki/gui/app/forms.py b/rpkid/rpki/gui/app/forms.py
index de7a8baf..2dfbb6a5 100644
--- a/rpkid/rpki/gui/app/forms.py
+++ b/rpkid/rpki/gui/app/forms.py
@@ -241,27 +241,12 @@ class ROARequest(forms.Form):
max_prefixlen = self.cleaned_data.get('max_prefixlen')
max_prefixlen = int(max_prefixlen) if max_prefixlen else r.prefixlen()
if max_prefixlen < r.prefixlen():
- raise forms.ValidationError('max prefix length must be greater than or equal to the prefix length')
+ raise forms.ValidationError(
+ 'max prefix length must be greater than or equal to the prefix length')
if max_prefixlen > r.datum_type.bits:
raise forms.ValidationError, \
'max prefix length (%d) is out of range for IP version (%d)' % (max_prefixlen, r.datum_type.bits)
-
- # verify that the request prefix is not already part of a
- # roarequest
- if models.ROARequestPrefix.objects.filter(
- roa_request__issuer=self.conf,
- roa_request__asn=self.cleaned_data.get('asn'),
- version='IPv%d' % (4 if isinstance(r, resource_range_ipv4) else 6,),
- prefix=str(r.min),
- prefixlen=r.prefixlen(),
- max_prefixlen=max_prefixlen
- ).exists():
- raise forms.ValidationError(
- 'this ROA request prefix already exists'
- )
-
self.cleaned_data['max_prefixlen'] = str(max_prefixlen)
-
return self.cleaned_data
@@ -325,6 +310,7 @@ def AddASNForm(child):
return _wrapped
+
def AddNetForm(child):
"""
Returns a forms.Form subclass which validates that the entered address
@@ -366,6 +352,7 @@ def AddNetForm(child):
return _wrapped
+
def ChildForm(instance):
"""
Form for editing a Child model.
diff --git a/rpkid/rpki/gui/app/views.py b/rpkid/rpki/gui/app/views.py
index 02830dd0..7969159c 100644
--- a/rpkid/rpki/gui/app/views.py
+++ b/rpkid/rpki/gui/app/views.py
@@ -512,9 +512,12 @@ def roa_create(request):
@handle_required
def roa_create_confirm(request):
+ """This function is called when the user confirms the creation of a ROA
+ request. It is responsible for updating the IRDB.
+
+ """
conf = request.session['handle']
log = request.META['wsgi.errors']
-
if request.method == 'POST':
form = forms.ROARequestConfirm(request.POST, request.FILES)
if form.is_valid():
@@ -522,25 +525,18 @@ def roa_create_confirm(request):
prefix = form.cleaned_data.get('prefix')
rng = glue.str_to_resource_range(prefix)
max_prefixlen = form.cleaned_data.get('max_prefixlen')
-
- roarequests = models.ROARequest.objects.filter(issuer=conf,
- asn=asn)
- if roarequests:
- # FIXME need to handle the case where there are
- # multiple ROAs for the same AS due to prefixes
- # delegated from different resource certs.
- roa = roarequests[0]
- else:
- roa = models.ROARequest.objects.create(issuer=conf,
- asn=asn)
+ # Always create ROA requests with a single prefix.
+ # https://trac.rpki.net/ticket/32
+ roa = models.ROARequest.objects.create(issuer=conf, asn=asn)
v = 'IPv4' if isinstance(rng, resource_range_ipv4) else 'IPv6'
roa.prefixes.create(version=v, prefix=str(rng.min),
prefixlen=rng.prefixlen(),
max_prefixlen=max_prefixlen)
Zookeeper(handle=conf.handle, logstream=log).run_rpkid_now()
return http.HttpResponseRedirect(reverse(roa_list))
- else:
- return http.HttpResponseRedirect(reverse(roa_create))
+ # What should happen when the submission form isn't valid? For now
+ # just fall through and redirect back to the ROA creation form
+ return http.HttpResponseRedirect(reverse(roa_create))
@handle_required
@@ -860,6 +856,7 @@ def repository_delete(request, pk):
conf = request.session['handle']
# Ensure the repository being deleted belongs to the current user.
obj = get_object_or_404(models.Repository, issuer=conf, pk=pk)
+ form_class = forms.UserDeleteForm # FIXME
if request.method == 'POST':
form = form_class(request.POST, request.FILES)
if form.is_valid():