web_backend: Fix asynchronous JSON post by spawning new thread.
This commit is contained in:
		
							parent
							
								
									04bd0c957e
								
							
						
					
					
						commit
						c8562b21d9
					
				| @ -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(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei