From 27d7db1faecd761f6dccd753792b2e72d71e9fdd Mon Sep 17 00:00:00 2001
From: FearlessTobi <thm.frey@gmail.com>
Date: Sat, 27 Aug 2022 04:00:27 +0200
Subject: [PATCH] dedicated_room: Correctly handle token decoding

Correctly handle token decoding when '=' has been trimmed by the backend server.

Co-Authored-By: liushuyu <liushuyu011@gmail.com>
---
 src/dedicated_room/yuzu_room.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/dedicated_room/yuzu_room.cpp b/src/dedicated_room/yuzu_room.cpp
index 7c1a75de3..173a53317 100644
--- a/src/dedicated_room/yuzu_room.cpp
+++ b/src/dedicated_room/yuzu_room.cpp
@@ -75,6 +75,17 @@ static constexpr char BanListMagic[] = "YuzuRoom-BanList-1";
 
 static constexpr char token_delimiter{':'};
 
+static void PadToken(std::string& token) {
+    const auto remainder = token.size() % 3;
+    if (remainder == 0) {
+        return;
+    }
+
+    for (size_t i = 0; i < (3 - remainder); i++) {
+        token.push_back('=');
+    }
+}
+
 static std::string UsernameFromDisplayToken(const std::string& display_token) {
     std::size_t outlen;
 
@@ -300,6 +311,7 @@ int main(int argc, char** argv) {
         if (username.empty()) {
             LOG_INFO(Network, "Hosting a public room");
             Settings::values.web_api_url = web_api_url;
+            PadToken(token);
             Settings::values.yuzu_username = UsernameFromDisplayToken(token);
             username = Settings::values.yuzu_username.GetValue();
             Settings::values.yuzu_token = TokenFromDisplayToken(token);