mirror of
https://gitee.com/openharmony/security_asset
synced 2025-02-20 16:32:41 +00:00
modify napi
Signed-off-by: 尹耀德 <yinyaode1@huawei.com> Change-Id: I4490611dff7b298d41da1771374b91771aa623a0
This commit is contained in:
parent
3a4dd47eda
commit
7d47ce99f4
@ -28,6 +28,7 @@ namespace Security {
|
||||
namespace Asset {
|
||||
|
||||
#define AS_USER_ARGS_NUM 2
|
||||
#define AS_USER_UPDATE_ARGS_NUM 2
|
||||
#define UPDATE_ARGS_NUM 2
|
||||
|
||||
#define CHECK_RESULT_BREAK(env, ret) \
|
||||
@ -63,11 +64,14 @@ napi_value CreateJsMapArray(napi_env env, const AssetResultSet &resultSet);
|
||||
|
||||
napi_status ParseParam(napi_env env, napi_callback_info info, std::vector<AssetAttr> &attrs);
|
||||
|
||||
napi_status ParseParam(napi_env env, napi_callback_info info, size_t expectArgNum, std::vector<AssetAttr> &attrs,
|
||||
std::vector<AssetAttr> &updateAttrs, bool isUpdate, bool isApplintUserId);
|
||||
napi_status ParseParam(napi_env env, napi_callback_info info, std::vector<AssetAttr> &attrs,
|
||||
std::vector<AssetAttr> &updateAttrs, size_t expectArgNum);
|
||||
|
||||
napi_value NapiEntry(napi_env env, napi_callback_info info, const char *funcName, napi_async_execute_callback execute,
|
||||
size_t expectArgNum = 1, bool isUpdate = false, bool isSpecificUserId = false);
|
||||
size_t expectArgNum = 1);
|
||||
|
||||
napi_value NapiEntryAsUser(napi_env env, napi_callback_info info, const char *funcName,
|
||||
napi_async_execute_callback execute, size_t expectArgNum = AS_USER_ARGS_NUM);
|
||||
|
||||
} // Asset
|
||||
} // Security
|
||||
|
@ -177,7 +177,7 @@ napi_value NapiAddAsUser(napi_env env, napi_callback_info info)
|
||||
AsyncContext *context = static_cast<AsyncContext *>(data);
|
||||
context->result = AssetAdd(&context->attrs[0], context->attrs.size());
|
||||
};
|
||||
return NapiEntry(env, info, __func__, execute, AS_USER_ARGS_NUM, false, true);
|
||||
return NapiEntryAsUser(env, info, __func__, execute);
|
||||
}
|
||||
|
||||
napi_value NapiRemove(napi_env env, napi_callback_info info)
|
||||
@ -212,7 +212,7 @@ napi_value NapiRemoveAsUser(napi_env env, napi_callback_info info)
|
||||
AsyncContext *context = static_cast<AsyncContext *>(data);
|
||||
context->result = AssetRemove(&context->attrs[0], context->attrs.size());
|
||||
};
|
||||
return NapiEntry(env, info, __func__, execute, AS_USER_ARGS_NUM, false, true);
|
||||
return NapiEntryAsUser(env, info, __func__, execute);
|
||||
}
|
||||
|
||||
napi_value NapiUpdate(napi_env env, napi_callback_info info)
|
||||
@ -223,7 +223,7 @@ napi_value NapiUpdate(napi_env env, napi_callback_info info)
|
||||
context->result = AssetUpdate(&context->attrs[0], context->attrs.size(),
|
||||
&context->updateAttrs[0], context->updateAttrs.size());
|
||||
};
|
||||
return NapiEntry(env, info, __func__, execute, UPDATE_ARGS_NUM, true);
|
||||
return NapiEntry(env, info, __func__, execute, UPDATE_ARGS_NUM);
|
||||
}
|
||||
|
||||
napi_value NapiUpdateSync(napi_env env, napi_callback_info info)
|
||||
@ -231,7 +231,7 @@ napi_value NapiUpdateSync(napi_env env, napi_callback_info info)
|
||||
std::vector<AssetAttr> attrs;
|
||||
std::vector<AssetAttr> updateAttrs;
|
||||
do {
|
||||
if (ParseParam(env, info, UPDATE_ARGS_NUM, attrs, updateAttrs, true, false) != napi_ok) {
|
||||
if (ParseParam(env, info, attrs, updateAttrs, UPDATE_ARGS_NUM) != napi_ok) {
|
||||
break;
|
||||
}
|
||||
int32_t result = AssetUpdate(&attrs[0], attrs.size(), &updateAttrs[0], updateAttrs.size());
|
||||
@ -250,7 +250,7 @@ napi_value NapiUpdateAsUser(napi_env env, napi_callback_info info)
|
||||
context->result = AssetUpdate(&context->attrs[0], context->attrs.size(),
|
||||
&context->updateAttrs[0], context->updateAttrs.size());
|
||||
};
|
||||
return NapiEntry(env, info, __func__, execute, UPDATE_ARGS_NUM + 1, true, true);
|
||||
return NapiEntryAsUser(env, info, __func__, execute, AS_USER_UPDATE_ARGS_NUM);
|
||||
}
|
||||
|
||||
napi_value NapiPreQuery(napi_env env, napi_callback_info info)
|
||||
@ -289,7 +289,7 @@ napi_value NapiPreQueryAsUser(napi_env env, napi_callback_info info)
|
||||
AsyncContext *context = static_cast<AsyncContext *>(data);
|
||||
context->result = AssetPreQuery(&context->attrs[0], context->attrs.size(), &context->challenge);
|
||||
};
|
||||
return NapiEntry(env, info, __func__, execute, AS_USER_ARGS_NUM, false, true);
|
||||
return NapiEntryAsUser(env, info, __func__, execute);
|
||||
}
|
||||
|
||||
napi_value NapiQuery(napi_env env, napi_callback_info info)
|
||||
@ -328,7 +328,7 @@ napi_value NapiQueryAsUser(napi_env env, napi_callback_info info)
|
||||
AsyncContext *context = static_cast<AsyncContext *>(data);
|
||||
context->result = AssetQuery(&context->attrs[0], context->attrs.size(), &context->resultSet);
|
||||
};
|
||||
return NapiEntry(env, info, __func__, execute, AS_USER_ARGS_NUM, false, true);
|
||||
return NapiEntryAsUser(env, info, __func__, execute);
|
||||
}
|
||||
|
||||
napi_value NapiPostQuery(napi_env env, napi_callback_info info)
|
||||
@ -363,7 +363,7 @@ napi_value NapiPostQueryAsUser(napi_env env, napi_callback_info info)
|
||||
AsyncContext *context = static_cast<AsyncContext *>(data);
|
||||
context->result = AssetPostQuery(&context->attrs[0], context->attrs.size());
|
||||
};
|
||||
return NapiEntry(env, info, __func__, execute, AS_USER_ARGS_NUM, false, true);
|
||||
return NapiEntryAsUser(env, info, __func__, execute);
|
||||
}
|
||||
|
||||
napi_value Register(napi_env env, napi_value exports)
|
||||
|
@ -280,6 +280,28 @@ napi_status ParseMapParam(napi_env env, napi_value arg, std::vector<AssetAttr> &
|
||||
return napi_ok;
|
||||
}
|
||||
|
||||
napi_status ParseJsArgs(napi_env env, napi_callback_info info, napi_value *value, size_t valueSize)
|
||||
{
|
||||
size_t argc = valueSize;
|
||||
NAPI_CALL_RETURN_ERR(env, napi_get_cb_info(env, info, &argc, value, nullptr, nullptr));
|
||||
NAPI_THROW_RETURN_ERR(env, argc < valueSize, SEC_ASSET_INVALID_ARGUMENT,
|
||||
"The number of arguments is insufficient.");
|
||||
return napi_ok;
|
||||
}
|
||||
|
||||
napi_status ParseJsUserId(napi_env env, napi_value arg, std::vector<AssetAttr> &attrs)
|
||||
{
|
||||
napi_valuetype type = napi_undefined;
|
||||
NAPI_CALL_RETURN_ERR(env, napi_typeof(env, arg, &type));
|
||||
NAPI_THROW_RETURN_ERR(env, type != napi_number, SEC_ASSET_INVALID_ARGUMENT, "The type of userId should be number.");
|
||||
|
||||
AssetAttr param = { 0 };
|
||||
param.tag = SEC_ASSET_TAG_USER_ID;
|
||||
NAPI_CALL_RETURN_ERR(env, napi_get_value_uint32(env, arg, ¶m.value.u32));
|
||||
attrs.push_back(param);
|
||||
return napi_ok;
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
void FreeAssetAttrs(std::vector<AssetAttr> &attrs)
|
||||
@ -343,40 +365,25 @@ napi_value CreateJsUint8Array(napi_env env, const AssetBlob &blob)
|
||||
napi_status ParseParam(napi_env env, napi_callback_info info, std::vector<AssetAttr> &attrs)
|
||||
{
|
||||
std::vector<AssetAttr> updateAttrs;
|
||||
return ParseParam(env, info, NORMAL_ARGS_NUM, attrs, updateAttrs, false, false);
|
||||
return ParseParam(env, info, attrs, updateAttrs, NORMAL_ARGS_NUM);
|
||||
}
|
||||
|
||||
napi_status ParseParam(napi_env env, napi_callback_info info, size_t expectArgNum, std::vector<AssetAttr> &attrs,
|
||||
std::vector<AssetAttr> &updateAttrs, bool isUpdate = false, bool isSpecificUserId = false)
|
||||
napi_status ParseParam(napi_env env, napi_callback_info info, std::vector<AssetAttr> &attrs,
|
||||
std::vector<AssetAttr> &updateAttrs, size_t expectArgNum)
|
||||
{
|
||||
napi_value argv[MAX_ARGS_NUM] = { 0 };
|
||||
size_t argc = expectArgNum;
|
||||
NAPI_CALL_RETURN_ERR(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
|
||||
NAPI_THROW_RETURN_ERR(env, argc < expectArgNum, SEC_ASSET_INVALID_ARGUMENT,
|
||||
"The number of arguments is insufficient.");
|
||||
size_t index = 0;
|
||||
|
||||
napi_value specificUserId = nullptr;
|
||||
// get SpecificUserId
|
||||
if (isSpecificUserId) {
|
||||
NAPI_CALL_RETURN_ERR(env, napi_get_element(env, argv[index++], 0, &specificUserId));
|
||||
napi_status ret = ParseJsArgs(env, info, argv, expectArgNum);
|
||||
if (ret != napi_ok) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
napi_status ret = ParseMapParam(env, argv[index++], attrs);
|
||||
size_t index = 0;
|
||||
ret = ParseMapParam(env, argv[index++], attrs);
|
||||
if (ret != napi_ok) {
|
||||
LOGE("Parse first map parameter failed.");
|
||||
return ret;
|
||||
}
|
||||
|
||||
// add SpecificUserId into map
|
||||
if (isSpecificUserId) {
|
||||
AssetAttr param = { 0 };
|
||||
param.tag = SEC_ASSET_TAG_USER_ID;
|
||||
NAPI_CALL_RETURN_ERR(env, napi_get_value_uint32(env, specificUserId, ¶m.value.u32));
|
||||
attrs.push_back(param);
|
||||
}
|
||||
|
||||
if (isUpdate) {
|
||||
if (expectArgNum == UPDATE_ARGS_NUM) {
|
||||
ret = ParseMapParam(env, argv[index++], updateAttrs);
|
||||
if (ret != napi_ok) {
|
||||
LOGE("Parse second map parameter failed.");
|
||||
@ -387,17 +394,72 @@ napi_status ParseParam(napi_env env, napi_callback_info info, size_t expectArgNu
|
||||
}
|
||||
|
||||
napi_value NapiEntry(napi_env env, napi_callback_info info, const char *funcName, napi_async_execute_callback execute,
|
||||
size_t expectArgNum, bool isUpdate, bool isSpecificUserId)
|
||||
size_t expectArgNum)
|
||||
{
|
||||
AsyncContext *context = CreateAsyncContext();
|
||||
NAPI_THROW(env, context == nullptr, SEC_ASSET_OUT_OF_MEMORY, "Unable to allocate memory for AsyncContext.");
|
||||
|
||||
do {
|
||||
if (ParseParam(
|
||||
env, info, expectArgNum, context->attrs, context->updateAttrs, isUpdate, isSpecificUserId) != napi_ok) {
|
||||
napi_value argv[MAX_ARGS_NUM] = { 0 };
|
||||
if (ParseJsArgs(env, info, argv, expectArgNum) != napi_ok) {
|
||||
break;
|
||||
}
|
||||
|
||||
size_t index = 0;
|
||||
napi_status ret = ParseMapParam(env, argv[index++], context->attrs);
|
||||
if (ret != napi_ok) {
|
||||
LOGE("Parse first map parameter failed.");
|
||||
break;
|
||||
}
|
||||
if (expectArgNum == UPDATE_ARGS_NUM) {
|
||||
ret = ParseMapParam(env, argv[index++], context->updateAttrs);
|
||||
if (ret != napi_ok) {
|
||||
LOGE("Parse second map parameter failed.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
napi_value promise = CreateAsyncWork(env, context, funcName, execute);
|
||||
if (promise == nullptr) {
|
||||
LOGE("Create async work failed.");
|
||||
break;
|
||||
}
|
||||
return promise;
|
||||
} while (0);
|
||||
DestroyAsyncContext(env, context);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
napi_value NapiEntryAsUser(napi_env env, napi_callback_info info, const char *funcName,
|
||||
napi_async_execute_callback execute, size_t expectArgNum)
|
||||
{
|
||||
AsyncContext *context = CreateAsyncContext();
|
||||
NAPI_THROW(env, context == nullptr, SEC_ASSET_OUT_OF_MEMORY, "Unable to allocate memory for AsyncContext.");
|
||||
|
||||
do {
|
||||
napi_value argv[MAX_ARGS_NUM] = { 0 };
|
||||
if (ParseJsArgs(env, info, argv, expectArgNum) != napi_ok) {
|
||||
break;
|
||||
}
|
||||
|
||||
size_t index = 0;
|
||||
if (ParseJsUserId(env, argv[index++], context->attrs) != napi_ok) {
|
||||
break;
|
||||
}
|
||||
|
||||
napi_status ret = ParseMapParam(env, argv[index++], context->attrs);
|
||||
if (ret != napi_ok) {
|
||||
LOGE("Parse first map parameter failed.");
|
||||
break;
|
||||
}
|
||||
if (expectArgNum == AS_USER_UPDATE_ARGS_NUM) {
|
||||
ret = ParseMapParam(env, argv[index++], context->updateAttrs);
|
||||
if (ret != napi_ok) {
|
||||
LOGE("Parse second map parameter failed.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
napi_value promise = CreateAsyncWork(env, context, funcName, execute);
|
||||
if (promise == nullptr) {
|
||||
LOGE("Create async work failed.");
|
||||
|
Loading…
x
Reference in New Issue
Block a user