mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-11-04 04:34:07 +01:00 
			
		
		
		
	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