citra-emu
/
citra-canary
Archived
1
0
Fork 0

dedicated_room: Support single Base64 token.

This commit is contained in:
bunnei 2019-11-09 02:42:37 -05:00
parent 3a18039c53
commit a1544d8669
2 changed files with 32 additions and 10 deletions

View File

@ -13,7 +13,7 @@ if (ENABLE_WEB_SERVICE)
target_link_libraries(citra-room PRIVATE web_service) target_link_libraries(citra-room PRIVATE web_service)
endif() endif()
target_link_libraries(citra-room PRIVATE glad) target_link_libraries(citra-room PRIVATE cryptopp glad)
if (MSVC) if (MSVC)
target_link_libraries(citra-room PRIVATE getopt) target_link_libraries(citra-room PRIVATE getopt)
endif() endif()

View File

@ -9,6 +9,7 @@
#include <regex> #include <regex>
#include <string> #include <string>
#include <thread> #include <thread>
#include <cryptopp/base64.h>
#include <glad/glad.h> #include <glad/glad.h>
#ifdef _WIN32 #ifdef _WIN32
@ -66,6 +67,24 @@ static void PrintVersion() {
/// The magic text at the beginning of a citra-room ban list file. /// The magic text at the beginning of a citra-room ban list file.
static constexpr char BanListMagic[] = "CitraRoom-BanList-1"; static constexpr char BanListMagic[] = "CitraRoom-BanList-1";
static constexpr char token_delimiter{':'};
static std::string UsernameFromDisplayToken(const std::string& display_token) {
std::string unencoded_display_token;
CryptoPP::StringSource ss(
display_token, true,
new CryptoPP::Base64Decoder(new CryptoPP::StringSink(unencoded_display_token)));
return unencoded_display_token.substr(0, unencoded_display_token.find(token_delimiter));
}
static std::string TokenFromDisplayToken(const std::string& display_token) {
std::string unencoded_display_token;
CryptoPP::StringSource ss(
display_token, true,
new CryptoPP::Base64Decoder(new CryptoPP::StringSink(unencoded_display_token)));
return unencoded_display_token.substr(unencoded_display_token.find(token_delimiter) + 1);
}
static Network::Room::BanList LoadBanList(const std::string& path) { static Network::Room::BanList LoadBanList(const std::string& path) {
std::ifstream file; std::ifstream file;
OpenFStream(file, path, std::ios_base::in); OpenFStream(file, path, std::ios_base::in);
@ -158,7 +177,7 @@ int main(int argc, char** argv) {
{"password", required_argument, 0, 'w'}, {"password", required_argument, 0, 'w'},
{"preferred-game", required_argument, 0, 'g'}, {"preferred-game", required_argument, 0, 'g'},
{"preferred-game-id", required_argument, 0, 'i'}, {"preferred-game-id", required_argument, 0, 'i'},
{"username", required_argument, 0, 'u'}, {"username", optional_argument, 0, 'u'},
{"token", required_argument, 0, 't'}, {"token", required_argument, 0, 't'},
{"web-api-url", required_argument, 0, 'a'}, {"web-api-url", required_argument, 0, 'a'},
{"ban-list-file", required_argument, 0, 'b'}, {"ban-list-file", required_argument, 0, 'b'},
@ -248,10 +267,6 @@ int main(int argc, char** argv) {
"list.\nSet with --ban-list-file <file>\n\n"; "list.\nSet with --ban-list-file <file>\n\n";
} }
bool announce = true; bool announce = true;
if (username.empty()) {
announce = false;
std::cout << "username is empty: Hosting a private room\n\n";
}
if (token.empty() && announce) { if (token.empty() && announce) {
announce = false; announce = false;
std::cout << "token is empty: Hosting a private room\n\n"; std::cout << "token is empty: Hosting a private room\n\n";
@ -261,10 +276,17 @@ int main(int argc, char** argv) {
std::cout << "endpoint url is empty: Hosting a private room\n\n"; std::cout << "endpoint url is empty: Hosting a private room\n\n";
} }
if (announce) { if (announce) {
std::cout << "Hosting a public room\n\n"; if (username.empty()) {
Settings::values.web_api_url = web_api_url; std::cout << "Hosting a public room\n\n";
Settings::values.citra_username = username; Settings::values.web_api_url = web_api_url;
Settings::values.citra_token = token; Settings::values.citra_username = UsernameFromDisplayToken(token);
Settings::values.citra_token = TokenFromDisplayToken(token);
} else {
std::cout << "Hosting a public room\n\n";
Settings::values.web_api_url = web_api_url;
Settings::values.citra_username = username;
Settings::values.citra_token = token;
}
} }
if (!announce && enable_citra_mods) { if (!announce && enable_citra_mods) {
enable_citra_mods = false; enable_citra_mods = false;