zuul-web: key endpoint: return 404 when tenant or project not found

Fix the endpoint to remove 500 error when tenant or project is
not found.

Change-Id: I5fec37635cca8a697dba1c749d75c78bae24411c
This commit is contained in:
Fabien Boucher 2018-07-11 18:27:26 +02:00
parent 2125035a21
commit 30ecd5cc46
3 changed files with 15 additions and 1 deletions

View File

@ -267,6 +267,12 @@ class TestWeb(BaseTestWeb):
self.assertEqual(resp.content, public_pem)
self.assertIn('text/plain', resp.headers.get('Content-Type'))
resp = self.get_url("api/tenant/non-tenant/key/org/project.pub")
self.assertEqual(404, resp.status_code)
resp = self.get_url("api/tenant/tenant-one/key/org/no-project.pub")
self.assertEqual(404, resp.status_code)
def test_web_404_on_unknown_tenant(self):
resp = self.get_url("api/tenant/non-tenant/status")
self.assertEqual(404, resp.status_code)

View File

@ -354,7 +354,12 @@ class RPCListener(object):
def handle_key_get(self, job):
args = json.loads(job.arguments)
tenant = self.sched.abide.tenants.get(args.get("tenant"))
(trusted, project) = tenant.getProject(args.get("project"))
project = None
if tenant:
(trusted, project) = tenant.getProject(args.get("project"))
if not project:
job.sendWorkComplete("")
return
job.sendWorkComplete(
encryption.serialize_rsa_public_key(project.public_key))

View File

@ -289,6 +289,9 @@ class ZuulWebAPI(object):
def key(self, tenant, project):
job = self.rpc.submitJob('zuul:key_get', {'tenant': tenant,
'project': project})
if not job.data:
raise cherrypy.HTTPError(
404, 'Project %s does not exist.' % project)
resp = cherrypy.response
resp.headers['Access-Control-Allow-Origin'] = '*'
resp.headers['Content-Type'] = 'text/plain'