You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@milagro.apache.org by sa...@apache.org on 2016/09/10 13:37:54 UTC
[10/22] incubator-milagro-mfa-sdk-core git commit: Add DeleteUser
function for specific backend.
Add DeleteUser function for specific backend.
Implemented DeleteUser(user, backend) function.
Fixed bug in shared_ptr class.
Added test for the DeleteUser(user, backend) function.
Closes: MAASMOB-59
Project: http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/commit/5c5a025f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/tree/5c5a025f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/diff/5c5a025f
Branch: refs/heads/master
Commit: 5c5a025f04a43113e546adadbdf78a3ad7963102
Parents: e79c120
Author: slav.klenov <sl...@certivox.com>
Authored: Mon Apr 25 17:45:09 2016 +0300
Committer: slav.klenov <sl...@certivox.com>
Committed: Mon Apr 25 17:45:09 2016 +0300
----------------------------------------------------------------------
src/cv_shared_ptr.h | 24 ++++++++++++--------
src/mpin_sdk.cpp | 57 ++++++++++++++++++++++++++++++++++++-----------
src/mpin_sdk.h | 6 ++++-
tests/unit_tests.cpp | 5 ++++-
4 files changed, 68 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/5c5a025f/src/cv_shared_ptr.h
----------------------------------------------------------------------
diff --git a/src/cv_shared_ptr.h b/src/cv_shared_ptr.h
index 6f803c6..8201e18 100644
--- a/src/cv_shared_ptr.h
+++ b/src/cv_shared_ptr.h
@@ -185,15 +185,6 @@ public:
return *operator->();
}
- operator bool() const
- {
- if (!holder)
- {
- return false;
- }
- return holder->target != NULL;
- }
-
element_type* get() const
{
return operator->();
@@ -203,6 +194,21 @@ private:
Holder* holder;
};
+template <typename T, typename U> bool operator==(const shared_ptr<T>& lhs, const shared_ptr<U>& rhs)
+{
+ return lhs.get() == rhs.get();
+}
+
+template <typename T, typename U> bool operator!=(const shared_ptr<T>& lhs, const shared_ptr<U>& rhs)
+{
+ return !(lhs == rhs);
+}
+
+template <typename T> bool operator<(const shared_ptr<T>& lhs, const shared_ptr<T>& rhs)
+{
+ return lhs.get() < rhs.get();
+}
+
template<typename T> shared_ptr<T> make_shared() { return shared_ptr<T>(new T()); }
template<typename T, typename Arg1> shared_ptr<T> make_shared(const Arg1& arg1) { return shared_ptr<T>(new T(arg1)); }
template<typename T, typename Arg1, typename Arg2> shared_ptr<T> make_shared(const Arg1& arg1, const Arg2& arg2) { return shared_ptr<T>(new T(arg1, arg2)); }
http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/5c5a025f/src/mpin_sdk.cpp
----------------------------------------------------------------------
diff --git a/src/mpin_sdk.cpp b/src/mpin_sdk.cpp
index dcaecbe..ad86a75 100644
--- a/src/mpin_sdk.cpp
+++ b/src/mpin_sdk.cpp
@@ -1361,8 +1361,29 @@ String MPinSDK::GetPrerollUserId(const String& accessCode)
void MPinSDK::DeleteUser(UserPtr user)
{
- UsersMap::iterator i = m_users.find(user->GetId());
- if(i == m_users.end() || user != i->second)
+ DeleteUser(user, m_RPAServer);
+}
+
+void MPinSDK::DeleteUser(INOUT UserPtr user, const String& backend)
+{
+ if(MakeBackendKey(backend) == MakeBackendKey(m_RPAServer))
+ {
+ DeleteUser(user, m_RPAServer, m_users);
+ }
+ else
+ {
+ UsersMap usersMap;
+ LoadUsersFromStorage(backend, usersMap);
+ DeleteUser(user, backend, usersMap);
+ }
+}
+
+void MPinSDK::DeleteUser(INOUT UserPtr user, const String& backend, UsersMap& usersMap)
+{
+ UsersMap::iterator i = usersMap.find(user->GetId());
+ //if(i == m_users.end() || user != i->second)
+ // TODO: Get back to the full user check after the SDK is refactored to store full user list (for all backends)
+ if(i == m_users.end())
{
return;
}
@@ -1370,9 +1391,9 @@ void MPinSDK::DeleteUser(UserPtr user)
m_crypto->DeleteRegOTT(i->second->GetMPinId());
m_crypto->DeleteToken(i->second->GetMPinId());
i->second->Invalidate();
- m_users.erase(i);
- WriteUsersToStorage();
- m_logoutData.erase(user);
+ m_logoutData.erase(i->second);
+ usersMap.erase(i);
+ WriteUsersToStorage(backend, usersMap);
}
Status MPinSDK::ListUsers(std::vector<UserPtr>& users) const
@@ -1459,7 +1480,21 @@ Status MPinSDK::CheckUserState(UserPtr user, User::State expectedState)
return Status(Status::OK);
}
-Status MPinSDK::WriteUsersToStorage()
+String MPinSDK::MakeBackendKey(const String& backendServer) const
+{
+ String backend = backendServer;
+ backend.ReplaceAll("https://", "");
+ backend.ReplaceAll("http://", "");
+ backend.TrimRight("/");
+ return backend;
+}
+
+Status MPinSDK::WriteUsersToStorage() const
+{
+ return WriteUsersToStorage(m_RPAServer, m_users);
+}
+
+Status MPinSDK::WriteUsersToStorage(const String& backendServer, const UsersMap& usersMap) const
{
IStorage* storage = m_context->GetStorage(IStorage::NONSECURE);
String data;
@@ -1475,14 +1510,12 @@ Status MPinSDK::WriteUsersToStorage()
json::Reader::Read(allBackendsObject, strIn);
}
- String backend = m_RPAServer;
- backend.ReplaceAll("https://", "");
- backend.ReplaceAll("http://", "");
+ String backend = MakeBackendKey(backendServer);
json::Object& rootObject = (json::Object&) allBackendsObject[backend];
rootObject.Clear();
- for (UsersMap::iterator i = m_users.begin(); i != m_users.end(); ++i)
+ for (UsersMap::const_iterator i = usersMap.begin(); i != usersMap.end(); ++i)
{
UserPtr user = i->second;
@@ -1557,9 +1590,7 @@ Status MPinSDK::LoadUsersFromStorage(const String& backendServer, UsersMap& user
std::istringstream str(data);
json::Reader::Read(allBackendsObject, str);
- String backend = backendServer;
- backend.ReplaceAll("https://", "");
- backend.ReplaceAll("http://", "");
+ String backend = MakeBackendKey(backendServer);
json::Object::const_iterator i = allBackendsObject.Find(backend);
if(i == allBackendsObject.End())
http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/5c5a025f/src/mpin_sdk.h
----------------------------------------------------------------------
diff --git a/src/mpin_sdk.h b/src/mpin_sdk.h
index ec69d58..f5f77b6 100644
--- a/src/mpin_sdk.h
+++ b/src/mpin_sdk.h
@@ -246,6 +246,7 @@ public:
String GetPrerollUserId(const String& accessCode);
void DeleteUser(INOUT UserPtr user);
+ void DeleteUser(INOUT UserPtr user, const String& backend);
Status ListUsers(OUT std::vector<UserPtr>& users) const;
Status ListUsers(OUT std::vector<UserPtr>& users, const String& backend) const;
Status ListBackends(OUT std::vector<String>& backends) const;
@@ -351,7 +352,10 @@ private:
bool ValidateAccessNumberChecksum(const String& accessNumber);
void AddUser(IN UserPtr user);
Status CheckUserState(IN UserPtr user, User::State expectedState);
- Status WriteUsersToStorage();
+ void DeleteUser(INOUT UserPtr user, const String& backend, UsersMap& usersMap);
+ String MakeBackendKey(const String& backendServer) const;
+ Status WriteUsersToStorage() const;
+ Status WriteUsersToStorage(const String& backendServer, const UsersMap& usersMap) const;
Status LoadUsersFromStorage();
Status LoadUsersFromStorage(const String& backendServer, UsersMap& usersMap) const;
void ListUsers(OUT std::vector<UserPtr>& users, const UsersMap& usersMap) const;
http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/5c5a025f/tests/unit_tests.cpp
----------------------------------------------------------------------
diff --git a/tests/unit_tests.cpp b/tests/unit_tests.cpp
index 6892270..055d7ee 100644
--- a/tests/unit_tests.cpp
+++ b/tests/unit_tests.cpp
@@ -194,7 +194,10 @@ BOOST_AUTO_TEST_CASE(testUsers2)
sdk.ListUsers(users, backend);
BOOST_CHECK_EQUAL(users.size(), 1);
- sdk.DeleteUser(user);
+ sdk.DeleteUser(users[0], backend);
+ users.clear();
+ sdk.ListUsers(users, backend);
+ BOOST_CHECK(users.empty());
BOOST_MESSAGE(" testUsers2 finished");
}