Implement administrating request in Cynara service Logic class 68/24668/3
authorLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Thu, 17 Jul 2014 18:09:37 +0000 (20:09 +0200)
committerLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Fri, 18 Jul 2014 07:45:52 +0000 (09:45 +0200)
Change-Id: Ia4b1fe57ae2dc5a74565bf6f020cd14e72da19e8

src/service/logic/Logic.cpp
src/service/logic/Logic.h

index a7c66d5..cd6e410 100644 (file)
 #include <log/log.h>
 #include <common.h>
 #include <exceptions/PluginNotFoundException.h>
+#include <exceptions/BucketNotExistsException.h>
+#include <exceptions/DefaultBucketDeletionException.h>
 #include <signal.h>
 
 #include <main/Cynara.h>
 #include <request/CheckRequest.h>
+#include <request/InsertOrUpdateBucketRequest.h>
+#include <request/RemoveBucketRequest.h>
 #include <request/RequestContext.h>
+#include <request/SetPoliciesRequest.h>
 #include <request/SignalRequest.h>
 #include <response/CheckResponse.h>
+#include <response/CodeResponse.h>
 #include <storage/Storage.h>
 
 #include <sockets/SocketManager.h>
@@ -57,7 +63,8 @@ void Logic::execute(RequestContextPtr context UNUSED, SignalRequestPtr request)
 void Logic::execute(RequestContextPtr context, CheckRequestPtr request) {
     PolicyResult result(PredefinedPolicyType::DENY);
     if (check(context, request->key(), result)) {
-        context->returnResponse(context, std::make_shared<CheckResponse>(result, request->sequenceNumber()));
+        context->returnResponse(context, std::make_shared<CheckResponse>(result,
+                                request->sequenceNumber()));
     }
 }
 
@@ -82,4 +89,38 @@ bool Logic::check(RequestContextPtr context UNUSED, const PolicyKey &key,
     throw PluginNotFoundException(result);
 }
 
+void Logic::execute(RequestContextPtr context, InsertOrUpdateBucketRequestPtr request) {
+    m_storage->addOrUpdateBucket(request->bucketId(), request->result());
+//todo add saving to database
+    context->returnResponse(context, std::make_shared<CodeResponse>(CodeResponse::Code::OK,
+                            request->sequenceNumber()));
+}
+
+void Logic::execute(RequestContextPtr context, RemoveBucketRequestPtr request) {
+    auto code = CodeResponse::Code::OK;
+    try {
+        m_storage->deleteBucket(request->bucketId());
+//todo add saving to database
+    } catch (const BucketNotExistsException &ex) {
+        code = CodeResponse::Code::NO_BUCKET;
+    } catch (const DefaultBucketDeletionException &ex) {
+        code = CodeResponse::Code::NOT_ALLOWED;
+    }
+    context->returnResponse(context, std::make_shared<CodeResponse>(code,
+                            request->sequenceNumber()));
+}
+
+void Logic::execute(RequestContextPtr context, SetPoliciesRequestPtr request) {
+    auto code = CodeResponse::Code::OK;
+    try {
+        m_storage->insertPolicies(request->policiesToBeInsertedOrUpdated());
+        m_storage->deletePolicies(request->policiesToBeRemoved());
+//todo add saving to database
+    } catch (const BucketNotExistsException &ex) {
+        code = CodeResponse::Code::NO_BUCKET;
+    }
+    context->returnResponse(context, std::make_shared<CodeResponse>(code,
+                            request->sequenceNumber()));
+}
+
 } // namespace Cynara
index a9d6cb9..e21419a 100644 (file)
@@ -51,6 +51,9 @@ public:
     }
 
     virtual void execute(RequestContextPtr context, CheckRequestPtr request);
+    virtual void execute(RequestContextPtr context, InsertOrUpdateBucketRequestPtr request);
+    virtual void execute(RequestContextPtr context, RemoveBucketRequestPtr request);
+    virtual void execute(RequestContextPtr context, SetPoliciesRequestPtr request);
     virtual void execute(RequestContextPtr context, SignalRequestPtr request);
 
 private: