diff options
Diffstat (limited to 'src/Server')
-rw-r--r-- | src/Server/UserBackend.h | 22 | ||||
-rw-r--r-- | src/Server/UserManager.cpp | 80 | ||||
-rw-r--r-- | src/Server/UserManager.h | 5 |
3 files changed, 107 insertions, 0 deletions
diff --git a/src/Server/UserBackend.h b/src/Server/UserBackend.h index 2a51d1b..001ee49 100644 --- a/src/Server/UserBackend.h +++ b/src/Server/UserBackend.h @@ -28,6 +28,7 @@ #include <Net/Exception.h> #include <map> +#include <set> #include <string> #include <boost/smart_ptr.hpp> @@ -52,10 +53,31 @@ class UserBackend { throw(Net::Exception(Net::Exception::NOT_IMPLEMENTED)); } + virtual boost::shared_ptr<Common::UserInfo> getUserInfoByName(const std::string &name _UNUSED_PARAMETER_) throw(Net::Exception) { + throw(Net::Exception(Net::Exception::NOT_IMPLEMENTED)); + } + + virtual boost::shared_ptr<std::set<unsigned long> > getUserGroups(unsigned long uid _UNUSED_PARAMETER_) throw(Net::Exception) { + throw(Net::Exception(Net::Exception::NOT_IMPLEMENTED)); + } + + virtual boost::shared_ptr<std::map<unsigned long, Common::GroupInfo> > getGroupList() throw(Net::Exception) { throw(Net::Exception(Net::Exception::NOT_IMPLEMENTED)); } + virtual std::string getGroupName(unsigned long gid _UNUSED_PARAMETER_) throw(Net::Exception) { + throw(Net::Exception(Net::Exception::NOT_IMPLEMENTED)); + } + + virtual unsigned long getGroupId(const std::string &name _UNUSED_PARAMETER_) throw(Net::Exception) { + throw(Net::Exception(Net::Exception::NOT_IMPLEMENTED)); + } + + virtual boost::shared_ptr<std::set<unsigned long> > getGroupUsers(unsigned long gid _UNUSED_PARAMETER_) throw(Net::Exception) { + throw(Net::Exception(Net::Exception::NOT_IMPLEMENTED)); + } + // TODO Better interface... virtual void setPassword(unsigned long uid _UNUSED_PARAMETER_, const std::string &password _UNUSED_PARAMETER_) throw(Net::Exception) { throw(Net::Exception(Net::Exception::NOT_IMPLEMENTED)); diff --git a/src/Server/UserManager.cpp b/src/Server/UserManager.cpp index 7101b2c..e38f458 100644 --- a/src/Server/UserManager.cpp +++ b/src/Server/UserManager.cpp @@ -66,6 +66,38 @@ boost::shared_ptr<Common::UserInfo> UserManager::getUserInfo(unsigned long uid) throw e; } +boost::shared_ptr<Common::UserInfo> UserManager::getUserInfoByName(const std::string &name) throw(Net::Exception) { + Net::Exception e(Net::Exception::NOT_IMPLEMENTED); + + for(std::set<boost::shared_ptr<UserBackend> >::iterator backend = backends.begin(); backend != backends.end(); ++backend) { + try { + return (*backend)->getUserInfoByName(name); + } + catch(Net::Exception e2) { + if(e.getErrorCode() == Net::Exception::NOT_IMPLEMENTED && e2.getErrorCode() != Net::Exception::NOT_IMPLEMENTED) + e = e2; + } + } + + throw e; +} + +boost::shared_ptr<std::set<unsigned long> > UserManager::getUserGroups(unsigned long uid) throw(Net::Exception) { + Net::Exception e(Net::Exception::NOT_IMPLEMENTED); + + for(std::set<boost::shared_ptr<UserBackend> >::iterator backend = backends.begin(); backend != backends.end(); ++backend) { + try { + return (*backend)->getUserGroups(uid); + } + catch(Net::Exception e2) { + if(e.getErrorCode() == Net::Exception::NOT_IMPLEMENTED && e2.getErrorCode() != Net::Exception::NOT_IMPLEMENTED) + e = e2; + } + } + + throw e; +} + boost::shared_ptr<std::map<unsigned long, Common::GroupInfo> > UserManager::getGroupList() throw(Net::Exception) { Net::Exception e(Net::Exception::NOT_IMPLEMENTED); @@ -82,6 +114,54 @@ boost::shared_ptr<std::map<unsigned long, Common::GroupInfo> > UserManager::getG throw e; } +std::string UserManager::getGroupName(unsigned long gid) throw(Net::Exception) { + Net::Exception e(Net::Exception::NOT_IMPLEMENTED); + + for(std::set<boost::shared_ptr<UserBackend> >::iterator backend = backends.begin(); backend != backends.end(); ++backend) { + try { + return (*backend)->getGroupName(gid); + } + catch(Net::Exception e2) { + if(e.getErrorCode() == Net::Exception::NOT_IMPLEMENTED && e2.getErrorCode() != Net::Exception::NOT_IMPLEMENTED) + e = e2; + } + } + + throw e; +} + +unsigned long UserManager::getGroupId(const std::string &name) throw(Net::Exception) { + Net::Exception e(Net::Exception::NOT_IMPLEMENTED); + + for(std::set<boost::shared_ptr<UserBackend> >::iterator backend = backends.begin(); backend != backends.end(); ++backend) { + try { + return (*backend)->getGroupId(name); + } + catch(Net::Exception e2) { + if(e.getErrorCode() == Net::Exception::NOT_IMPLEMENTED && e2.getErrorCode() != Net::Exception::NOT_IMPLEMENTED) + e = e2; + } + } + + throw e; +} + +boost::shared_ptr<std::set<unsigned long> > UserManager::getGroupUsers(unsigned long gid) throw(Net::Exception) { + Net::Exception e(Net::Exception::NOT_IMPLEMENTED); + + for(std::set<boost::shared_ptr<UserBackend> >::iterator backend = backends.begin(); backend != backends.end(); ++backend) { + try { + return (*backend)->getGroupUsers(gid); + } + catch(Net::Exception e2) { + if(e.getErrorCode() == Net::Exception::NOT_IMPLEMENTED && e2.getErrorCode() != Net::Exception::NOT_IMPLEMENTED) + e = e2; + } + } + + throw e; +} + void UserManager::setPassword(unsigned long uid, const std::string &password) throw(Net::Exception) { Net::Exception e(Net::Exception::NOT_IMPLEMENTED); diff --git a/src/Server/UserManager.h b/src/Server/UserManager.h index 3377727..fe0ef3f 100644 --- a/src/Server/UserManager.h +++ b/src/Server/UserManager.h @@ -59,8 +59,13 @@ class UserManager : boost::noncopyable { boost::shared_ptr<std::map<unsigned long, Common::UserInfo> > getUserList() throw(Net::Exception); boost::shared_ptr<Common::UserInfo> getUserInfo(unsigned long uid) throw(Net::Exception); + boost::shared_ptr<Common::UserInfo> getUserInfoByName(const std::string &name) throw(Net::Exception); + boost::shared_ptr<std::set<unsigned long> > getUserGroups(unsigned long uid) throw(Net::Exception); boost::shared_ptr<std::map<unsigned long, Common::GroupInfo> > getGroupList() throw(Net::Exception); + std::string getGroupName(unsigned long gid) throw(Net::Exception); + unsigned long getGroupId(const std::string &name) throw(Net::Exception); + boost::shared_ptr<std::set<unsigned long> > getGroupUsers(unsigned long gid) throw(Net::Exception); void setPassword(unsigned long uid, const std::string &password) throw(Net::Exception); |