From 3fb79e25865c3bafa9156c2db767ddc16f5019f3 Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Mon, 15 May 2023 18:53:38 +0200 Subject: Better defaults for zen cli (#302) added ZenCmdBase::ResolveTargetHostSpec - this is a helper which provides better default behaviour for commands which interact with a local zen server instance. more specifically it picks a default based on which processes are actually running on the local machine this change also wires up the Scrub command along with some required HttpClient improvements --- src/zenhttp/httpclient.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'src/zenhttp/httpclient.cpp') diff --git a/src/zenhttp/httpclient.cpp b/src/zenhttp/httpclient.cpp index 891ada83e..fa290ef52 100644 --- a/src/zenhttp/httpclient.cpp +++ b/src/zenhttp/httpclient.cpp @@ -83,6 +83,15 @@ CommonResponse(cpr::Response&& HttpResponse) { const HttpResponseCode WorkResponseCode = HttpResponseCode(HttpResponse.status_code); + if (HttpResponse.status_code == 0) + { + // Client side failure code + + return HttpClient::Response{ + .StatusCode = WorkResponseCode, + .ResponsePayload = IoBufferBuilder::MakeCloneFromMemory(HttpResponse.error.message.data(), HttpResponse.error.message.size())}; + } + if (WorkResponseCode == HttpResponseCode::NoContent || HttpResponse.text.empty()) { return HttpClient::Response{.StatusCode = WorkResponseCode}; @@ -309,6 +318,13 @@ HttpClient::Delete(std::string_view Url) return CommonResponse(Sess->Delete()); } +HttpClient::Response +HttpClient::Post(std::string_view Url) +{ + Impl::Session Sess = m_Impl->AllocSession(m_BaseUri, Url); + return CommonResponse(Sess->Post()); +} + HttpClient::Response HttpClient::Post(std::string_view Url, const IoBuffer& Payload) { @@ -381,6 +397,36 @@ HttpClient::Response::AsText() return {}; } +std::string +HttpClient::Response::ToText() +{ + if (!ResponsePayload) + return {}; + + switch (ResponsePayload.GetContentType()) + { + case ZenContentType::kCbObject: + { + zen::ExtendableStringBuilder<1024> ObjStr; + zen::CbObject Object{SharedBuffer(ResponsePayload)}; + zen::CompactBinaryToJson(Object, ObjStr); + return ObjStr.ToString(); + } + break; + + case ZenContentType::kCSS: + case ZenContentType::kHTML: + case ZenContentType::kJavaScript: + case ZenContentType::kJSON: + case ZenContentType::kText: + case ZenContentType::kYAML: + return std::string{AsText()}; + + default: + return ""; + } +} + bool HttpClient::Response::IsSuccess() const noexcept { -- cgit v1.2.3