diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2009-08-27 17:27:58 +0200 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2009-08-27 17:27:58 +0200 |
commit | 82ef58fb3d0bdf6ce7d13f42cca30d03b24973c6 (patch) | |
tree | 4508a31968224772e70fd9df38f11b3a2461c55e /src/Common/AuthManager.cpp | |
parent | 854e90be061166d1619a74cbfdc7e384fc700125 (diff) | |
download | mad-82ef58fb3d0bdf6ce7d13f42cca30d03b24973c6.tar mad-82ef58fb3d0bdf6ce7d13f42cca30d03b24973c6.zip |
AuthProvider hinzugefügt
AuthBackendFile in AuthProviderFile und AuthBackendPassword aufgeteilt
Diffstat (limited to 'src/Common/AuthManager.cpp')
-rw-r--r-- | src/Common/AuthManager.cpp | 50 |
1 files changed, 40 insertions, 10 deletions
diff --git a/src/Common/AuthManager.cpp b/src/Common/AuthManager.cpp index d21909d..c4cace7 100644 --- a/src/Common/AuthManager.cpp +++ b/src/Common/AuthManager.cpp @@ -25,31 +25,54 @@ namespace Mad { namespace Common { -const std::vector<std::string> AuthManager::DenyBackend::methods; +void AuthManager::setProvider(boost::shared_ptr<AuthProvider> newProvider) { + boost::lock_guard<boost::shared_mutex> lock(mutex); + + provider = newProvider; +} + +void AuthManager::unsetProvider(boost::shared_ptr<AuthProvider> oldProvider) { + boost::lock_guard<boost::shared_mutex> lock(mutex); + + if(oldProvider == provider) + provider.reset(); +} -void AuthManager::registerBackend(boost::shared_ptr<AuthBackend> newBackend) { +void AuthManager::registerBackend(boost::shared_ptr<AuthBackend> backend) { boost::lock_guard<boost::shared_mutex> lock(mutex); - backend = newBackend; + methods.insert(backend->getMethodName()); + backends.insert(std::make_pair(backend->getMethodName(), backend)); } -void AuthManager::unregisterBackend(boost::shared_ptr<AuthBackend> oldBackend) { +void AuthManager::unregisterBackend(boost::shared_ptr<AuthBackend> backend) { boost::lock_guard<boost::shared_mutex> lock(mutex); - if(oldBackend == backend) - backend = denyBackend; + std::map<std::string, boost::shared_ptr<AuthBackend> >::iterator backendIt = backends.find(backend->getMethodName()); + if(backendIt == backends.end() || backendIt->second != backend) + return; + + methods.erase(backend->getMethodName()); + backends.erase(backendIt); } -std::vector<std::string> AuthManager::getMethods() { +std::set<std::string> AuthManager::getMethods() { boost::shared_lock<boost::shared_mutex> lock(mutex); - return backend->getMethods(); + return methods; } std::vector<std::string> AuthManager::getSubMethods(const std::string &method) throw(Core::Exception) { boost::shared_lock<boost::shared_mutex> lock(mutex); - return backend->getSubMethods(method); + std::map<std::string, boost::shared_ptr<AuthBackend> >::iterator backend = backends.find(method); + if(backend == backends.end()) + throw Core::Exception(Core::Exception::NOT_IMPLEMENTED); + + if(!provider) + throw Core::Exception(Core::Exception::NOT_AVAILABLE); + + return backend->second->getSubMethods(provider); } boost::shared_ptr<AuthContext> AuthManager::authenticate(const std::string &method, const std::string &subMethod, const std::string &user, @@ -58,7 +81,14 @@ boost::shared_ptr<AuthContext> AuthManager::authenticate(const std::string &meth response.clear(); - return backend->authenticate(method, subMethod, user, data, response, context); + std::map<std::string, boost::shared_ptr<AuthBackend> >::iterator backend = backends.find(method); + if(backend == backends.end()) + throw Core::Exception(Core::Exception::NOT_IMPLEMENTED); + + if(!provider) + throw Core::Exception(Core::Exception::NOT_AVAILABLE); + + return backend->second->authenticate(provider, subMethod, user, data, response, context); } } |