From 90fcc074f2274b51be486f9bc65250076f0dd0b2 Mon Sep 17 00:00:00 2001 From: WolverinDEV Date: Mon, 22 Mar 2021 20:14:15 +0100 Subject: [PATCH] Fixed guest server queries --- server/src/InstanceHandler.cpp | 5 +++- server/src/InstanceHandler.h | 32 +++++------------------ server/src/InstanceHandlerPermissions.cpp | 25 ------------------ server/src/PermissionCalculator.cpp | 2 ++ server/src/client/ConnectedClient.cpp | 18 +++++++++++-- 5 files changed, 28 insertions(+), 54 deletions(-) diff --git a/server/src/InstanceHandler.cpp b/server/src/InstanceHandler.cpp index 0711dca..be3fdb6 100644 --- a/server/src/InstanceHandler.cpp +++ b/server/src/InstanceHandler.cpp @@ -948,4 +948,7 @@ bool InstanceHandler::validate_default_groups() { return true; } -InstancePermissionHelper::InstancePermissionHelper(InstanceHandler *instance) : instance{instance} {} \ No newline at end of file +std::shared_ptr InstanceHandler::guest_query_group() { + auto group_id = this->properties()[property::SERVERINSTANCE_GUEST_SERVERQUERY_GROUP].as_or(0); + return this->group_manager_->server_groups()->find_group(groups::GroupCalculateMode::GLOBAL, group_id); +} \ No newline at end of file diff --git a/server/src/InstanceHandler.h b/server/src/InstanceHandler.h index 9798894..d8eff3b 100644 --- a/server/src/InstanceHandler.h +++ b/server/src/InstanceHandler.h @@ -39,32 +39,6 @@ namespace ts { class ServerCommandExecutor; class InstanceHandler; - struct InstancePermissionHelper { - public: - explicit InstancePermissionHelper(InstanceHandler*); - - permission::v2::PermissionFlaggedValue calculate_permission( - permission::PermissionType, - ClientDbId, - ClientType type, - ChannelId channel, - bool granted = false, - std::shared_ptr cache = nullptr - ) const; - - std::vector> calculate_permissions( - const std::deque&, - ClientDbId, - ClientType type, - ChannelId channel, - bool granted = false, - std::shared_ptr cache = nullptr - ) const; - - private: - InstanceHandler* instance; - }; - class InstanceHandler { public: explicit InstanceHandler(SqlDataManager*); @@ -79,6 +53,12 @@ namespace ts { std::shared_ptr getInitialServerAdmin(){ return globalServerAdmin; } const auto& group_manager(){ return this->group_manager_; } + /** + * Get the default instance server query group. + * @return the default group or `nullptr` if the group doesn't exists any more. + */ + [[nodiscard]] std::shared_ptr guest_query_group(); + std::shared_ptr getChannelTree() { return this->default_tree; } std::shared_mutex& getChannelTreeLock() { return this->default_tree_lock; } diff --git a/server/src/InstanceHandlerPermissions.cpp b/server/src/InstanceHandlerPermissions.cpp index 5502ac1..0cb42f8 100644 --- a/server/src/InstanceHandlerPermissions.cpp +++ b/server/src/InstanceHandlerPermissions.cpp @@ -8,28 +8,3 @@ using namespace ts; using namespace ts::server; - -permission::v2::PermissionFlaggedValue InstancePermissionHelper::calculate_permission( - permission::PermissionType permission, - ClientDbId cldbid, - ClientType type, - ChannelId channel, - bool granted, - std::shared_ptr cache -) const { - auto result = this->calculate_permissions({permission}, cldbid, type, channel, granted, cache); - if(result.empty()) return {0, false}; - return result.front().second; -} - -std::vector > InstancePermissionHelper::calculate_permissions( - const std::deque &permissions, - ClientDbId cldbid, - ClientType type, - ChannelId channel, - bool granted, - std::shared_ptr /* cache */ -) const { - ClientPermissionCalculator calculator{nullptr, cldbid, type, channel}; - return calculator.calculate_permissions(permissions, granted); -} \ No newline at end of file diff --git a/server/src/PermissionCalculator.cpp b/server/src/PermissionCalculator.cpp index 3708340..71d83ee 100644 --- a/server/src/PermissionCalculator.cpp +++ b/server/src/PermissionCalculator.cpp @@ -82,6 +82,7 @@ ClientPermissionCalculator::ClientPermissionCalculator( } else { this->virtual_server_id = 0; this->group_manager_ = serverInstance->group_manager(); + this->default_server_group = []{ return serverInstance->guest_query_group(); }; } } @@ -98,6 +99,7 @@ void ClientPermissionCalculator::initialize_client(DataClient* client) { this->default_channel_group = [server]{ return server->default_channel_group(); }; } else { this->group_manager_ = serverInstance->group_manager(); + this->default_server_group = []{ return serverInstance->guest_query_group(); }; } } diff --git a/server/src/client/ConnectedClient.cpp b/server/src/client/ConnectedClient.cpp index dca53ae..3852371 100644 --- a/server/src/client/ConnectedClient.cpp +++ b/server/src/client/ConnectedClient.cpp @@ -1047,9 +1047,23 @@ void ConnectedClient::update_displayed_client_groups(bool& server_groups_changed if(!server_group_assignments.empty()) { server_group_assignments = server_group_assignments.substr(1); - } else if(auto default_group{ref_server->default_server_group()}; default_group) { - server_group_assignments = std::to_string(default_group->group_id()); } else { + if(this->getType() == ClientType::CLIENT_QUERY) { + if(auto default_group{serverInstance->guest_query_group()}; default_group) { + server_group_assignments = std::to_string(default_group->group_id()); + } + } else { + if(ref_server) { + if(auto default_group{ref_server->default_server_group()}; default_group) { + server_group_assignments = std::to_string(default_group->group_id()); + } + } else { + /* This should (in theory never happen). (But it maybe does with InternalClients idk) */ + } + } + } + + if(server_group_assignments.empty()) { server_group_assignments = "0"; }