1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
3
# Copyright 2010 United States Government as represented by the
4
# Administrator of the National Aeronautics and Space Administration.
7
# Licensed under the Apache License, Version 2.0 (the "License"); you may
8
# not use this file except in compliance with the License. You may obtain
9
# a copy of the License at
11
# http://www.apache.org/licenses/LICENSE-2.0
13
# Unless required by applicable law or agreed to in writing, software
14
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16
# License for the specific language governing permissions and limitations
20
Views for managing Nova keypairs.
23
from django import http
24
from django import template
25
from django.contrib import messages
26
from django.contrib.auth.decorators import login_required
27
from django.shortcuts import redirect, render_to_response
28
from django.utils.translation import ugettext as _
29
from django_openstack import log as logging
30
from django_openstack.nova import exceptions
31
from django_openstack.nova import forms
32
from django_openstack.nova import shortcuts
33
from django_openstack.nova.exceptions import handle_nova_error
36
LOG = logging.getLogger('django_openstack.nova')
41
def index(request, project_id, download_key=None):
42
project = shortcuts.get_project_or_404(request, project_id)
43
keypairs = project.get_key_pairs()
45
return render_to_response('django_openstack/nova/keypairs/index.html', {
46
'create_form': forms.CreateKeyPairForm(project),
47
'region': project.region,
50
'download_key': download_key
51
}, context_instance=template.RequestContext(request))
56
def add(request, project_id):
57
project = shortcuts.get_project_or_404(request, project_id)
59
if request.method == 'POST':
60
form = forms.CreateKeyPairForm(project, request.POST)
64
keypair = project.create_key_pair(form.cleaned_data['name'])
65
except exceptions.NovaApiError, e:
66
messages.error(request,
67
_('Unable to create key: %s') % e.message)
68
LOG.error('Unable to create key for user "%s" on project "%s".'
70
(str(request.user), project_id, e.message))
72
LOG.info('Keypair "%s" for project "%s" created successfully' %
73
(keypair.name, project_id))
74
if request.POST['js'] == '1':
75
request.session['key.%s' % keypair.name] = keypair.material
78
download_key=keypair.name)
80
response = http.HttpResponse(mimetype='application/binary')
81
response['Content-Disposition'] = \
82
'attachment; filename=%s.pem' % \
83
form.cleaned_data['name']
84
response.write(keypair.material)
87
keypairs = project.get_key_pairs()
89
return render_to_response(
90
'django_openstack/nova/keypairs/index.html',
92
'region': project.region,
94
'keypairs': keypairs},
95
context_instance=template.RequestContext(request))
97
return redirect('nova_keypairs', project_id)
102
def delete(request, project_id):
103
project = shortcuts.get_project_or_404(request, project_id)
105
if request.method == 'POST':
106
key_name = request.POST['key_name']
109
project.delete_key_pair(key_name)
110
except exceptions.NovaApiError, e:
111
messages.error(request,
112
_('Unable to delete key: %s') % e.message)
113
LOG.error('Unable to delete key "%s". Exception: "%s"' %
114
(key_name, e.message_))
116
messages.success(request,
117
_('Key %s has been successfully deleted.') % \
119
LOG.info('Key "%s" successfully deleted' % key_name)
121
return redirect('nova_keypairs', project_id)
126
def download(request, project_id, key_name):
127
# Ensure the project exists.
128
shortcuts.get_project_or_404(request, project_id)
131
material = request.session.pop('key.%s' % key_name)
133
return redirect('nova_keypairs', project_id)
135
response = http.HttpResponse(mimetype='application/binary')
136
response['Content-Disposition'] = 'attachment; filename=%s.pem' % key_name
137
response.write(material)