#include <request/pointers.h>
#include <request/RemoveBucketRequest.h>
#include <request/SetPoliciesRequest.h>
-#include <response/CheckResponse.h>
+#include <response/AdminCheckResponse.h>
#include <response/CodeResponse.h>
#include <response/ListResponse.h>
#include <response/pointers.h>
ProtocolFrameSequenceNumber sequenceNumber = generateSequenceNumber();
//Ask cynara service
- CheckResponsePtr checkResponse;
+ AdminCheckResponsePtr adminCheckResponse;
RequestPtr request = std::make_shared<AdminCheckRequest>(key, startBucket, recursive,
sequenceNumber);
return CYNARA_API_SERVICE_NOT_AVAILABLE;
}
- checkResponse = std::dynamic_pointer_cast<CheckResponse>(response);
- if (!checkResponse) {
- LOGC("Casting Response to CheckResponse failed.");
+ adminCheckResponse = std::dynamic_pointer_cast<AdminCheckResponse>(response);
+ if (!adminCheckResponse) {
+ LOGC("Casting Response to AdminCheckResponse failed.");
return CYNARA_API_UNKNOWN_ERROR;
}
- LOGD("checkResponse: policyType [%" PRIu16 "], metadata <%s>",
- checkResponse->m_resultRef.policyType(),
- checkResponse->m_resultRef.metadata().c_str());
+ LOGD("AdminCheckResponse: policyType [%" PRIu16 "], metadata <%s>, bucketValid [%d]",
+ adminCheckResponse->result().policyType(), adminCheckResponse->result().metadata().c_str(),
+ static_cast<int>(adminCheckResponse->isBucketValid()));
- result = checkResponse->m_resultRef;
+ if (!adminCheckResponse->isBucketValid()) {
+ LOGE("Bucket <%s> provided as startBucket in adminCheck does not exist in cynara database",
+ startBucket.c_str());
+ return CYNARA_API_BUCKET_NOT_FOUND;
+ }
+
+ result = adminCheckResponse->result();
return CYNARA_API_SUCCESS;
}
#include <request/RequestContext.h>
#include <request/SetPoliciesRequest.h>
#include <response/AdminCheckResponse.h>
-#include <response/CheckResponse.h>
#include <response/CodeResponse.h>
#include <response/ListResponse.h>
#include <types/PolicyKey.h>
m_frameHeader.sequenceNumber());
}
-ResponsePtr ProtocolAdmin::deserializeCheckResponse(void) {
- PolicyType result;
- PolicyResult::PolicyMetadata additionalInfo;
-
- ProtocolDeserialization::deserialize(m_frameHeader, result);
- ProtocolDeserialization::deserialize(m_frameHeader, additionalInfo);
-
- const PolicyResult policyResult(result, additionalInfo);
-
- LOGD("Deserialized CheckResponse: result [%" PRIu16 "], metadata <%s>",
- policyResult.policyType(), policyResult.metadata().c_str());
-
- return std::make_shared<CheckResponse>(policyResult, m_frameHeader.sequenceNumber());
-}
-
ResponsePtr ProtocolAdmin::deserializeCodeResponse(void) {
ProtocolResponseCode responseCode;
ProtocolDeserialization::deserialize(m_frameHeader, responseCode);
switch (opCode) {
case OpAdminCheckPolicyResponse:
return deserializeAdminCheckResponse();
- case OpCheckPolicyResponse:
- return deserializeCheckResponse();
case OpCodeResponse:
return deserializeCodeResponse();
case OpListResponse:
ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue()));
}
-void ProtocolAdmin::execute(RequestContextPtr context, CheckResponsePtr response) {
- LOGD("Serializing CheckResponse: op [%" PRIu8 "], sequenceNumber [%" PRIu16 "], "
- "policyType [%" PRIu16 "], metadata <%s>", OpCheckPolicyResponse,
- response->sequenceNumber(), response->m_resultRef.policyType(),
- response->m_resultRef.metadata().c_str());
-
- ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(
- response->sequenceNumber());
-
- ProtocolSerialization::serialize(frame, OpCheckPolicyResponse);
- ProtocolSerialization::serialize(frame, response->m_resultRef.policyType());
- ProtocolSerialization::serialize(frame, response->m_resultRef.metadata());
-
- ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue()));
-}
-
void ProtocolAdmin::execute(RequestContextPtr context, CodeResponsePtr response) {
LOGD("Serializing CodeResponse: op [%" PRIu8 "], sequenceNumber [%" PRIu16 "], "
"code [%" PRIu16 "]", OpCodeResponse, response->sequenceNumber(), response->m_code);
virtual void execute(RequestContextPtr context, SetPoliciesRequestPtr request);
virtual void execute(RequestContextPtr context, AdminCheckResponsePtr response);
- virtual void execute(RequestContextPtr context, CheckResponsePtr response);
virtual void execute(RequestContextPtr context, CodeResponsePtr response);
virtual void execute(RequestContextPtr context, ListResponsePtr response);
RequestPtr deserializeSetPoliciesRequest(void);
ResponsePtr deserializeAdminCheckResponse(void);
- ResponsePtr deserializeCheckResponse(void);
ResponsePtr deserializeCodeResponse(void);
ResponsePtr deserializeListResponse(void);
};
#include <request/RequestContext.h>
#include <request/SetPoliciesRequest.h>
#include <request/SignalRequest.h>
+#include <response/AdminCheckResponse.h>
#include <response/AgentRegisterResponse.h>
#include <response/CancelResponse.h>
#include <response/CheckResponse.h>
}
void Logic::execute(RequestContextPtr context, AdminCheckRequestPtr request) {
- PolicyResult result = m_storage->checkPolicy(request->key(), request->startBucket(),
- request->recursive());
+ PolicyResult result;
+ bool bucketValid = true;
+ try {
+ result = m_storage->checkPolicy(request->key(), request->startBucket(),
+ request->recursive());
+ } catch (const BucketNotExistsException &ex) {
+ bucketValid = false;
+ }
- context->returnResponse(context, std::make_shared<CheckResponse>(result,
+ context->returnResponse(context, std::make_shared<AdminCheckResponse>(result, bucketValid,
request->sequenceNumber()));
}