diff --git a/master/buildbot/test/unit/test_www_rest.py b/master/buildbot/test/unit/test_www_rest.py index d253357b257..819e0f65278 100644 --- a/master/buildbot/test/unit/test_www_rest.py +++ b/master/buildbot/test/unit/test_www_rest.py @@ -169,6 +169,12 @@ def test_cors_origin_mismatch(self): yield self.render_resource(self.rsrc, '/', origin='h://bad') self.assertNotOk('invalid origin') + @defer.inlineCallbacks + def test_cors_origin_mismatch_post(self): + yield self.render_resource(self.rsrc, '/', method='POST', origin='h://bad') + self.assertRequest(content=json.dumps({'error': {'message': 'invalid origin'}}), + responseCode=400) + @defer.inlineCallbacks def test_cors_origin_preflight_match_GET(self): yield self.render_resource(self.rsrc, '/', diff --git a/master/buildbot/www/rest.py b/master/buildbot/www/rest.py index a432a88d31d..504a133aa89 100644 --- a/master/buildbot/www/rest.py +++ b/master/buildbot/www/rest.py @@ -426,7 +426,11 @@ def writeError(msg, errcode=400): log.msg("HTTP error: %s" % (msg,)) request.setResponseCode(errcode) request.setHeader('content-type', 'text/plain; charset=utf-8') - request.write(json.dumps(dict(error=msg))) + if request.method == 'POST': + # jsonRPC callers want the error message in error.message + request.write(json.dumps(dict(error=dict(message=msg)))) + else: + request.write(json.dumps(dict(error=msg))) request.finish() return self.asyncRenderHelper(request, self.asyncRender, writeError)