diff options
Diffstat (limited to 'src/Server')
-rw-r--r-- | src/Server/RequestHandlers/UserRequestHandlerGroup.cpp | 191 |
1 files changed, 152 insertions, 39 deletions
diff --git a/src/Server/RequestHandlers/UserRequestHandlerGroup.cpp b/src/Server/RequestHandlers/UserRequestHandlerGroup.cpp index d579480..292e887 100644 --- a/src/Server/RequestHandlers/UserRequestHandlerGroup.cpp +++ b/src/Server/RequestHandlers/UserRequestHandlerGroup.cpp @@ -17,99 +17,196 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <config.h> + #include "UserRequestHandlerGroup.h" #include "../Application.h" + #include <Common/UserManager.h> +#include <boost/date_time/posix_time/posix_time.hpp> + namespace Mad { namespace Server { namespace RequestHandlers { -void UserRequestHandlerGroup::handleUserListRequest(boost::shared_ptr<const Common::XmlPacket> packet _UNUSED_PARAMETER_, Common::XmlPacket *ret, +void UserRequestHandlerGroup::handleUserListRequest(boost::shared_ptr<const Common::XmlPacket> packet, Common::XmlPacket *ret, Common::Connection *connection _UNUSED_PARAMETER_) { - boost::shared_ptr<const std::map<unsigned long, Common::UserInfo> > info = application->getUserManager()->getUserList(); + boost::posix_time::ptime timestamp(boost::posix_time::not_a_date_time); + + const std::string ×tr = packet->get<const std::string&>("timestamp"); + if(!timestr.empty()) { + try { + timestamp = boost::posix_time::from_iso_string(timestr); + } + catch(...) {} + } + + boost::shared_ptr<const std::map<unsigned long, Common::UserInfo> > users = application->getUserManager()->getUserList(×tamp); ret->setType("OK"); - Common::XmlPacket::List *list = ret->createList("users"); - for(std::map<unsigned long, Common::UserInfo>::const_iterator user = info->begin(); user != info->end(); ++user) { - Common::XmlPacket::List::iterator entry = list->addEntry(); + if(!timestamp.is_not_a_date_time()) + ret->set("timestamp", boost::posix_time::to_iso_string(timestamp)); + + if(users) { + Common::XmlPacket::List *list = ret->createList("users"); + + for(std::map<unsigned long, Common::UserInfo>::const_iterator user = users->begin(); user != users->end(); ++user) { + Common::XmlPacket::List::iterator entry = list->addEntry(); - entry->set("uid", user->second.getUid()); - entry->set("gid", user->second.getGid()); - entry->set("username", user->second.getUsername()); - entry->set("fullName", user->second.getFullName()); + entry->set("uid", user->second.getUid()); + entry->set("gid", user->second.getGid()); + entry->set("username", user->second.getUsername()); + entry->set("fullName", user->second.getFullName()); + } } } void UserRequestHandlerGroup::handleUserInfoRequest(boost::shared_ptr<const Common::XmlPacket> packet, Common::XmlPacket *ret, Common::Connection *connection _UNUSED_PARAMETER_) { + boost::posix_time::ptime timestamp(boost::posix_time::not_a_date_time); + + const std::string ×tr = packet->get<const std::string&>("timestamp"); + if(!timestr.empty()) { + try { + timestamp = boost::posix_time::from_iso_string(timestr); + } + catch(...) {} + } + boost::shared_ptr<const Common::UserInfo> info; unsigned long uid = packet->get<unsigned long>("uid"); if(uid) - info = application->getUserManager()->getUserInfo(uid); + info = application->getUserManager()->getUserInfo(uid, ×tamp); else - info = application->getUserManager()->getUserInfoByName(packet->get<const std::string&>("name")); + info = application->getUserManager()->getUserInfoByName(packet->get<const std::string&>("name"), ×tamp); ret->setType("OK"); - ret->set("uid", info->getUid()); - ret->set("gid", info->getGid()); - ret->set("username", info->getUsername()); - ret->set("fullName", info->getFullName()); + if(!timestamp.is_not_a_date_time()) + ret->set("timestamp", boost::posix_time::to_iso_string(timestamp)); + + if(info) { + ret->set("uid", info->getUid()); + ret->set("gid", info->getGid()); + ret->set("username", info->getUsername()); + ret->set("fullName", info->getFullName()); + } } void UserRequestHandlerGroup::handleUserGroupListRequest(boost::shared_ptr<const Common::XmlPacket> packet, Common::XmlPacket *ret, Common::Connection *connection _UNUSED_PARAMETER_) { - boost::shared_ptr<const std::set<unsigned long> > groups = application->getUserManager()->getUserGroupList(packet->get<unsigned long>("uid")); + boost::posix_time::ptime timestamp(boost::posix_time::not_a_date_time); + + const std::string ×tr = packet->get<const std::string&>("timestamp"); + if(!timestr.empty()) { + try { + timestamp = boost::posix_time::from_iso_string(timestr); + } + catch(...) {} + } + + boost::shared_ptr<const std::set<unsigned long> > groups = application->getUserManager()->getUserGroupList(packet->get<unsigned long>("uid"), ×tamp); ret->setType("OK"); - Common::XmlPacket::List *list = ret->createList("groups"); - for(std::set<unsigned long>::const_iterator group = groups->begin(); group != groups->end(); ++group) { - Common::XmlPacket::List::iterator entry = list->addEntry(); + if(!timestamp.is_not_a_date_time()) + ret->set("timestamp", boost::posix_time::to_iso_string(timestamp)); + + if(groups) { + Common::XmlPacket::List *list = ret->createList("groups"); + + for(std::set<unsigned long>::const_iterator group = groups->begin(); group != groups->end(); ++group) { + Common::XmlPacket::List::iterator entry = list->addEntry(); - entry->set("gid", *group); + entry->set("gid", *group); + } } } -void UserRequestHandlerGroup::handleGroupListRequest(boost::shared_ptr<const Common::XmlPacket> packet _UNUSED_PARAMETER_, Common::XmlPacket *ret, +void UserRequestHandlerGroup::handleGroupListRequest(boost::shared_ptr<const Common::XmlPacket> packet, Common::XmlPacket *ret, Common::Connection *connection _UNUSED_PARAMETER_) { - boost::shared_ptr<const std::map<unsigned long, Common::GroupInfo> > info = application->getUserManager()->getGroupList(); + boost::posix_time::ptime timestamp(boost::posix_time::not_a_date_time); + + const std::string ×tr = packet->get<const std::string&>("timestamp"); + if(!timestr.empty()) { + try { + timestamp = boost::posix_time::from_iso_string(timestr); + } + catch(...) {} + } + + boost::shared_ptr<const std::map<unsigned long, Common::GroupInfo> > groups = application->getUserManager()->getGroupList(×tamp); ret->setType("OK"); - Common::XmlPacket::List *list = ret->createList("groups"); - for(std::map<unsigned long, Common::GroupInfo>::const_iterator group = info->begin(); group != info->end(); ++group) { - Common::XmlPacket::List::iterator entry = list->addEntry(); + if(!timestamp.is_not_a_date_time()) + ret->set("timestamp", boost::posix_time::to_iso_string(timestamp)); + + if(groups) { + Common::XmlPacket::List *list = ret->createList("groups"); + + for(std::map<unsigned long, Common::GroupInfo>::const_iterator group = groups->begin(); group != groups->end(); ++group) { + Common::XmlPacket::List::iterator entry = list->addEntry(); - entry->set("gid", group->second.getGid()); - entry->set("name", group->second.getName()); + entry->set("gid", group->second.getGid()); + entry->set("name", group->second.getName()); + } } } void UserRequestHandlerGroup::handleGroupInfoRequest(boost::shared_ptr<const Common::XmlPacket> packet, Common::XmlPacket *ret, Common::Connection *connection _UNUSED_PARAMETER_) { + boost::posix_time::ptime timestamp(boost::posix_time::not_a_date_time); + + const std::string ×tr = packet->get<const std::string&>("timestamp"); + if(!timestr.empty()) { + try { + timestamp = boost::posix_time::from_iso_string(timestr); + } + catch(...) {} + } + boost::shared_ptr<const Common::GroupInfo> info; unsigned long gid = packet->get<unsigned long>("gid"); if(gid) - info = application->getUserManager()->getGroupInfo(gid); + info = application->getUserManager()->getGroupInfo(gid, ×tamp); else - info = application->getUserManager()->getGroupInfoByName(packet->get<const std::string&>("name")); + info = application->getUserManager()->getGroupInfoByName(packet->get<const std::string&>("name"), ×tamp); ret->setType("OK"); - ret->set("gid", info->getGid()); - ret->set("name", info->getName()); + if(!timestamp.is_not_a_date_time()) + ret->set("timestamp", boost::posix_time::to_iso_string(timestamp)); + + if(info) { + ret->set("gid", info->getGid()); + ret->set("name", info->getName()); + } } void UserRequestHandlerGroup::handleGroupUserListRequest(boost::shared_ptr<const Common::XmlPacket> packet, Common::XmlPacket *ret, Common::Connection *connection _UNUSED_PARAMETER_) { - boost::shared_ptr<const std::set<unsigned long> > users = application->getUserManager()->getGroupUserList(packet->get<unsigned long>("gid")); + boost::posix_time::ptime timestamp(boost::posix_time::not_a_date_time); + + const std::string ×tr = packet->get<const std::string&>("timestamp"); + if(!timestr.empty()) { + try { + timestamp = boost::posix_time::from_iso_string(timestr); + } + catch(...) {} + } + + boost::shared_ptr<const std::set<unsigned long> > users = application->getUserManager()->getGroupUserList(packet->get<unsigned long>("gid"), ×tamp); ret->setType("OK"); + + if(!timestamp.is_not_a_date_time()) + ret->set("timestamp", boost::posix_time::to_iso_string(timestamp)); + Common::XmlPacket::List *list = ret->createList("users"); for(std::set<unsigned long>::const_iterator user = users->begin(); user != users->end(); ++user) { @@ -119,18 +216,34 @@ void UserRequestHandlerGroup::handleGroupUserListRequest(boost::shared_ptr<const } } -void UserRequestHandlerGroup::handleFullUserGroupListRequest(boost::shared_ptr<const Common::XmlPacket> packet _UNUSED_PARAMETER_, Common::XmlPacket *ret, +void UserRequestHandlerGroup::handleFullUserGroupListRequest(boost::shared_ptr<const Common::XmlPacket> packet, Common::XmlPacket *ret, Common::Connection *connection _UNUSED_PARAMETER_) { - boost::shared_ptr<const std::multimap<unsigned long, unsigned long> > userGroups = application->getUserManager()->getFullUserGroupList(); + boost::posix_time::ptime timestamp(boost::posix_time::not_a_date_time); + + const std::string ×tr = packet->get<const std::string&>("timestamp"); + if(!timestr.empty()) { + try { + timestamp = boost::posix_time::from_iso_string(timestr); + } + catch(...) {} + } + + boost::shared_ptr<const std::multimap<unsigned long, unsigned long> > userGroups = application->getUserManager()->getFullUserGroupList(×tamp); ret->setType("OK"); - Common::XmlPacket::List *list = ret->createList("userGroupList"); - for(std::map<unsigned long, unsigned long>::const_iterator userGroup = userGroups->begin(); userGroup != userGroups->end(); ++userGroup) { - Common::XmlPacket::List::iterator entry = list->addEntry(); + if(!timestamp.is_not_a_date_time()) + ret->set("timestamp", boost::posix_time::to_iso_string(timestamp)); + + if(userGroups) { + Common::XmlPacket::List *list = ret->createList("userGroupList"); + + for(std::map<unsigned long, unsigned long>::const_iterator userGroup = userGroups->begin(); userGroup != userGroups->end(); ++userGroup) { + Common::XmlPacket::List::iterator entry = list->addEntry(); - entry->set("uid", userGroup->first); - entry->set("gid", userGroup->second); + entry->set("uid", userGroup->first); + entry->set("gid", userGroup->second); + } } } |