diff options
author | Rob Austein <sra@hactrn.net> | 2012-11-15 21:58:10 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2012-11-15 21:58:10 +0000 |
commit | 11f3b8df179a16ebe1446dab620522ac97e3c327 (patch) | |
tree | c0af81a5987e9859d12a0323d0d240f58d8b2f36 /rpkid | |
parent | c43c7100b22a6a203094c7143683e69b60eb425c (diff) |
Pull from /trunk.
svn path=/branches/tk274/; revision=4877
Diffstat (limited to 'rpkid')
-rw-r--r-- | rpkid/rpki/gui/app/forms.py | 21 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/views.py | 25 |
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(): |