mirror of https://github.com/Icinga/icinga2.git
Respect Accept:application/json where possible
This commit is contained in:
parent
24c9542b5b
commit
3a6caa2800
|
@ -102,6 +102,8 @@ bool EnsureValidHeaders(
|
||||||
{
|
{
|
||||||
namespace http = boost::beast::http;
|
namespace http = boost::beast::http;
|
||||||
|
|
||||||
|
bool httpError = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
http::async_read_header(stream, buf, parser, yc);
|
http::async_read_header(stream, buf, parser, yc);
|
||||||
|
@ -115,6 +117,8 @@ bool EnsureValidHeaders(
|
||||||
throw std::invalid_argument(ex.what());
|
throw std::invalid_argument(ex.what());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
httpError = false;
|
||||||
|
|
||||||
switch (parser.get().version()) {
|
switch (parser.get().version()) {
|
||||||
case 10:
|
case 10:
|
||||||
case 11:
|
case 11:
|
||||||
|
@ -124,9 +128,18 @@ bool EnsureValidHeaders(
|
||||||
}
|
}
|
||||||
} catch (const std::invalid_argument& ex) {
|
} catch (const std::invalid_argument& ex) {
|
||||||
response.result(http::status::bad_request);
|
response.result(http::status::bad_request);
|
||||||
response.set(http::field::content_type, "text/html");
|
|
||||||
response.body() = String("<h1>Bad Request</h1><p><pre>") + ex.what() + "</pre></p>";
|
if (!httpError && parser.get()[http::field::accept] == "application/json") {
|
||||||
response.set(http::field::content_length, response.body().size());
|
HttpUtility::SendJsonBody(response, nullptr, new Dictionary({
|
||||||
|
{ "error", 400 },
|
||||||
|
{ "status", String("Bad Request: ") + ex.what() }
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
response.set(http::field::content_type, "text/html");
|
||||||
|
response.body() = String("<h1>Bad Request</h1><p><pre>") + ex.what() + "</pre></p>";
|
||||||
|
response.set(http::field::content_length, response.body().size());
|
||||||
|
}
|
||||||
|
|
||||||
response.set(http::field::connection, "close");
|
response.set(http::field::connection, "close");
|
||||||
|
|
||||||
http::async_write(stream, response, yc);
|
http::async_write(stream, response, yc);
|
||||||
|
@ -333,9 +346,18 @@ bool EnsureValidBody(
|
||||||
*/
|
*/
|
||||||
|
|
||||||
response.result(http::status::bad_request);
|
response.result(http::status::bad_request);
|
||||||
response.set(http::field::content_type, "text/html");
|
|
||||||
response.body() = String("<h1>Bad Request</h1><p><pre>") + ex.what() + "</pre></p>";
|
if (parser.get()[http::field::accept] == "application/json") {
|
||||||
response.set(http::field::content_length, response.body().size());
|
HttpUtility::SendJsonBody(response, nullptr, new Dictionary({
|
||||||
|
{ "error", 400 },
|
||||||
|
{ "status", String("Bad Request: ") + ex.what() }
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
response.set(http::field::content_type, "text/html");
|
||||||
|
response.body() = String("<h1>Bad Request</h1><p><pre>") + ex.what() + "</pre></p>";
|
||||||
|
response.set(http::field::content_length, response.body().size());
|
||||||
|
}
|
||||||
|
|
||||||
response.set(http::field::connection, "close");
|
response.set(http::field::connection, "close");
|
||||||
|
|
||||||
http::async_write(stream, response, yc);
|
http::async_write(stream, response, yc);
|
||||||
|
|
Loading…
Reference in New Issue