Skip to content
Merged
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
1 change: 1 addition & 0 deletions lib/remote/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ set(remote_SOURCES
eventshandler.cpp eventshandler.hpp
filterutility.cpp filterutility.hpp
httphandler.cpp httphandler.hpp
httpmessage.cpp httpmessage.hpp
httpserverconnection.cpp httpserverconnection.hpp
httputility.cpp httputility.hpp
infohandler.cpp infohandler.hpp
Expand Down
14 changes: 6 additions & 8 deletions lib/remote/actionshandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,15 @@ REGISTER_URLHANDLER("/v1/actions", ActionsHandler);

bool ActionsHandler::HandleRequest(
const WaitGroup::Ptr& waitGroup,
AsioTlsStream& stream,
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params,
boost::asio::yield_context& yc,
HttpServerConnection& server
const HttpRequest& request,
HttpResponse& response,
boost::asio::yield_context& yc
)
{
namespace http = boost::beast::http;
auto url = request.Url();
auto user = request.User();
auto params = request.Params();

if (url->GetPath().size() != 3)
return false;
Expand Down
11 changes: 3 additions & 8 deletions lib/remote/actionshandler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,9 @@ class ActionsHandler final : public HttpHandler

bool HandleRequest(
const WaitGroup::Ptr& waitGroup,
AsioTlsStream& stream,
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params,
boost::asio::yield_context& yc,
HttpServerConnection& server
const HttpRequest& request,
HttpResponse& response,
boost::asio::yield_context& yc
) override;
};

Expand Down
2 changes: 1 addition & 1 deletion lib/remote/apilistener.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,12 +161,12 @@ class ApiListener final : public ObjectImpl<ApiListener>
return m_WaitGroup;
}

protected:
void OnConfigLoaded() override;
void OnAllConfigLoaded() override;
void Start(bool runtimeCreated) override;
void Stop(bool runtimeDeleted) override;

protected:
void ValidateTlsProtocolmin(const Lazy<String>& lvalue, const ValidationUtils& utils) override;
void ValidateTlsHandshakeTimeout(const Lazy<double>& lvalue, const ValidationUtils& utils) override;

Expand Down
22 changes: 8 additions & 14 deletions lib/remote/configfileshandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,17 @@ REGISTER_URLHANDLER("/v1/config/files", ConfigFilesHandler);

