From 7ef4f9a16f96b36ff135aadac859ee37fccda384 Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Tue, 16 Dec 2014 10:48:20 +0100 Subject: [PATCH] Implement cynara_admin_erase() in admin API layer 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 | 2 ++ src/admin/api/admin-api.cpp | 32 +++++++++++++++++++++++++++++++- src/admin/logic/Logic.cpp | 6 ++++++ src/admin/logic/Logic.h | 3 +++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/admin/api/ApiInterface.h b/src/admin/api/ApiInterface.h index 6628b2c..89ac978 100644 --- a/src/admin/api/ApiInterface.h +++ b/src/admin/api/ApiInterface.h @@ -54,6 +54,8 @@ public: const PolicyKey &key, PolicyResult &result) = 0; virtual int listPolicies(const PolicyBucketId &bucket, const PolicyKey &filter, std::vector &policies) = 0; + virtual int erasePolicies(const PolicyBucketId &startBucket, bool recursive, + const PolicyKey &filter) = 0; }; diff --git a/src/admin/api/admin-api.cpp b/src/admin/api/admin-api.cpp index 55fc4db..401df51 100644 --- a/src/admin/api/admin-api.cpp +++ b/src/admin/api/admin-api.cpp @@ -302,7 +302,7 @@ int cynara_admin_list_policies(struct cynara_admin *p_cynara_admin, const char * } std::vector 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)); + }); +} diff --git a/src/admin/logic/Logic.cpp b/src/admin/logic/Logic.cpp index 7fef282..3a5654c 100644 --- a/src/admin/logic/Logic.cpp +++ b/src/admin/logic/Logic.cpp @@ -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 diff --git a/src/admin/logic/Logic.h b/src/admin/logic/Logic.h index 3469593..584d35d 100644 --- a/src/admin/logic/Logic.h +++ b/src/admin/logic/Logic.h @@ -52,6 +52,9 @@ public: const PolicyKey &key, PolicyResult &result); virtual int listPolicies(const PolicyBucketId &bucket, const PolicyKey &filter, std::vector &policies); + virtual int erasePolicies(const PolicyBucketId &startBucket, bool recursive, + const PolicyKey &filter); + }; } // namespace Cynara -- 2.7.4