aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rpkid/rpki/gui/app/forms.py6
-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.py1
-rw-r--r--rpkid/rpki/gui/app/views.py76
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})