bool ConfigFilesHandler::HandleRequest(
const WaitGroup::Ptr&,
AsioTlsStream& stream,
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params,
boost::asio::yield_context& yc,
HttpServerConnection& server
const HttpRequest& request,
HttpResponse& response,
boost::asio::yield_context& yc
)
{
namespace http = boost::beast::http;

auto url = request.Url();
auto user = request.User();
auto params = request.Params();

if (request.method() != http::verb::get)
return false;

Expand Down Expand Up @@ -78,14 +77,9 @@ bool ConfigFilesHandler::HandleRequest(
}

try {
std::ifstream fp(path.CStr(), std::ifstream::in | std::ifstream::binary);
fp.exceptions(std::ifstream::badbit);

String content((std::istreambuf_iterator<char>(fp)), std::istreambuf_iterator<char>());
response.result(http::status::ok);
response.set(http::field::content_type, "application/octet-stream");
response.body() = content;
response.content_length(response.body().size());
response.SendFile(path, yc);
} catch (const std::exception& ex) {
HttpUtility::SendJsonError(response, params, 500, "Could not read file.",
DiagnosticInformation(ex));
Expand Down
11 changes: 3 additions & 8 deletions lib/remote/configfileshandler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,9 @@ class ConfigFilesHandler final : public HttpHandler

bool HandleRequest(
const WaitGroup::Ptr& waitGroup,
AsioTlsStream& stream,
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params,
boost::asio::yield_context& yc,
HttpServerConnection& server
const HttpRequest& request,
HttpResponse& response,
boost::asio::yield_context& yc
) override;
};

Expand Down
57 changes: 25 additions & 32 deletions lib/remote/configpackageshandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,43 +13,40 @@ REGISTER_URLHANDLER("/v1/config/packages", ConfigPackagesHandler);

bool ConfigPackagesHandler::HandleRequest(
const WaitGroup::Ptr&,
AsioTlsStream& stream,
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params,
boost::asio::yield_context& yc,
HttpServerConnection& server
const HttpRequest& request,
HttpResponse& response,
boost::asio::yield_context& yc
)
{
namespace http = boost::beast::http;

auto url = request.Url();
auto user = request.User();
auto params = request.Params();

if (url->GetPath().size() > 4)
return false;

if (request.method() == http::verb::get)
HandleGet(user, request, url, response, params);
HandleGet(request, response);
else if (request.method() == http::verb::post)
HandlePost(user, request, url, response, params);
HandlePost(request, response);
else if (request.method() == http::verb::delete_)
HandleDelete(user, request, url, response, params);
HandleDelete(request, response);
else
return false;

return true;
}

void ConfigPackagesHandler::HandleGet(
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params
)
void ConfigPackagesHandler::HandleGet(const HttpRequest& request, HttpResponse& response)
{
namespace http = boost::beast::http;

auto url = request.Url();
auto user = request.User();
auto params = request.Params();

FilterUtility::CheckPermission(user, "config/query");

std::vector<String> packages;
Expand Down Expand Up @@ -90,16 +87,14 @@ void ConfigPackagesHandler::HandleGet(
HttpUtility::SendJsonBody(response, params, result);
}

void ConfigPackagesHandler::HandlePost(
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params
)
void ConfigPackagesHandler::HandlePost(const HttpRequest& request, HttpResponse& response)
{
namespace http = boost::beast::http;

auto url = request.Url();
auto user = request.User();
auto params = request.Params();

FilterUtility::CheckPermission(user, "config/modify");

if (url->GetPath().size() >= 4)
Expand Down Expand Up @@ -142,16 +137,14 @@ void ConfigPackagesHandler::HandlePost(
HttpUtility::SendJsonBody(response, params, result);
}

void ConfigPackagesHandler::HandleDelete(
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params
)
void ConfigPackagesHandler::HandleDelete(const HttpRequest& request, HttpResponse& response)
{
namespace http = boost::beast::http;

auto url = request.Url();
auto user = request.User();
auto params = request.Params();

FilterUtility::CheckPermission(user, "config/modify");

if (url->GetPath().size() >= 4)
Expand Down
35 changes: 6 additions & 29 deletions lib/remote/configpackageshandler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,38 +15,15 @@ class ConfigPackagesHandler final : public HttpHandler

bool HandleRequest(
const WaitGroup::Ptr& waitGroup,
AsioTlsStream& stream,
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params,
boost::asio::yield_context& yc,
HttpServerConnection& server
const HttpRequest& request,
HttpResponse& response,
boost::asio::yield_context& yc
) override;

private:
void HandleGet(
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params
);
void HandlePost(
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params
);
void HandleDelete(
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params
);
void HandleGet(const HttpRequest& request, HttpResponse& response);
void HandlePost(const HttpRequest& request, HttpResponse& response);
void HandleDelete(const HttpRequest& request, HttpResponse& response);

};

Expand Down
57 changes: 25 additions & 32 deletions lib/remote/configstageshandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,43 +20,40 @@ static std::mutex l_RunningPackageUpdatesMutex; // Protects the above two variab

bool ConfigStagesHandler::HandleRequest(
const WaitGroup::Ptr&,
AsioTlsStream& stream,
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params,
boost::asio::yield_context& yc,
HttpServerConnection& server
const HttpRequest& request,
HttpResponse& response,
boost::asio::yield_context& yc
)
{
namespace http = boost::beast::http;

auto url = request.Url();
auto user = request.User();
auto params = request.Params();

if (url->GetPath().size() > 5)
return false;

if (request.method() == http::verb::get)
HandleGet(user, request, url, response, params);
HandleGet(request, response);
else if (request.method() == http::verb::post)
HandlePost(user, request, url, response, params);
HandlePost(request, response);
else if (request.method() == http::verb::delete_)
HandleDelete(user, request, url, response, params);
HandleDelete(request, response);
else
return false;

return true;
}

void ConfigStagesHandler::HandleGet(
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params
)
void ConfigStagesHandler::HandleGet(const HttpRequest& request, HttpResponse& response)
{
namespace http = boost::beast::http;

auto url = request.Url();
auto user = request.User();
auto params = request.Params();

FilterUtility::CheckPermission(user, "config/query");

if (url->GetPath().size() >= 4)
Expand Down Expand Up @@ -95,16 +92,14 @@ void ConfigStagesHandler::HandleGet(
HttpUtility::SendJsonBody(response, params, result);
}

void ConfigStagesHandler::HandlePost(
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params
)
void ConfigStagesHandler::HandlePost(const HttpRequest& request, HttpResponse& response)
{
namespace http = boost::beast::http;

auto url = request.Url();
auto user = request.User();
auto params = request.Params();

FilterUtility::CheckPermission(user, "config/modify");

if (url->GetPath().size() >= 4)
Expand Down Expand Up @@ -208,16 +203,14 @@ void ConfigStagesHandler::HandlePost(
HttpUtility::SendJsonBody(response, params, result);
}

void ConfigStagesHandler::HandleDelete(
const ApiUser::Ptr& user,
boost::beast::http::request<boost::beast::http::string_body>& request,
const Url::Ptr& url,
boost::beast::http::response<boost::beast::http::string_body>& response,
const Dictionary::Ptr& params
)
void ConfigStagesHandler::HandleDelete(const HttpRequest& request, HttpResponse& response)
{
namespace http = boost::beast::http;

auto url = request.Url();
auto user = request.User();
auto params = request.Params();

FilterUtility::CheckPermission(user, "config/modify");

if (url->GetPath().size() >= 4)
Expand Down
Loading
Loading