Allow users to delete ssh keys
This commit is contained in:
parent
ab29b138c3
commit
346733fbcd
6 changed files with 250 additions and 202 deletions
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue