Fixes downloading a keypair

This patch fixes the invalid error which user gets when downloading
a keypair that wasn't saved from the keypair download link from the
keypair download page.

When user clicks the download link, i just sending that to a different
url and then deleting the keypair and then again creating it with
same name.

Change-Id: I4f9166f112487a500d23f9cc98b98660be2ebe55
Closes-bug: #1182797
This commit is contained in:
nikunj2512
2014-08-07 13:02:38 +05:30
parent fdac6d74a6
commit 5b9ea17e51
4 changed files with 23 additions and 2 deletions

View File

@@ -100,6 +100,22 @@ class KeyPairViewTests(test.TestCase):
self.assertTrue(res.has_header('content-disposition'))
@test.create_stubs({api.nova: ("keypair_create", "keypair_delete")})
def test_regenerate_keypair_get(self):
keypair = self.keypairs.first()
keypair.private_key = "secret"
optional_param = "regenerate"
api.nova.keypair_delete(IsA(http.HttpRequest), keypair.name)
api.nova.keypair_create(IsA(http.HttpRequest),
keypair.name).AndReturn(keypair)
self.mox.ReplayAll()
url = reverse('horizon:project:access_and_security:keypairs:generate',
kwargs={'keypair_name': keypair.name,
'optional': optional_param})
res = self.client.get(url)
self.assertTrue(res.has_header('content-disposition'))
@test.create_stubs({api.nova: ("keypair_import",)})
def test_import_keypair(self):
key1_name = "new_key_pair"

View File

@@ -30,4 +30,6 @@ urlpatterns = patterns('',
name='download'),
url(r'^(?P<keypair_name>[^/]+)/generate/$', views.GenerateView.as_view(),
name='generate'),
url(r'^(?P<keypair_name>[^/]+)/(?P<optional>[^/]+)/generate/$',
views.GenerateView.as_view(), name='generate'),
)

View File

@@ -62,8 +62,11 @@ class DownloadView(TemplateView):
class GenerateView(View):
def get(self, request, keypair_name=None):
def get(self, request, keypair_name=None, optional=None):
try:
if optional == "regenerate":
api.nova.keypair_delete(request, keypair_name)
keypair = api.nova.keypair_create(request, keypair_name)
except Exception:
redirect = reverse('horizon:project:access_and_security:index')