web_backend: User config for username and token, support anonymous post.

This commit is contained in:
bunnei 2017-08-22 23:06:56 -04:00
parent 40f417125b
commit 41328afb58
2 changed files with 18 additions and 41 deletions

View file

@ -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

View file

@ -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.