/* * NetworkUserBackend.cpp * * Copyright (C) 2009 Matthias Schiffer * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "NetworkUserBackend.h" #include "../RequestManager.h" namespace Mad { namespace Common { namespace Backends { void NetworkUserBackend::IdUserRequest::sendRequest() { Common::XmlPacket packet; packet.setType(type); packet.set(idType, id); sendPacket(packet); } void NetworkUserBackend::NameUserRequest::sendRequest() { Common::XmlPacket packet; packet.setType(type); packet.set("name", name); sendPacket(packet); } boost::shared_ptr > NetworkUserBackend::getUserList() throw(Core::Exception) { boost::shared_ptr request(new SimpleUserRequest(application, "ListUsers")); application->getRequestManager()->sendRequest(connection, request); request->wait(); std::pair, Core::Exception> result = request->getResult(); if(!result.first || result.second) throw result.second; boost::shared_ptr > userList(new std::map); const XmlPacket::List *users = result.first->getList("users"); if(users) { for(XmlPacket::List::const_iterator user = users->begin(); user != users->end(); ++user) { UserInfo userInfo(user->get("uid"), user->get("username")); userInfo.setGid(user->get("gid")); userInfo.setFullName(user->get("fullName")); userList->insert(std::make_pair(userInfo.getUid(), userInfo)); } } return userList; } boost::shared_ptr NetworkUserBackend::getUserInfo(unsigned long uid) throw(Core::Exception) { boost::shared_ptr request(new IdUserRequest(application, "GetUserInfo", "uid", uid)); application->getRequestManager()->sendRequest(connection, request); request->wait(); std::pair, Core::Exception> result = request->getResult(); if(!result.first || result.second) throw result.second; boost::shared_ptr userInfo(new UserInfo(result.first->get("uid"), result.first->get("username"))); userInfo->setGid(result.first->get("gid")); userInfo->setFullName(result.first->get("fullName")); return userInfo; } boost::shared_ptr NetworkUserBackend::getUserInfoByName(const std::string &name) throw(Core::Exception) { boost::shared_ptr request(new NameUserRequest(application, "GetUserInfo", name)); application->getRequestManager()->sendRequest(connection, request); request->wait(); std::pair, Core::Exception> result = request->getResult(); if(!result.first || result.second) throw result.second; boost::shared_ptr userInfo(new UserInfo(result.first->get("uid"), result.first->get("username"))); userInfo->setGid(result.first->get("gid")); userInfo->setFullName(result.first->get("fullName")); return userInfo; } boost::shared_ptr > NetworkUserBackend::getUserGroupList(unsigned long uid) throw(Core::Exception) { boost::shared_ptr request(new IdUserRequest(application, "ListUserGroups", "uid", uid)); application->getRequestManager()->sendRequest(connection, request); request->wait(); std::pair, Core::Exception> result = request->getResult(); if(!result.first || result.second) throw result.second; boost::shared_ptr > groupList(new std::set); const XmlPacket::List *groups = result.first->getList("groups"); if(groups) { for(XmlPacket::List::const_iterator group = groups->begin(); group != groups->end(); ++group) groupList->insert(group->get("gid")); } return groupList; } boost::shared_ptr > NetworkUserBackend::getGroupList() throw(Core::Exception) { boost::shared_ptr request(new SimpleUserRequest(application, "ListGroups")); application->getRequestManager()->sendRequest(connection, request); request->wait(); std::pair, Core::Exception> result = request->getResult(); if(!result.first || result.second) throw result.second; boost::shared_ptr > groupList(new std::map); const XmlPacket::List *groups = result.first->getList("groups"); if(groups) { for(XmlPacket::List::const_iterator group = groups->begin(); group != groups->end(); ++group) { GroupInfo groupInfo(group->get("gid"), group->get("name")); groupList->insert(std::make_pair(groupInfo.getGid(), groupInfo)); } } return groupList; } boost::shared_ptr NetworkUserBackend::getGroupInfo(unsigned long gid) throw(Core::Exception) { boost::shared_ptr request(new IdUserRequest(application, "GetGroupInfo", "gid", gid)); application->getRequestManager()->sendRequest(connection, request); request->wait(); std::pair, Core::Exception> result = request->getResult(); if(!result.first || result.second) throw result.second; boost::shared_ptr groupInfo(new GroupInfo(result.first->get("gid"), result.first->get("name"))); return groupInfo; } boost::shared_ptr NetworkUserBackend::getGroupInfoByName(const std::string &name) throw(Core::Exception) { boost::shared_ptr request(new NameUserRequest(application, "GetGroupInfo", name)); application->getRequestManager()->sendRequest(connection, request); request->wait(); std::pair, Core::Exception> result = request->getResult(); if(!result.first || result.second) throw result.second; boost::shared_ptr groupInfo(new GroupInfo(result.first->get("gid"), result.first->get("name"))); return groupInfo; } boost::shared_ptr > NetworkUserBackend::getGroupUserList(unsigned long gid) throw(Core::Exception) { boost::shared_ptr request(new IdUserRequest(application, "ListGroupUsers", "gid", gid)); application->getRequestManager()->sendRequest(connection, request); request->wait(); std::pair, Core::Exception> result = request->getResult(); if(!result.first || result.second) throw result.second; boost::shared_ptr > userList(new std::set); const XmlPacket::List *users = result.first->getList("users"); if(users) { for(XmlPacket::List::const_iterator user = users->begin(); user != users->end(); ++user) { userList->insert(user->get("uid")); } } return userList; } boost::shared_ptr > NetworkUserBackend::getFullUserGroupList() throw(Core::Exception) { boost::shared_ptr request(new SimpleUserRequest(application, "GetFullUserGroupList")); application->getRequestManager()->sendRequest(connection, request); request->wait(); std::pair, Core::Exception> result = request->getResult(); if(!result.first || result.second) throw result.second; boost::shared_ptr > ret(new std::multimap); const XmlPacket::List *list = result.first->getList("userGroupList"); if(list) { for(XmlPacket::List::const_iterator entry = list->begin(); entry != list->end(); ++entry) ret->insert(std::make_pair(entry->get("uid"), entry->get("gid"))); } return ret; } /*void NetworkUserBackend::setPassword(unsigned long uid, const std::string &password) throw(Core::Exception) { }*/ /*void NetworkUserBackend::addUser(const UserInfo &userInfo) throw(Core::Exception) { }*/ } } }