This change makes client API functions compatible with return type.
Change-Id: I3973b66e27060dbc4c9374840de5182bde314121
ApiInterface() = default;
virtual ~ApiInterface() = default;
- virtual cynara_api_result check(const std::string &client, const std::string &session,
- const std::string &user, const std::string &privilege) = 0;
+ virtual int check(const std::string &client, const std::string &session,
+ const std::string &user, const std::string &privilege) = 0;
};
} // namespace Cynara
int cynara_initialize(cynara **pp_cynara, const cynara_configuration *p_conf UNUSED)
{
if (!pp_cynara)
- return cynara_api_result::CYNARA_API_INVALID_PARAM;
+ return CYNARA_API_INVALID_PARAM;
try {
*pp_cynara = new cynara(new Cynara::Logic);
} catch (const std::bad_alloc &ex) {
- return cynara_api_result::CYNARA_API_OUT_OF_MEMORY;
+ return CYNARA_API_OUT_OF_MEMORY;
}
init_log();
LOGD("Cynara client initialized");
- return cynara_api_result::CYNARA_API_SUCCESS;
+ return CYNARA_API_SUCCESS;
}
CYNARA_API
{
delete p_cynara;
- return cynara_api_result::CYNARA_API_SUCCESS;
+ return CYNARA_API_SUCCESS;
}
CYNARA_API
const char *privilege)
{
if(!p_cynara || !p_cynara->impl)
- return cynara_api_result::CYNARA_API_INVALID_PARAM;
+ return CYNARA_API_INVALID_PARAM;
if(!client || !client_session || !user || !privilege)
- return cynara_api_result::CYNARA_API_INVALID_PARAM;
+ return CYNARA_API_INVALID_PARAM;
return p_cynara->impl->check(client, client_session, user, privilege);
}
class ResultGetterInterface {
public:
- virtual cynara_api_result requestResult(const PolicyKey &key, PolicyResult &result) noexcept = 0;
+ virtual int requestResult(const PolicyKey &key, PolicyResult &result) noexcept = 0;
virtual ~ResultGetterInterface() = default;
};
public:
virtual bool isCacheable(const PolicyResult &result) noexcept = 0;
virtual bool isUsable(const PolicyResult &result) noexcept = 0;
- virtual cynara_api_result toResult(const PolicyResult &result) noexcept = 0;
+ virtual int toResult(const PolicyResult &result) noexcept = 0;
virtual ~InterpreterInterface() = default;
};
class PluginCache {
public:
PluginCache(ResultGetterInterfacePtr getter) : m_getter(getter) {}
- virtual cynara_api_result get(const std::string &session, const PolicyKey &key) = 0;
+ virtual int get(const std::string &session, const PolicyKey &key) = 0;
+
void registerPlugin(const PolicyType policyType, InterpreterInterfacePtr plugin) {
m_plugins[policyType] = plugin;
}
+
virtual void clear(void) {
m_plugins.clear();
}
+
virtual ~PluginCache() = default;
protected:
namespace Cynara {
-cynara_api_result CapacityCache::get(const std::string &session, const PolicyKey &key) {
+int CapacityCache::get(const std::string &session, const PolicyKey &key) {
//This can be very time heavy. This part is welcomed to be optimized.
if (session != m_session) {
LOGD("Session changed from %s to %s.", m_session.c_str(), session.c_str());
if (pluginIt == m_plugins.end()) {
LOGE("No plugin registered for given PolicyType : %" PRIu16,
resultIt->second.first.policyType());
- return cynara_api_result::CYNARA_API_ACCESS_DENIED;
+ return CYNARA_API_ACCESS_DENIED;
}
//Is it still usable?
m_keyValue.erase(value_it);
}
-cynara_api_result CapacityCache::update(const PolicyKey &key) {
- cynara_api_result ret;
+int CapacityCache::update(const PolicyKey &key) {
+ int ret;
PolicyResult result;
- if ((ret = m_getter->requestResult(key, result)) != cynara_api_result::CYNARA_API_SUCCESS) {
+ if ((ret = m_getter->requestResult(key, result)) != CYNARA_API_SUCCESS) {
LOGE("Error fetching new entry.");
return ret;
}
if (pluginIt == m_plugins.end()) {
LOGE("No registered plugin for given PolicyType: %" PRIu16,
result.policyType());
- return cynara_api_result::CYNARA_API_ACCESS_DENIED;
+ return CYNARA_API_ACCESS_DENIED;
}
auto plugin = pluginIt->second;
PluginCache(getter),
m_capacity(capacity) {}
- cynara_api_result get(const std::string &session,
- const PolicyKey &key);
+ int get(const std::string &session, const PolicyKey &key);
void clear(void);
private:
static std::string keyToString(const PolicyKey &key);
void evict(void);
- cynara_api_result update(const PolicyKey &key);
+ int update(const PolicyKey &key);
std::size_t m_capacity;
std::string m_session;
bool isCacheable(const PolicyResult &result UNUSED) noexcept {
return true;
}
- cynara_api_result toResult(const PolicyResult &result) noexcept {
+ int toResult(const PolicyResult &result) noexcept {
if (result.policyType() == PredefinedPolicyType::ALLOW)
- return cynara_api_result::CYNARA_API_SUCCESS;
+ return CYNARA_API_SUCCESS;
else
- return cynara_api_result::CYNARA_API_ACCESS_DENIED;
+ return CYNARA_API_ACCESS_DENIED;
}
};
namespace Cynara {
-cynara_api_result PolicyGetter::requestResult(const PolicyKey &key, PolicyResult &result) noexcept {
+int PolicyGetter::requestResult(const PolicyKey &key, PolicyResult &result) noexcept {
ProtocolFrameSequenceNumber sequenceNumber = generateSequenceNumber();
//Ask cynara service
ResponsePtr response = m_socketClient->askCynaraServer(request);
if (!response) {
LOGW("Disconnected by cynara server.");
- return cynara_api_result::CYNARA_API_SERVICE_NOT_AVAILABLE;
+ return CYNARA_API_SERVICE_NOT_AVAILABLE;
}
checkResponse = std::dynamic_pointer_cast<CheckResponse>(response);
if (!checkResponse) {
LOGC("Critical error. Casting Response to CheckResponse failed.");
- return cynara_api_result::CYNARA_API_ACCESS_DENIED;
+ return CYNARA_API_ACCESS_DENIED;
}
LOGD("checkResponse: policyType = %" PRIu16 ", metadata = %s",
checkResponse->m_resultRef.metadata().c_str());
} catch (const ServerConnectionErrorException &ex) {
LOGE("Cynara service not available.");
- return cynara_api_result::CYNARA_API_SERVICE_NOT_AVAILABLE;
+ return CYNARA_API_SERVICE_NOT_AVAILABLE;
}
result = checkResponse->m_resultRef;
- return cynara_api_result::CYNARA_API_SUCCESS;
+ return CYNARA_API_SUCCESS;
}
} // namespace Cynara
class PolicyGetter : public ResultGetterInterface {
public:
PolicyGetter(const SocketClientPtr &socketClient) : m_socketClient(socketClient) {}
- cynara_api_result requestResult(const PolicyKey &key, PolicyResult &result) noexcept;
+ int requestResult(const PolicyKey &key, PolicyResult &result) noexcept;
private:
ProtocolFrameSequenceNumber generateSequenceNumber(void) {
m_cache->registerPlugin(PredefinedPolicyType::BUCKET, naiveInterpreter);
}
-cynara_api_result Logic::check(const std::string &client, const std::string &session,
- const std::string &user, const std::string &privilege) noexcept
+int Logic::check(const std::string &client, const std::string &session, const std::string &user,
+ const std::string &privilege) noexcept
{
PolicyKey key(client, user, privilege);
auto ret = m_cache->get(session, key);
- if (ret == cynara_api_result::CYNARA_API_SERVICE_NOT_AVAILABLE)
+ if (ret == CYNARA_API_SERVICE_NOT_AVAILABLE)
onDisconnected();
return ret;
}
Logic();
virtual ~Logic() = default;
- virtual cynara_api_result check(const std::string &client, const std::string &session,
- const std::string &user, const std::string &privilege) noexcept;
+ virtual int check(const std::string &client, const std::string &session,
+ const std::string &user, const std::string &privilege) noexcept;
};
} // namespace Cynara
* @{
*/
-enum cynara_api_result
-{
/*! \brief indicating the result of the one specific API is successful or access is allowed */
- CYNARA_API_SUCCESS,
+#define CYNARA_API_SUCCESS 0
/*! \brief indicating that access that was checked is denied */
- CYNARA_API_ACCESS_DENIED,
+#define CYNARA_API_ACCESS_DENIED -1
/*! \brief indicating system is running out of memory state */
- CYNARA_API_OUT_OF_MEMORY,
+#define CYNARA_API_OUT_OF_MEMORY -2
/*! \brief indicating the API's parameter is malformed */
- CYNARA_API_INVALID_PARAM,
+#define CYNARA_API_INVALID_PARAM -3
/*! \brief service not available */
- CYNARA_API_SERVICE_NOT_AVAILABLE
-};
+#define CYNARA_API_SERVICE_NOT_AVAILABLE -4
/** @}*/
#ifdef __cplusplus