Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions lib/remote/actionshandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ bool ActionsHandler::HandleRequest(
ApiAction::Ptr action = ApiAction::GetByName(actionName);

if (!action) {
HttpUtility::SendJsonError(response, params, 404, "Action '" + actionName + "' does not exist.");
HttpUtility::SendJsonError(response, params, 404, yc, "Action '" + actionName + "' does not exist.");
return true;
}

Expand All @@ -55,14 +55,14 @@ bool ActionsHandler::HandleRequest(
try {
objs = FilterUtility::GetFilterTargets(qd, params, user);
} catch (const std::exception& ex) {
HttpUtility::SendJsonError(response, params, 404,
HttpUtility::SendJsonError(response, params, 404, yc,
"No objects found.",
DiagnosticInformation(ex));
return true;
}

if (objs.empty()) {
HttpUtility::SendJsonError(response, params, 404,
HttpUtility::SendJsonError(response, params, 404, yc,
"No objects found.");
return true;
}
Expand All @@ -83,7 +83,7 @@ bool ActionsHandler::HandleRequest(

std::shared_lock wgLock{*waitGroup, std::try_to_lock};
if (!wgLock) {
HttpUtility::SendJsonError(response, params, 503, "Shutting down.");
HttpUtility::SendJsonError(response, params, 503, yc, "Shutting down.");
return true;
}

Expand Down
12 changes: 6 additions & 6 deletions lib/remote/configfileshandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ bool ConfigFilesHandler::HandleRequest(
}

if (request[http::field::accept] == "application/json") {
HttpUtility::SendJsonError(response, params, 400, "Invalid Accept header. Either remove the Accept header or set it to 'application/octet-stream'.");
HttpUtility::SendJsonError(response, params, 400, yc, "Invalid Accept header. Either remove the Accept header or set it to 'application/octet-stream'.");
return true;
}

Expand All @@ -54,26 +54,26 @@ bool ConfigFilesHandler::HandleRequest(
String stageName = HttpUtility::GetLastParameter(params, "stage");

if (!ConfigPackageUtility::ValidatePackageName(packageName)) {
HttpUtility::SendJsonError(response, params, 400, "Invalid package name.");
HttpUtility::SendJsonError(response, params, 400, yc, "Invalid package name.");
return true;
}

if (!ConfigPackageUtility::ValidateStageName(stageName)) {
HttpUtility::SendJsonError(response, params, 400, "Invalid stage name.");
HttpUtility::SendJsonError(response, params, 400, yc, "Invalid stage name.");
return true;
}

String relativePath = HttpUtility::GetLastParameter(params, "path");

if (ConfigPackageUtility::ContainsDotDot(relativePath)) {
HttpUtility::SendJsonError(response, params, 400, "Path contains '..' (not allowed).");
HttpUtility::SendJsonError(response, params, 400, yc, "Path contains '..' (not allowed).");
return true;
}

String path = ConfigPackageUtility::GetPackageDir() + "/" + packageName + "/" + stageName + "/" + relativePath;

if (!Utility::PathExists(path)) {
HttpUtility::SendJsonError(response, params, 404, "Path not found.");
HttpUtility::SendJsonError(response, params, 404, yc, "Path not found.");
return true;
}

Expand All @@ -82,7 +82,7 @@ bool ConfigFilesHandler::HandleRequest(
response.set(http::field::content_type, "application/octet-stream");
response.SendFile(path, yc);
} catch (const std::exception& ex) {
HttpUtility::SendJsonError(response, params, 500, "Could not read file.",
HttpUtility::SendJsonError(response, params, 500, yc, "Could not read file.",
DiagnosticInformation(ex));
}

Expand Down
26 changes: 13 additions & 13 deletions lib/remote/configpackageshandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ bool ConfigPackagesHandler::HandleRequest(
if (request.method() == http::verb::get)
HandleGet(request, response, yc);
else if (request.method() == http::verb::post)
HandlePost(request, response);
HandlePost(request, response, yc);
else if (request.method() == http::verb::delete_)
HandleDelete(request, response);
HandleDelete(request, response, yc);
else
return false;

Expand All @@ -55,7 +55,7 @@ void ConfigPackagesHandler::HandleGet(const HttpApiRequest& request, HttpApiResp
try {
packages = ConfigPackageUtility::GetPackages();
} catch (const std::exception& ex) {
HttpUtility::SendJsonError(response, params, 500, "Could not retrieve packages.",
HttpUtility::SendJsonError(response, params, 500, yc, "Could not retrieve packages.",
DiagnosticInformation(ex));
return;
}
Expand Down Expand Up @@ -90,7 +90,7 @@ void ConfigPackagesHandler::HandleGet(const HttpApiRequest& request, HttpApiResp
HttpUtility::SendJsonBody(response, params, result, yc);
}

void ConfigPackagesHandler::HandlePost(const HttpApiRequest& request, HttpApiResponse& response)
void ConfigPackagesHandler::HandlePost(const HttpApiRequest& request, HttpApiResponse& response, boost::asio::yield_context& yc)
{
namespace http = boost::beast::http;

Expand All @@ -106,13 +106,13 @@ void ConfigPackagesHandler::HandlePost(const HttpApiRequest& request, HttpApiRes
String packageName = HttpUtility::GetLastParameter(params, "package");

if (!ConfigPackageUtility::ValidatePackageName(packageName)) {
HttpUtility::SendJsonError(response, params, 400, "Invalid package name '" + packageName + "'.");
HttpUtility::SendJsonError(response, params, 400, yc, "Invalid package name '" + packageName + "'.");
return;
}

ConfigObjectsSharedLock configObjectsSharedLock(std::try_to_lock);
if (!configObjectsSharedLock) {
HttpUtility::SendJsonError(response, params, 503, "Icinga is reloading");
HttpUtility::SendJsonError(response, params, 503, yc, "Icinga is reloading");
return;
}

Expand All @@ -121,7 +121,7 @@ void ConfigPackagesHandler::HandlePost(const HttpApiRequest& request, HttpApiRes

ConfigPackageUtility::CreatePackage(packageName);
} catch (const std::exception& ex) {
HttpUtility::SendJsonError(response, params, 500, "Could not create package '" + packageName + "'.",
HttpUtility::SendJsonError(response, params, 500, yc, "Could not create package '" + packageName + "'.",
DiagnosticInformation(ex));
return;
}
Expand All @@ -137,10 +137,10 @@ void ConfigPackagesHandler::HandlePost(const HttpApiRequest& request, HttpApiRes
});

response.result(http::status::ok);
HttpUtility::SendJsonBody(response, params, result);
HttpUtility::SendJsonBody(response, params, result, yc);
}

void ConfigPackagesHandler::HandleDelete(const HttpApiRequest& request, HttpApiResponse& response)
void ConfigPackagesHandler::HandleDelete(const HttpApiRequest& request, HttpApiResponse& response, boost::asio::yield_context& yc)
{
namespace http = boost::beast::http;

Expand All @@ -156,20 +156,20 @@ void ConfigPackagesHandler::HandleDelete(const HttpApiRequest& request, HttpApiR
String packageName = HttpUtility::GetLastParameter(params, "package");

if (!ConfigPackageUtility::ValidatePackageName(packageName)) {
HttpUtility::SendJsonError(response, params, 400, "Invalid package name '" + packageName + "'.");
HttpUtility::SendJsonError(response, params, 400, yc, "Invalid package name '" + packageName + "'.");
return;
}

ConfigObjectsSharedLock lock(std::try_to_lock);
if (!lock) {
HttpUtility::SendJsonError(response, params, 503, "Icinga is reloading");
HttpUtility::SendJsonError(response, params, 503, yc, "Icinga is reloading");
return;
}

try {
ConfigPackageUtility::DeletePackage(packageName);
} catch (const std::exception& ex) {
HttpUtility::SendJsonError(response, params, 500, "Failed to delete package '" + packageName + "'.",
HttpUtility::SendJsonError(response, params, 500, yc, "Failed to delete package '" + packageName + "'.",
DiagnosticInformation(ex));
return;
}
Expand All @@ -185,5 +185,5 @@ void ConfigPackagesHandler::HandleDelete(const HttpApiRequest& request, HttpApiR
});

response.result(http::status::ok);
HttpUtility::SendJsonBody(response, params, result);
HttpUtility::SendJsonBody(response, params, result, yc);
}
4 changes: 2 additions & 2 deletions lib/remote/configpackageshandler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ class ConfigPackagesHandler final : public HttpHandler

private:
void HandleGet(const HttpApiRequest& request, HttpApiResponse& response, boost::asio::yield_context& yc);
void HandlePost(const HttpApiRequest& request, HttpApiResponse& response);
void HandleDelete(const HttpApiRequest& request, HttpApiResponse& response);
void HandlePost(const HttpApiRequest& request, HttpApiResponse& response, boost::asio::yield_context& yc);
void HandleDelete(const HttpApiRequest& request, HttpApiResponse& response, boost::asio::yield_context& yc);

};

Expand Down
32 changes: 16 additions & 16 deletions lib/remote/configstageshandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ bool ConfigStagesHandler::HandleRequest(
if (request.method() == http::verb::get)
HandleGet(request, response, yc);
else if (request.method() == http::verb::post)
HandlePost(request, response);
HandlePost(request, response, yc);
else if (request.method() == http::verb::delete_)
HandleDelete(request, response);
HandleDelete(request, response, yc);
else
return false;

Expand All @@ -67,10 +67,10 @@ void ConfigStagesHandler::HandleGet(const HttpApiRequest& request, HttpApiRespon
String stageName = HttpUtility::GetLastParameter(params, "stage");

if (!ConfigPackageUtility::ValidatePackageName(packageName))
return HttpUtility::SendJsonError(response, params, 400, "Invalid package name '" + packageName + "'.");
return HttpUtility::SendJsonError(response, params, 400, yc, "Invalid package name '" + packageName + "'.");

if (!ConfigPackageUtility::ValidateStageName(stageName))
return HttpUtility::SendJsonError(response, params, 400, "Invalid stage name '" + stageName + "'.");
return HttpUtility::SendJsonError(response, params, 400, yc, "Invalid stage name '" + stageName + "'.");

std::vector<std::pair<String, bool> > paths = ConfigPackageUtility::GetFiles(packageName, stageName);

Expand All @@ -90,7 +90,7 @@ void ConfigStagesHandler::HandleGet(const HttpApiRequest& request, HttpApiRespon
HttpUtility::SendJsonBody(response, params, result, yc);
}

void ConfigStagesHandler::HandlePost(const HttpApiRequest& request, HttpApiResponse& response)
void ConfigStagesHandler::HandlePost(const HttpApiRequest& request, HttpApiResponse& response, boost::asio::yield_context& yc)
{
namespace http = boost::beast::http;

Expand All @@ -106,7 +106,7 @@ void ConfigStagesHandler::HandlePost(const HttpApiRequest& request, HttpApiRespo
String packageName = HttpUtility::GetLastParameter(params, "package");

if (!ConfigPackageUtility::ValidatePackageName(packageName))
return HttpUtility::SendJsonError(response, params, 400, "Invalid package name '" + packageName + "'.");
return HttpUtility::SendJsonError(response, params, 400, yc, "Invalid package name '" + packageName + "'.");

bool reload = true;

Expand All @@ -131,7 +131,7 @@ void ConfigStagesHandler::HandlePost(const HttpApiRequest& request, HttpApiRespo

ConfigObjectsSharedLock configObjectsSharedLock(std::try_to_lock);
if (!configObjectsSharedLock) {
HttpUtility::SendJsonError(response, params, 503, "Icinga is reloading");
HttpUtility::SendJsonError(response, params, 503, yc, "Icinga is reloading");
return;
}

Expand All @@ -152,7 +152,7 @@ void ConfigStagesHandler::HandlePost(const HttpApiRequest& request, HttpApiRespo
*/
if (l_RunningPackageUpdates && l_LastReloadFailedTime == currentReloadFailedTime) {
return HttpUtility::SendJsonError(
response, params, 423,
response, params, 423, yc,
"Conflicting request, there is already an ongoing package update in progress. Please try it again later."
);
}
Expand All @@ -173,7 +173,7 @@ void ConfigStagesHandler::HandlePost(const HttpApiRequest& request, HttpApiRespo
/* validate the config. on success, activate stage and reload */
ConfigPackageUtility::AsyncTryActivateStage(packageName, stageName, activate, reload, resetPackageUpdates);
} catch (const std::exception& ex) {
return HttpUtility::SendJsonError(response, params, 500,
return HttpUtility::SendJsonError(response, params, 500, yc,
"Stage creation failed.",
DiagnosticInformation(ex));
}
Expand All @@ -198,10 +198,10 @@ void ConfigStagesHandler::HandlePost(const HttpApiRequest& request, HttpApiRespo
});

response.result(http::status::ok);
HttpUtility::SendJsonBody(response, params, result);
HttpUtility::SendJsonBody(response, params, result, yc);
}

void ConfigStagesHandler::HandleDelete(const HttpApiRequest& request, HttpApiResponse& response)
void ConfigStagesHandler::HandleDelete(const HttpApiRequest& request, HttpApiResponse& response, boost::asio::yield_context& yc)
{
namespace http = boost::beast::http;

Expand All @@ -221,21 +221,21 @@ void ConfigStagesHandler::HandleDelete(const HttpApiRequest& request, HttpApiRes
String stageName = HttpUtility::GetLastParameter(params, "stage");

if (!ConfigPackageUtility::ValidatePackageName(packageName))
return HttpUtility::SendJsonError(response, params, 400, "Invalid package name '" + packageName + "'.");
return HttpUtility::SendJsonError(response, params, 400, yc, "Invalid package name '" + packageName + "'.");

if (!ConfigPackageUtility::ValidateStageName(stageName))
return HttpUtility::SendJsonError(response, params, 400, "Invalid stage name '" + stageName + "'.");
return HttpUtility::SendJsonError(response, params, 400, yc, "Invalid stage name '" + stageName + "'.");

ConfigObjectsSharedLock lock(std::try_to_lock);
if (!lock) {
HttpUtility::SendJsonError(response, params, 503, "Icinga is reloading");
HttpUtility::SendJsonError(response, params, 503, yc, "Icinga is reloading");
return;
}

try {
ConfigPackageUtility::DeleteStage(packageName, stageName);
} catch (const std::exception& ex) {
return HttpUtility::SendJsonError(response, params, 500,
return HttpUtility::SendJsonError(response, params, 500, yc,
"Failed to delete stage '" + stageName + "' in package '" + packageName + "'.",
DiagnosticInformation(ex));
}
Expand All @@ -252,5 +252,5 @@ void ConfigStagesHandler::HandleDelete(const HttpApiRequest& request, HttpApiRes
});

response.result(http::status::ok);
HttpUtility::SendJsonBody(response, params, result);
HttpUtility::SendJsonBody(response, params, result, yc);
}
4 changes: 2 additions & 2 deletions lib/remote/configstageshandler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ class ConfigStagesHandler final : public HttpHandler

private:
void HandleGet(const HttpApiRequest& request, HttpApiResponse& response, boost::asio::yield_context& yc);
void HandlePost(const HttpApiRequest& request, HttpApiResponse& response);
void HandleDelete(const HttpApiRequest& request, HttpApiResponse& response);
void HandlePost(const HttpApiRequest& request, HttpApiResponse& response, boost::asio::yield_context& yc);
void HandleDelete(const HttpApiRequest& request, HttpApiResponse& response, boost::asio::yield_context& yc);
};

}
Expand Down
22 changes: 11 additions & 11 deletions lib/remote/consolehandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ bool ConsoleHandler::HandleRequest(
const WaitGroup::Ptr&,
const HttpApiRequest& request,
HttpApiResponse& response,
boost::asio::yield_context&
boost::asio::yield_context& yc
)
{
namespace http = boost::beast::http;
Expand Down Expand Up @@ -106,21 +106,21 @@ bool ConsoleHandler::HandleRequest(
ConfigObjectsSharedLock lock (std::try_to_lock);

if (!lock) {
HttpUtility::SendJsonError(response, params, 503, "Icinga is reloading.");
HttpUtility::SendJsonError(response, params, 503, yc, "Icinga is reloading.");
return true;
}

if (methodName == "execute-script")
return ExecuteScriptHelper(request, response, command, session, sandboxed);
return ExecuteScriptHelper(request, response, command, session, sandboxed, yc);
else if (methodName == "auto-complete-script")
return AutocompleteScriptHelper(request, response, command, session, sandboxed);
return AutocompleteScriptHelper(request, response, command, session, sandboxed, yc);

HttpUtility::SendJsonError(response, params, 400, "Invalid method specified: " + methodName);
HttpUtility::SendJsonError(response, params, 400, yc, "Invalid method specified: " + methodName);
return true;
}

bool ConsoleHandler::ExecuteScriptHelper(const HttpApiRequest& request, HttpApiResponse& response,
const String& command, const String& session, bool sandboxed)
const String& command, const String& session, bool sandboxed, boost::asio::yield_context& yc)
{
namespace http = boost::beast::http;

Expand All @@ -133,7 +133,7 @@ bool ConsoleHandler::ExecuteScriptHelper(const HttpApiRequest& request, HttpApiR

std::unique_lock frameLock(lsf->Mutex, std::try_to_lock);
if (!frameLock) {
HttpUtility::SendJsonError(response, request.Params(), 409, "Session is currently in use by another request.");
HttpUtility::SendJsonError(response, request.Params(), 409, yc, "Session is currently in use by another request.");
return true;
}

Expand Down Expand Up @@ -195,13 +195,13 @@ bool ConsoleHandler::ExecuteScriptHelper(const HttpApiRequest& request, HttpApiR
});

response.result(http::status::ok);
HttpUtility::SendJsonBody(response, request.Params(), result);
HttpUtility::SendJsonBody(response, request.Params(), result, yc);

return true;
}

bool ConsoleHandler::AutocompleteScriptHelper(const HttpApiRequest& request, HttpApiResponse& response,
const String& command, const String& session, bool sandboxed)
const String& command, const String& session, bool sandboxed, boost::asio::yield_context& yc)
{
namespace http = boost::beast::http;

Expand All @@ -214,7 +214,7 @@ bool ConsoleHandler::AutocompleteScriptHelper(const HttpApiRequest& request, Htt

std::unique_lock frameLock(lsf->Mutex, std::try_to_lock);
if (!frameLock) {
HttpUtility::SendJsonError(response, request.Params(), 409, "Session is currently in use by another request.");
HttpUtility::SendJsonError(response, request.Params(), 409, yc, "Session is currently in use by another request.");
return true;
}

Expand All @@ -240,7 +240,7 @@ bool ConsoleHandler::AutocompleteScriptHelper(const HttpApiRequest& request, Htt
});

response.result(http::status::ok);
HttpUtility::SendJsonBody(response, request.Params(), result);
HttpUtility::SendJsonBody(response, request.Params(), result, yc);

return true;
}
Expand Down
Loading
Loading