Add adminCheck() method prototype in admin Logic 51/27551/5
authorLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Mon, 15 Sep 2014 17:16:17 +0000 (19:16 +0200)
committerLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Thu, 18 Sep 2014 16:15:17 +0000 (18:15 +0200)
Implement external API using newly added method.

Change-Id: If086d8e33caaec87da5cbb2c25e6dd4163c01048

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

index eb2b17b..fa858a6 100644 (file)
@@ -46,6 +46,10 @@ public:
     virtual int insertOrUpdateBucket(const PolicyBucketId &bucket, const PolicyResult &policyResult)
                     noexcept = 0;
     virtual int removeBucket(const PolicyBucketId &bucket) noexcept = 0;
+
+    virtual int adminCheck(const PolicyBucketId &startBucket, bool recursive,
+                           const PolicyKey &key, PolicyResult &result) noexcept = 0;
+
 };
 
 } // namespace Cynara
index 00cae0b..ce1c7b7 100644 (file)
@@ -22,7 +22,9 @@
 
 #include <map>
 #include <new>
+#include <stdexcept>
 #include <string>
+#include <string.h>
 #include <vector>
 
 #include <common.h>
@@ -175,7 +177,7 @@ int cynara_admin_set_bucket(struct cynara_admin *p_cynara_admin, const char *buc
 
 CYNARA_API
 int cynara_admin_check(struct cynara_admin *p_cynara_admin,
-                       const char *start_bucket, const int recursive UNUSED,
+                       const char *start_bucket, const int recursive,
                        const char *client, const char *user, const char *privilege,
                        int *result, char **result_extra) {
     if (!p_cynara_admin || !p_cynara_admin->impl)
@@ -187,6 +189,28 @@ int cynara_admin_check(struct cynara_admin *p_cynara_admin,
     if (!result || !result_extra)
         return CYNARA_ADMIN_API_INVALID_PARAM;
 
-    //just mock-up
+    Cynara::PolicyResult policyResult;
+
+    try {
+        int ret = p_cynara_admin->impl->adminCheck(start_bucket, recursive != 0,
+                                                   Cynara::PolicyKey(client, user, privilege),
+                                                   policyResult);
+        if (ret != CYNARA_ADMIN_API_SUCCESS)
+            return ret;
+    } catch (const std::bad_alloc &ex) {
+        return CYNARA_ADMIN_API_OUT_OF_MEMORY;
+    } catch (const std::length_error &ex) {
+        return CYNARA_ADMIN_API_INVALID_PARAM;
+    }
+
+    char *str = nullptr;
+    if (!policyResult.metadata().empty()) {
+        str = strdup(policyResult.metadata().c_str());
+        if (!str)
+            return CYNARA_ADMIN_API_OUT_OF_MEMORY;
+    }
+    *result = static_cast<int>(policyResult.policyType());
+    *result_extra = str;
+
     return CYNARA_ADMIN_API_SUCCESS;
-}
\ No newline at end of file
+}
index 0934729..93cc43f 100644 (file)
@@ -114,4 +114,10 @@ int Logic::removeBucket(const PolicyBucketId &bucket) noexcept {
     return askCynaraAndInterpreteCodeResponse<RemoveBucketRequest>(bucket);
 }
 
+int Logic::adminCheck(const PolicyBucketId &startBucket UNUSED, bool recursive UNUSED,
+                      const PolicyKey &key UNUSED, PolicyResult &result UNUSED) noexcept {
+    //just mock-up
+    return CYNARA_ADMIN_API_SUCCESS;
+}
+
 } // namespace Cynara
index 2d349f3..b31cbec 100644 (file)
@@ -48,6 +48,8 @@ public:
                     noexcept;
     virtual int removeBucket(const PolicyBucketId &bucket) noexcept;
 
+    virtual int adminCheck(const PolicyBucketId &startBucket, bool recursive,
+                           const PolicyKey &key, PolicyResult &result) noexcept;
 };
 
 } // namespace Cynara