Source code for atmo.keys.views
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, you can obtain one at http://mozilla.org/MPL/2.0/.
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, redirect, render
from django.utils.safestring import mark_safe
from guardian.shortcuts import get_objects_for_user
from ..decorators import delete_permission_required, view_permission_required
from .forms import SSHKeyForm
from .models import SSHKey
[docs]@login_required
def list_keys(request):
"""View to list all SSH keys for the logged-in user."""
ssh_keys = get_objects_for_user(
request.user,
'keys.view_sshkey',
SSHKey.objects.all().order_by('-created_at'),
use_groups=False,
with_superuser=False,
)
context = {
'ssh_keys': ssh_keys
}
return render(request, 'atmo/keys/list.html', context)
[docs]@login_required
def new_key(request):
"""View to upload a new SSH key for the logged-in user."""
form = SSHKeyForm(request.user)
if request.method == 'POST':
form = SSHKeyForm(
request.user,
data=request.POST
)
if form.is_valid():
key = form.save()
messages.success(
request,
mark_safe('Key <strong>%s</strong> successfully added.' % key)
)
return redirect('keys-list')
context = {
'form': form,
}
return render(request, 'atmo/keys/new.html', context)
[docs]@login_required
@view_permission_required(SSHKey, ignore=['raw'])
def detail_key(request, id, raw=False):
"""
View to show the details for the SSH key with the given ID.
If the optional ``raw`` parameter is set it'll return the raw
key data.
"""
ssh_key = SSHKey.objects.get(pk=id)
if raw:
return HttpResponse(ssh_key.key, content_type='text/plain; charset=utf8')
context = {
'ssh_key': ssh_key,
}
return render(request, 'atmo/keys/detail.html', context=context)
[docs]@login_required
@delete_permission_required(SSHKey)
def delete_key(request, id):
"""View to delete an SSH key with the given ID."""
ssh_key = get_object_or_404(SSHKey, pk=id)
if request.method == 'POST':
message = mark_safe(
'SSH key <strong>%s</strong> successfully deleted.' % ssh_key
)
ssh_key.delete()
messages.success(request, message)
return redirect('keys-list')
context = {
'ssh_key': ssh_key,
}
return render(request, 'atmo/keys/delete.html', context=context)