diff options
-rw-r--r-- | rpkid/rpki/gui/app/forms.py | 6 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/user_create_form.html (renamed from rpkid/rpki/gui/app/templates/app/child_wizard_form.html) | 0 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/urls.py | 1 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/views.py | 76 |
4 files changed, 30 insertions, 53 deletions
diff --git a/rpkid/rpki/gui/app/forms.py b/rpkid/rpki/gui/app/forms.py index 2c20ee0f..a2940989 100644 --- a/rpkid/rpki/gui/app/forms.py +++ b/rpkid/rpki/gui/app/forms.py @@ -113,14 +113,16 @@ class ImportClientForm(forms.Form): widget=forms.FileInput(attrs={'class': 'input-file'})) -class ChildWizardForm(forms.Form): +class UserCreateForm(forms.Form): handle = forms.CharField(max_length=30, help_text='handle for new child') email = forms.CharField(max_length=30, help_text='email address for new user') password = forms.CharField(widget=forms.PasswordInput) password2 = forms.CharField(widget=forms.PasswordInput, label='Confirm Password') - parent = forms.ModelChoiceField(queryset=models.Conf.objects.all()) + parent = forms.ModelChoiceField(required=False, + queryset=models.Conf.objects.all(), + help_text='optionally make a child of') def clean_handle(self): handle = self.cleaned_data.get('handle') diff --git a/rpkid/rpki/gui/app/templates/app/child_wizard_form.html b/rpkid/rpki/gui/app/templates/app/user_create_form.html index 1a07402f..1a07402f 100644 --- a/rpkid/rpki/gui/app/templates/app/child_wizard_form.html +++ b/rpkid/rpki/gui/app/templates/app/user_create_form.html diff --git a/rpkid/rpki/gui/app/urls.py b/rpkid/rpki/gui/app/urls.py index 59f1ab2c..b9cdbaa0 100644 --- a/rpkid/rpki/gui/app/urls.py +++ b/rpkid/rpki/gui/app/urls.py @@ -36,7 +36,6 @@ urlpatterns = patterns('', (r'^child/(?P<pk>\d+)/delete$', views.child_delete), (r'^child/(?P<pk>\d+)/edit$', views.child_edit), (r'^child/(?P<pk>\d+)/export$', views.child_response), - (r'^child/(?P<pk>\d+)/destroy$', views.destroy_handle), (r'^gbr/$', views.ghostbuster_list), (r'^gbr/create$', views.ghostbuster_create), (r'^gbr/(?P<pk>\d+)$', views.ghostbuster_view), diff --git a/rpkid/rpki/gui/app/views.py b/rpkid/rpki/gui/app/views.py index b6f02a4b..9813d8cc 100644 --- a/rpkid/rpki/gui/app/views.py +++ b/rpkid/rpki/gui/app/views.py @@ -434,7 +434,6 @@ def roa_create(request): form = forms.ROARequest(request.POST, request.FILES) if form.is_valid(): asn = form.cleaned_data.get('asn') - conf = request.session['handle'] rng = form._as_resource_range() # FIXME calling "private" method max_prefixlen = int(form.cleaned_data.get('max_prefixlen')) @@ -582,7 +581,7 @@ def roa_delete(request, pk): return render(request, 'app/roa_request_confirm_delete.html', {'object': obj, 'routes': routes}) - + @handle_required def ghostbuster_list(request): """ @@ -662,7 +661,7 @@ def ghostbuster_edit(request, pk): def ghostbuster_create(request): return _ghostbuster_edit(request) - + @handle_required def refresh(request): """ @@ -714,34 +713,7 @@ def child_delete(request, pk): template_name='app/child_detail.html', extra_context={'confirm_delete': True}) - -@login_required -def destroy_handle(request, handle): - """ - Completely remove a hosted resource handle. - - """ - log = request.META['wsgi.errors'] - - if not request.user.is_superuser: - return http.HttpResponseForbidden() - - get_object_or_404(models.Conf, handle=handle) - - if request.method == 'POST': - form = forms.GenericConfirmationForm(request.POST, request.FILES) - if form.is_valid(): - glue.destroy_handle(log, handle) - return render(request, 'app/generic_result.html', - {'operation': 'Destroy ' + handle, - 'result': 'Succeeded'}) - else: - form = forms.GenericConfirmationForm() - - return render(request, 'app/destroy_handle_form.html', - {'form': form, 'handle': handle}) - - + def roa_match(rng): """ Return a list of tuples of matching routes and roas. @@ -959,36 +931,40 @@ def user_create(request): return http.HttpResponseForbidden() if request.method == 'POST': - form = forms.ChildWizardForm(request.POST, request.FILES) + form = forms.UserCreateForm(request.POST, request.FILES) if form.is_valid(): handle = form.cleaned_data.get('handle') pw = form.cleaned_data.get('password') email = form.cleaned_data.get('email') + parent = form.cleaned_data.get('parent') User.objects.create_user(handle, email, pw) - # FIXME etree_wrapper should allow us to deal with file objects - t = NamedTemporaryFile(delete=False) - t.close() - zk_child = Zookeeper(handle=handle) identity_xml = zk_child.initialize() - identity_xml.save(t.name) - parent = form.cleaned_data.get('parent') - zk_parent = Zookeeper(handle=parent.handle) - parent_response, _ = zk_parent.configure_child(t.name) - parent_response.save(t.name) - repo_req, _ = zk_child.configure_parent(t.name) - repo_req.save(t.name) - repo_resp, _ = zk_parent.configure_publication_client(t.name) - repo_resp.save(t.name) - zk_child.configure_repository(t.name) - os.remove(t.name) + handles = [handle] + if parent: + # FIXME etree_wrapper should allow us to deal with file objects + t = NamedTemporaryFile(delete=False) + t.close() + + identity_xml.save(t.name) + zk_parent = Zookeeper(handle=parent.handle) + parent_response, _ = zk_parent.configure_child(t.name) + parent_response.save(t.name) + repo_req, _ = zk_child.configure_parent(t.name) + repo_req.save(t.name) + repo_resp, _ = zk_parent.configure_publication_client(t.name) + repo_resp.save(t.name) + zk_child.configure_repository(t.name) + os.remove(t.name) + handles.append(parent.handle) # force rpkid run for both parent and child - zk_child.synchronize(parent.handle, handle) + zk_child.synchronize(*handles) return http.HttpResponseRedirect(reverse(dashboard)) else: - form = forms.ChildWizardForm() + conf = request.session['handle'] + form = forms.UserCreateForm(initial={'parent': conf}) - return render(request, 'app/child_wizard_form.html', {'form': form}) + return render(request, 'app/user_create_form.html', {'form': form}) |