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");
 }