diff --git a/src/jamidht/conversation_channel_handler.cpp b/src/jamidht/conversation_channel_handler.cpp index ca0405cb4a83c059d3abfebeda16bb92b65dc34f..6c295de031261d34f6ced56c8767ad74da3980dc 100644 --- a/src/jamidht/conversation_channel_handler.cpp +++ b/src/jamidht/conversation_channel_handler.cpp @@ -56,8 +56,8 @@ ConversationChannelHandler::onRequest(const std::shared_ptr<dht::crypto::Certifi if (auto acc = account_.lock()) if (auto convModule = acc->convModule()) { - auto res = !convModule->isBannedDevice(conversationId, - cert->issuer->getLongId().toString()); + auto res = !convModule->isBanned(conversationId, cert->issuer->getId().toString()); + res &= !convModule->isBanned(conversationId, cert->getLongId().toString()); return res; } return false; diff --git a/src/jamidht/conversation_module.cpp b/src/jamidht/conversation_module.cpp index 84f0e06cd51634fb0eddd14563a653b4c37cf7ec..99a44d41cfca17c92e9200c04746d057daeec64c 100644 --- a/src/jamidht/conversation_module.cpp +++ b/src/jamidht/conversation_module.cpp @@ -2219,12 +2219,22 @@ ConversationModule::conversationVCard(const std::string& conversationId) const } bool -ConversationModule::isBannedDevice(const std::string& convId, const std::string& deviceId) const +ConversationModule::isBanned(const std::string& convId, const std::string& uri) const { - std::unique_lock<std::mutex> lk(pimpl_->conversationsMtx_); - auto conversation = pimpl_->conversations_.find(convId); - return conversation == pimpl_->conversations_.end() || !conversation->second - || conversation->second->isBanned(deviceId); + { + std::unique_lock<std::mutex> lk(pimpl_->conversationsMtx_); + auto conversation = pimpl_->conversations_.find(convId); + if (conversation == pimpl_->conversations_.end() || !conversation->second) + return true; + if (conversation->second->mode() != ConversationMode::ONE_TO_ONE) { + return conversation->second->isBanned(uri); + } + } + // If 1:1 we check the certificate status + if (auto acc = pimpl_->account_.lock()) { + return acc->accountManager()->getCertificateStatus(uri) == tls::TrustStore::PermissionStatus::BANNED; + } + return true; } void diff --git a/src/jamidht/conversation_module.h b/src/jamidht/conversation_module.h index 9b7d68fa586aa2cf1d7af7307ff006ded5ba7953..59d28770c0a9619812c0e42d6ffb436fc5661949 100644 --- a/src/jamidht/conversation_module.h +++ b/src/jamidht/conversation_module.h @@ -380,11 +380,11 @@ public: std::vector<uint8_t> conversationVCard(const std::string& conversationId) const; /** - * Return if a device is banned from a conversation + * Return if a device or member is banned from a conversation * @param convId - * @param deviceId + * @param uri */ - bool isBannedDevice(const std::string& convId, const std::string& deviceId) const; + bool isBanned(const std::string& convId, const std::string& uri) const; // Remove swarm /** diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp index 9837ef551ef465512efd5560d9085862bb5bb82a..8611a9cac324296f05064a9f8e4ad754209078a4 100644 --- a/src/jamidht/jamiaccount.cpp +++ b/src/jamidht/jamiaccount.cpp @@ -2038,7 +2038,7 @@ JamiAccount::doRegister_() } // Check if pull from banned device - if (convModule()->isBannedDevice(conversationId, remoteDevice)) { + if (convModule()->isBanned(conversationId, remoteDevice)) { JAMI_WARNING( "[Account {:s}] Git server requested for conversation {:s}, but the " "device is " diff --git a/src/jamidht/swarm/swarm_channel_handler.cpp b/src/jamidht/swarm/swarm_channel_handler.cpp index 625795899a89f89959a248dfbabcc9b53425d629..3608c4170d330972ccdbab4dd82d6ec8a0306e92 100644 --- a/src/jamidht/swarm/swarm_channel_handler.cpp +++ b/src/jamidht/swarm/swarm_channel_handler.cpp @@ -57,8 +57,8 @@ SwarmChannelHandler::onRequest(const std::shared_ptr<dht::crypto::Certificate>& auto conversationId = name.substr(sep + 1); if (auto acc = account_.lock()) if (auto convModule = acc->convModule()) { - auto res = !convModule->isBannedDevice(conversationId, - cert->issuer->getLongId().toString()); + auto res = !convModule->isBanned(conversationId, cert->issuer->getId().toString()); + res &= !convModule->isBanned(conversationId, cert->getLongId().toString()); return res; } return false;