From 4906c8ce7b64318b6309f26fbc0dcfad13198ccd Mon Sep 17 00:00:00 2001
From: zhupengfei <zhupf321@gmail.com>
Date: Sat, 27 Oct 2018 15:46:58 +0800
Subject: [PATCH] citra-room: Add verify backend and use new announce api

---
 src/dedicated_room/CMakeLists.txt |  5 +++++
 src/dedicated_room/citra-room.cpp | 20 +++++++++++++++++++-
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/dedicated_room/CMakeLists.txt b/src/dedicated_room/CMakeLists.txt
index cbd5d9726..2492bc523 100644
--- a/src/dedicated_room/CMakeLists.txt
+++ b/src/dedicated_room/CMakeLists.txt
@@ -8,6 +8,11 @@ add_executable(citra-room
 create_target_directory_groups(citra-room)
 
 target_link_libraries(citra-room PRIVATE common core network)
+if (ENABLE_WEB_SERVICE)
+    target_compile_definitions(citra-room PRIVATE -DENABLE_WEB_SERVICE)
+    target_link_libraries(citra-room PRIVATE web_service)
+endif()
+
 target_link_libraries(citra-room PRIVATE glad)
 if (MSVC)
     target_link_libraries(citra-room PRIVATE getopt)
diff --git a/src/dedicated_room/citra-room.cpp b/src/dedicated_room/citra-room.cpp
index 8ccce245d..9246b5797 100644
--- a/src/dedicated_room/citra-room.cpp
+++ b/src/dedicated_room/citra-room.cpp
@@ -31,6 +31,11 @@
 #include "core/core.h"
 #include "core/settings.h"
 #include "network/network.h"
+#include "network/verify_user.h"
+
+#ifdef ENABLE_WEB_SERVICE
+#include "web_service/verify_user_jwt.h"
+#endif
 
 static void PrintHelp(const char* argv0) {
     std::cout << "Usage: " << argv0
@@ -179,10 +184,23 @@ int main(int argc, char** argv) {
         Settings::values.citra_token = token;
     }
 
+    std::unique_ptr<Network::VerifyUser::Backend> verify_backend;
+    if (announce) {
+#ifdef ENABLE_WEB_SERVICE
+        verify_backend = std::make_unique<WebService::VerifyUserJWT>(Settings::values.web_api_url);
+#else
+        std::cout
+            << "Citra Web Services is not available with this build: validation is disabled.\n\n";
+        verify_backend = std::make_unique<Network::VerifyUser::NullBackend>();
+#endif
+    } else {
+        verify_backend = std::make_unique<Network::VerifyUser::NullBackend>();
+    }
+
     Network::Init();
     if (std::shared_ptr<Network::Room> room = Network::GetRoom().lock()) {
         if (!room->Create(room_name, room_description, "", port, password, max_members,
-                          preferred_game, preferred_game_id)) {
+                          preferred_game, preferred_game_id, std::move(verify_backend))) {
             std::cout << "Failed to create room: \n\n";
             return -1;
         }