Implement cynara_admin_erase() in admin API layer 85/32485/2
authorLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Tue, 16 Dec 2014 09:48:20 +0000 (10:48 +0100)
committerLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Mon, 22 Dec 2014 04:58:49 +0000 (05:58 +0100)
Implementation:
* checks validity of parameters,
* translates parameters to C++ objects used in higher layers,
* catches all exceptions,
* runs erasePolicies() method from admin Logic object.

Change-Id: I6d4f0be5f20e283c41839b9618da2dac1c36f858

src/admin/api/ApiInterface.h
src/admin/api/admin-api.cpp
src/admin/logic/Logic.cpp
src/admin/logic/Logic.h

index 6628b2c..89ac978 100644 (file)
@@ -54,6 +54,8 @@ public:
                            const PolicyKey &key, PolicyResult &result) = 0;
     virtual int listPolicies(const PolicyBucketId &bucket, const PolicyKey &filter,
                              std::vector<Policy> &policies) = 0;
+    virtual int erasePolicies(const PolicyBucketId &startBucket, bool recursive,
+                              const PolicyKey &filter) = 0;
 
 };
 
index 55fc4db..401df51 100644 (file)
@@ -302,7 +302,7 @@ int cynara_admin_list_policies(struct cynara_admin *p_cynara_admin, const char *
         }
 
         std::vector<Cynara::Policy> policiesVector;
-        int ret = p_cynara_admin->impl->listPolicies(bucket, Cynara::PolicyKey(clientStr, userStr,
+        int ret = p_cynara_admin->impl->listPolicies(bucketId, Cynara::PolicyKey(clientStr, userStr,
                                                      privilegeStr), policiesVector);
         if (ret != CYNARA_API_SUCCESS)
             return ret;
@@ -310,3 +310,33 @@ int cynara_admin_list_policies(struct cynara_admin *p_cynara_admin, const char *
         return createPoliciesArray(bucket, policiesVector, policies);
     });
 }
+
+CYNARA_API
+int cynara_admin_erase(struct cynara_admin *p_cynara_admin,
+                       const char *start_bucket, const int recursive,
+                       const char *client, const char *user, const char *privilege) {
+    if (!p_cynara_admin || !p_cynara_admin->impl)
+        return CYNARA_API_INVALID_PARAM;
+    if (!start_bucket || !client || !user || !privilege)
+        return CYNARA_API_INVALID_PARAM;
+
+    return Cynara::tryCatch([&]() {
+        Cynara::PolicyKeyFeature::ValueType clientStr;
+        Cynara::PolicyKeyFeature::ValueType userStr;
+        Cynara::PolicyKeyFeature::ValueType privilegeStr;
+        Cynara::PolicyBucketId startBucket;
+        try {
+            clientStr = client;
+            userStr = user;
+            privilegeStr = privilege;
+            startBucket = start_bucket;
+        } catch (const std::length_error &e) {
+            LOGE("%s", e.what());
+            return CYNARA_API_INVALID_PARAM;
+        }
+
+        return p_cynara_admin->impl->erasePolicies(startBucket, recursive != 0,
+                                                   Cynara::PolicyKey(clientStr, userStr,
+                                                   privilegeStr));
+    });
+}
index 7fef282..3a5654c 100644 (file)
@@ -198,4 +198,10 @@ int Logic::listPolicies(const PolicyBucketId &bucket, const PolicyKey &filter,
     return CYNARA_API_SUCCESS;
 }
 
+int Logic::erasePolicies(const PolicyBucketId &startBucket UNUSED, bool recursive UNUSED,
+                         const PolicyKey &filter UNUSED) {
+    //todo implement erase
+    return CYNARA_API_SUCCESS;
+}
+
 } // namespace Cynara
index 3469593..584d35d 100644 (file)
@@ -52,6 +52,9 @@ public:
                            const PolicyKey &key, PolicyResult &result);
     virtual int listPolicies(const PolicyBucketId &bucket, const PolicyKey &filter,
                              std::vector<Policy> &policies);
+    virtual int erasePolicies(const PolicyBucketId &startBucket, bool recursive,
+                              const PolicyKey &filter);
+
 };
 
 } // namespace Cynara