mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	web_backend: User config for username and token, support anonymous post.
This commit is contained in:
		
							parent
							
								
									40f417125b
								
							
						
					
					
						commit
						41328afb58
					
				@ -5,48 +5,37 @@
 | 
				
			|||||||
#include <cpr/cpr.h>
 | 
					#include <cpr/cpr.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include "common/logging/log.h"
 | 
					#include "common/logging/log.h"
 | 
				
			||||||
 | 
					#include "core/settings.h"
 | 
				
			||||||
#include "web_service/web_backend.h"
 | 
					#include "web_service/web_backend.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace WebService {
 | 
					namespace WebService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static constexpr char API_VERSION[]{"1"};
 | 
					static constexpr char API_VERSION[]{"1"};
 | 
				
			||||||
static constexpr char ENV_VAR_USERNAME[]{"CITRA_WEB_SERVICES_USERNAME"};
 | 
					 | 
				
			||||||
static constexpr char ENV_VAR_TOKEN[]{"CITRA_WEB_SERVICES_TOKEN"};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static std::string GetEnvironmentVariable(const char* name) {
 | 
					 | 
				
			||||||
    const char* value{getenv(name)};
 | 
					 | 
				
			||||||
    if (value) {
 | 
					 | 
				
			||||||
        return value;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return {};
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const std::string& GetUsername() {
 | 
					 | 
				
			||||||
    static const std::string username{GetEnvironmentVariable(ENV_VAR_USERNAME)};
 | 
					 | 
				
			||||||
    return username;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const std::string& GetToken() {
 | 
					 | 
				
			||||||
    static const std::string token{GetEnvironmentVariable(ENV_VAR_TOKEN)};
 | 
					 | 
				
			||||||
    return token;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
void PostJson(const std::string& url, const std::string& data) {
 | 
					void PostJson(const std::string& url, const std::string& data) {
 | 
				
			||||||
 | 
					    if (!Settings::values.enable_telemetry) {
 | 
				
			||||||
 | 
					        // Telemetry disabled by user configuration
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (url.empty()) {
 | 
					    if (url.empty()) {
 | 
				
			||||||
        LOG_ERROR(WebService, "URL is invalid");
 | 
					        LOG_ERROR(WebService, "URL is invalid");
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (GetUsername().empty() || GetToken().empty()) {
 | 
					    if (Settings::values.citra_token.empty() || Settings::values.citra_username.empty()) {
 | 
				
			||||||
        LOG_ERROR(WebService, "Environment variables %s and %s must be set to POST JSON",
 | 
					        // Anonymous request if citra token or username are empty
 | 
				
			||||||
                  ENV_VAR_USERNAME, ENV_VAR_TOKEN);
 | 
					        cpr::PostAsync(
 | 
				
			||||||
        return;
 | 
					            cpr::Url{url}, cpr::Body{data},
 | 
				
			||||||
    }
 | 
					            cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}});
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
    cpr::PostAsync(cpr::Url{url}, cpr::Body{data}, cpr::Header{{"Content-Type", "application/json"},
 | 
					        // We have both, do an authenticated request
 | 
				
			||||||
                                                               {"x-username", GetUsername()},
 | 
					        cpr::PostAsync(cpr::Url{url}, cpr::Body{data},
 | 
				
			||||||
                                                               {"x-token", GetToken()},
 | 
					                       cpr::Header{{"Content-Type", "application/json"},
 | 
				
			||||||
 | 
					                                   {"x-username", Settings::values.citra_username},
 | 
				
			||||||
 | 
					                                   {"x-token", Settings::values.citra_token},
 | 
				
			||||||
                                   {"api-version", API_VERSION}});
 | 
					                                   {"api-version", API_VERSION}});
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // namespace WebService
 | 
					} // namespace WebService
 | 
				
			||||||
 | 
				
			|||||||
@ -9,18 +9,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace WebService {
 | 
					namespace WebService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Gets the current username for accessing services.citra-emu.org.
 | 
					 | 
				
			||||||
 * @returns Username as a string, empty if not set.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
const std::string& GetUsername();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Gets the current token for accessing services.citra-emu.org.
 | 
					 | 
				
			||||||
 * @returns Token as a string, empty if not set.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
const std::string& GetToken();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Posts JSON to services.citra-emu.org.
 | 
					 * Posts JSON to services.citra-emu.org.
 | 
				
			||||||
 * @param url URL of the services.citra-emu.org endpoint to post data to.
 | 
					 * @param url URL of the services.citra-emu.org endpoint to post data to.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user