summaryrefslogtreecommitdiffstats
path: root/src/web_service
diff options
context:
space:
mode:
Diffstat (limited to 'src/web_service')
-rw-r--r--src/web_service/web_backend.cpp27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/web_service/web_backend.cpp b/src/web_service/web_backend.cpp
index e50c3a301..a6070fc0f 100644
--- a/src/web_service/web_backend.cpp
+++ b/src/web_service/web_backend.cpp
@@ -2,8 +2,9 @@
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
+#include <cstdlib>
+#include <thread>
#include <cpr/cpr.h>
-#include <stdlib.h>
#include "common/logging/log.h"
#include "web_service/web_backend.h"
@@ -11,6 +12,19 @@ namespace WebService {
static constexpr char API_VERSION[]{"1"};
+static void PostJsonAuthenticated(const std::string& url, const std::string& data,
+ const std::string& username, const std::string& token) {
+ cpr::Post(cpr::Url{url}, cpr::Body{data}, cpr::Header{{"Content-Type", "application/json"},
+ {"x-username", username},
+ {"x-token", token},
+ {"api-version", API_VERSION}});
+}
+
+static void PostJsonAnonymous(const std::string& url, const std::string& data) {
+ cpr::Post(cpr::Url{url}, cpr::Body{data},
+ cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}});
+}
+
void PostJson(const std::string& url, const std::string& data, bool allow_anonymous,
const std::string& username, const std::string& token) {
if (url.empty()) {
@@ -24,18 +38,13 @@ void PostJson(const std::string& url, const std::string& data, bool allow_anonym
return;
}
+ // Post JSON asynchronously by spawning a new thread
if (are_credentials_provided) {
// Authenticated request if credentials are provided
- cpr::PostAsync(cpr::Url{url}, cpr::Body{data},
- cpr::Header{{"Content-Type", "application/json"},
- {"x-username", username},
- {"x-token", token},
- {"api-version", API_VERSION}});
+ std::thread{PostJsonAuthenticated, url, data, username, token}.detach();
} else {
// Otherwise, anonymous request
- cpr::PostAsync(
- cpr::Url{url}, cpr::Body{data},
- cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}});
+ std::thread{PostJsonAnonymous, url, data}.detach();
}
}