From: Pawel Andruszkiewicz Date: Wed, 1 Jul 2015 07:26:35 +0000 (+0200) Subject: [KeyManager] Implementation of getData(). X-Git-Tag: submit/tizen/20150702.103311^2~1^2~40 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=74a7dd5f3062e0ccc5764e1dbf8902442590d80c;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [KeyManager] Implementation of getData(). Change-Id: I08bd75216e6d4fe9b6d30df65fbabe73b967b41a Signed-off-by: Pawel Andruszkiewicz --- diff --git a/src/keymanager/keymanager_instance.cc b/src/keymanager/keymanager_instance.cc index dc8fad11..4894f82b 100755 --- a/src/keymanager/keymanager_instance.cc +++ b/src/keymanager/keymanager_instance.cc @@ -141,6 +141,10 @@ std::string KeyTypeToString(ckmc_key_type_e type) { RawBuffer ToRawBuffer(const ckmc_key_s* key) { return RawBuffer(key->raw_key, key->raw_key + key->key_size); +}// + +RawBuffer ToRawBuffer(const ckmc_raw_buffer_s* buffer) { + return RawBuffer(buffer->data, buffer->data + buffer->size); } typedef int (*AliasListFunction)(ckmc_alias_list_s**); @@ -501,6 +505,47 @@ void KeyManagerInstance::SaveData(const picojson::value& args, void KeyManagerInstance::GetData(const picojson::value& args, picojson::object& out) { LoggerD("Enter"); + + const auto& data_alias = args.get("name").get(); + const auto& password_value = args.get("password"); + + std::string password; + + if (password_value.is()) { + password = password_value.get(); + } + + ckmc_raw_buffer_s* data = nullptr; + int ret = ckmc_get_data(data_alias.c_str(), password.c_str(), &data); + + if (CKMC_ERROR_NONE == ret) { + picojson::object result; + + result["name"] = picojson::value(data_alias); + result["password"] = picojson::value(password); + // if key was retrieved it is extractable from DB + result["extractable"] = picojson::value(true); + result["rawData"] = picojson::value(RawBufferToBase64(ToRawBuffer(data))); + + ckmc_buffer_free(data); + ReportSuccess(picojson::value{result}, out); + } else { + LoggerE("Failed to get data: %d", ret); + + PlatformResult error(ErrorCode::UNKNOWN_ERR, "Failed to get key"); + + switch (ret) { + case CKMC_ERROR_DB_ALIAS_UNKNOWN: + error = PlatformResult(ErrorCode::NOT_FOUND_ERR, "Failed to find key"); + break; + + case CKMC_ERROR_INVALID_PARAMETER: + error = PlatformResult(ErrorCode::INVALID_VALUES_ERR, "Input parameter is invalid"); + break; + } + + ReportError(error, &out); + } } void KeyManagerInstance::CreateSignature(const picojson::value& args,