diff --git a/src/usermanager.cpp b/src/usermanager.cpp index ff4bb6ddf941cfb1093737f3ba54feda7134dc3c..50d969eb7e355dfc1ce25a5ca7d7ab0080b77996 100644 --- a/src/usermanager.cpp +++ b/src/usermanager.cpp @@ -151,25 +151,24 @@ void UserManager::handlePresence(Swift::Presence::ref presence) { if (!user) { // Admin user is not legacy network user, so do not create User class instance for him if (m_component->inServerMode()) { - std::vector const &x = CONFIG_VECTOR(m_component->getConfig(),"service.admin_jid"); - if (std::find(x.begin(), x.end(), presence->getFrom().toBare().toString()) != x.end()) { - - // Send admin contact to the user. - Swift::RosterPayload::ref payload = Swift::RosterPayload::ref(new Swift::RosterPayload()); - Swift::RosterItemPayload item; - item.setJID(m_component->getJID()); - item.setName("Admin"); - item.setSubscription(Swift::RosterItemPayload::Both); - payload->addItem(item); - - Swift::SetRosterRequest::ref request = Swift::SetRosterRequest::create(payload, presence->getFrom(), m_component->getIQRouter()); - request->send(); - - Swift::Presence::ref response = Swift::Presence::create(); - response->setTo(presence->getFrom()); - response->setFrom(m_component->getJID()); - m_component->getStanzaChannel()->sendPresence(response); - return; + std::vector const &x = CONFIG_VECTOR(m_component->getConfig(),"service.admin_jid"); + if (std::find(x.begin(), x.end(), presence->getFrom().toBare().toString()) != x.end()) { + // Send admin contact to the user. + Swift::RosterPayload::ref payload = Swift::RosterPayload::ref(new Swift::RosterPayload()); + Swift::RosterItemPayload item; + item.setJID(m_component->getJID()); + item.setName("Admin"); + item.setSubscription(Swift::RosterItemPayload::Both); + payload->addItem(item); + + Swift::SetRosterRequest::ref request = Swift::SetRosterRequest::create(payload, presence->getFrom(), m_component->getIQRouter()); + request->send(); + + Swift::Presence::ref response = Swift::Presence::create(); + response->setTo(presence->getFrom()); + response->setFrom(m_component->getJID()); + m_component->getStanzaChannel()->sendPresence(response); + return; } } @@ -245,13 +244,25 @@ void UserManager::handlePresence(Swift::Presence::ref presence) { } } - // Unregistered users are not able to login if (!registered) { LOG4CXX_WARN(logger, "Unregistered user " << userkey << " tried to login"); return; } + bool transport_enabled = true; + if (m_storageBackend) { + std::string value = "1"; + int type = (int) TYPE_BOOLEAN; + m_storageBackend->getUserSetting(res.id, "enable_transport", type, value); + transport_enabled = value == "1"; + } + // User can disabled the transport using adhoc commands + if (!transport_enabled) { + LOG4CXX_INFO(logger, "User " << userkey << " has disabled transport, not logging"); + return; + } + // Create new user class and set storagebackend user = new User(presence->getFrom(), res, m_component, this); user->getRosterManager()->setStorageBackend(m_storageBackend);