Allow users to delete ssh keys

This commit is contained in:
Modulos 2017-06-03 15:03:55 +02:00
commit 346733fbcd
6 changed files with 250 additions and 202 deletions

View file

@ -188,7 +188,7 @@ class SignupView(CreateView):
template_name = 'hosting/signup.html'
form_class = HostingUserSignupForm
model = CustomUser
success_url = reverse_lazy('hosting:key_pair')
success_url = reverse_lazy('hosting:ssh_keys')
def get_success_url(self):
next_url = self.request.session.get(
@ -290,34 +290,56 @@ class MarkAsReadNotificationView(LoginRequiredMixin, UpdateView):
class SSHKeyDeleteView(LoginRequiredMixin, DeleteView):
login_url = reverse_lazy('hosting:login')
success_url = reverse_lazy('hosting:key-pair')
success_url = reverse_lazy('hosting:ssh_keys')
model = UserHostingKey
class GenerateVMSSHKeysView(LoginRequiredMixin, FormView):
def delete(self, request, *args, **kwargs):
owner = self.request.user
manager = OpenNebulaManager()
pk = self.kwargs.get('pk')
# Get user ssh key
public_key = UserHostingKey.objects.get(pk=pk)
# Add ssh key to user
try:
manager.remove_public_key(user=owner, public_key=public_key)
except ConnectionError:
pass
except WrongNameError:
pass
return super(SSHKeyDeleteView, self).delete(request, *args, **kwargs)
class SSHKeyListView(LoginRequiredMixin, ListView):
template_name = "hosting/user_keys.html"
login_url = reverse_lazy('hosting:login')
context_object_name = "keys"
model = UserHostingKey
paginate_by = 10
ordering = '-id'
def get_queryset(self):
user = self.request.user
self.queryset = UserHostingKey.objects.filter(user=user)
return super(SSHKeyListView, self).get_queryset()
def render_to_response(self, context, **response_kwargs):
if not self.queryset:
return HttpResponseRedirect(reverse('hosting:create_ssh_key'))
return super(SSHKeyListView, self).render_to_response(context, **response_kwargs)
class SSHKeyCreateView(LoginRequiredMixin, FormView):
form_class = UserHostingKeyForm
model = UserHostingKey
template_name = 'hosting/virtual_machine_key.html'
template_name = 'hosting/user_key.html'
login_url = reverse_lazy('hosting:login')
context_object_name = "virtual_machine"
success_url = reverse_lazy('hosting:ssh_keys')
def get_context_data(self, **kwargs):
context = super(
GenerateVMSSHKeysView,
self
).get_context_data(**kwargs)
user_keys = UserHostingKey.objects.filter(
user=self.request.user
)
context.update({
'keys': user_keys
})
return context
def get_form_kwargs(self):
kwargs = super(GenerateVMSSHKeysView, self).get_form_kwargs()
kwargs = super(SSHKeyCreateView, self).get_form_kwargs()
kwargs.update({'request': self.request})
return kwargs
@ -344,22 +366,22 @@ class GenerateVMSSHKeysView(LoginRequiredMixin, FormView):
})
owner = self.request.user
# Create OpenNebulaManager
manager = OpenNebulaManager(email=owner.email,
password=owner.password)
# Get OpenNebula user id
user_pool = manager._get_user_pool()
opennebula_user = user_pool.get_by_name(owner.email)
manager = OpenNebulaManager()
# Get user ssh key
public_key = form.cleaned_data.get('public_key')
# Add ssh key to user
manager.oneadmin_client.call('user.update', opennebula_user.id,
'<CONTEXT><SSH_PUBLIC_KEY>{key}</SSH_PUBLIC_KEY></CONTEXT>'.format(key=public_key))
try:
manager.add_public_key(user=owner, public_key=public_key, merge=True)
except ConnectionError:
pass
except WrongNameError:
pass
return render(self.request, self.template_name, context)
return HttpResponseRedirect(self.success_url)
def post(self, request, *args, **kwargs):
print(self.request.POST.dict())
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
@ -417,7 +439,7 @@ class PaymentVMView(LoginRequiredMixin, FormView):
request,
'In order to create a VM, you create/upload your SSH KEY first.'
)
return HttpResponseRedirect(reverse('hosting:key_pair'))
return HttpResponseRedirect(reverse('hosting:ssh_keys'))
if 'next' in request.session:
del request.session['next']
@ -633,7 +655,7 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
request,
'In order to create a VM, you need to create/upload your SSH KEY first.'
)
return HttpResponseRedirect(reverse('hosting:key_pair'))
return HttpResponseRedirect(reverse('hosting:ssh_keys'))
try:
manager = OpenNebulaManager()