1/* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include <cstdint> 17 18#include "napi/native_api.h" 19#include "napi/native_node_api.h" 20 21#include "asset_system_api.h" 22#include "asset_system_type.h" 23 24#include "asset_napi_add.h" 25#include "asset_napi_post_query.h" 26#include "asset_napi_pre_query.h" 27#include "asset_napi_query.h" 28#include "asset_napi_remove.h" 29#include "asset_napi_update.h" 30 31using namespace OHOS::Security::Asset; 32 33namespace { 34 35void AddUint32Property(const napi_env env, napi_value object, const char *name, uint32_t value) 36{ 37 napi_value property = nullptr; 38 NAPI_CALL_RETURN_VOID(env, napi_create_uint32(env, value, &property)); 39 NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, object, name, property)); 40} 41 42napi_value DeclareTag(const napi_env env) 43{ 44 napi_value tag = nullptr; 45 NAPI_CALL(env, napi_create_object(env, &tag)); 46 AddUint32Property(env, tag, "SECRET", SEC_ASSET_TAG_SECRET); 47 AddUint32Property(env, tag, "ALIAS", SEC_ASSET_TAG_ALIAS); 48 AddUint32Property(env, tag, "ACCESSIBILITY", SEC_ASSET_TAG_ACCESSIBILITY); 49 AddUint32Property(env, tag, "REQUIRE_PASSWORD_SET", SEC_ASSET_TAG_REQUIRE_PASSWORD_SET); 50 AddUint32Property(env, tag, "AUTH_TYPE", SEC_ASSET_TAG_AUTH_TYPE); 51 AddUint32Property(env, tag, "AUTH_VALIDITY_PERIOD", SEC_ASSET_TAG_AUTH_VALIDITY_PERIOD); 52 AddUint32Property(env, tag, "AUTH_CHALLENGE", SEC_ASSET_TAG_AUTH_CHALLENGE); 53 AddUint32Property(env, tag, "AUTH_TOKEN", SEC_ASSET_TAG_AUTH_TOKEN); 54 AddUint32Property(env, tag, "SYNC_TYPE", SEC_ASSET_TAG_SYNC_TYPE); 55 AddUint32Property(env, tag, "IS_PERSISTENT", SEC_ASSET_TAG_IS_PERSISTENT); 56 AddUint32Property(env, tag, "CONFLICT_RESOLUTION", SEC_ASSET_TAG_CONFLICT_RESOLUTION); 57 AddUint32Property(env, tag, "DATA_LABEL_CRITICAL_1", SEC_ASSET_TAG_DATA_LABEL_CRITICAL_1); 58 AddUint32Property(env, tag, "DATA_LABEL_CRITICAL_2", SEC_ASSET_TAG_DATA_LABEL_CRITICAL_2); 59 AddUint32Property(env, tag, "DATA_LABEL_CRITICAL_3", SEC_ASSET_TAG_DATA_LABEL_CRITICAL_3); 60 AddUint32Property(env, tag, "DATA_LABEL_CRITICAL_4", SEC_ASSET_TAG_DATA_LABEL_CRITICAL_4); 61 AddUint32Property(env, tag, "DATA_LABEL_NORMAL_1", SEC_ASSET_TAG_DATA_LABEL_NORMAL_1); 62 AddUint32Property(env, tag, "DATA_LABEL_NORMAL_2", SEC_ASSET_TAG_DATA_LABEL_NORMAL_2); 63 AddUint32Property(env, tag, "DATA_LABEL_NORMAL_3", SEC_ASSET_TAG_DATA_LABEL_NORMAL_3); 64 AddUint32Property(env, tag, "DATA_LABEL_NORMAL_4", SEC_ASSET_TAG_DATA_LABEL_NORMAL_4); 65 AddUint32Property(env, tag, "DATA_LABEL_NORMAL_LOCAL_1", SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_1); 66 AddUint32Property(env, tag, "DATA_LABEL_NORMAL_LOCAL_2", SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_2); 67 AddUint32Property(env, tag, "DATA_LABEL_NORMAL_LOCAL_3", SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_3); 68 AddUint32Property(env, tag, "DATA_LABEL_NORMAL_LOCAL_4", SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_4); 69 AddUint32Property(env, tag, "RETURN_TYPE", SEC_ASSET_TAG_RETURN_TYPE); 70 AddUint32Property(env, tag, "RETURN_LIMIT", SEC_ASSET_TAG_RETURN_LIMIT); 71 AddUint32Property(env, tag, "RETURN_OFFSET", SEC_ASSET_TAG_RETURN_OFFSET); 72 AddUint32Property(env, tag, "RETURN_ORDERED_BY", SEC_ASSET_TAG_RETURN_ORDERED_BY); 73 AddUint32Property(env, tag, "UPDATE_TIME", SEC_ASSET_TAG_UPDATE_TIME); 74 AddUint32Property(env, tag, "OPERATION_TYPE", SEC_ASSET_TAG_OPERATION_TYPE); 75 AddUint32Property(env, tag, "REQUIRE_ATTR_ENCRYPTED", SEC_ASSET_TAG_REQUIRE_ATTR_ENCRYPTED); 76 return tag; 77} 78 79napi_value DeclareTagType(const napi_env env) 80{ 81 napi_value tagType = nullptr; 82 NAPI_CALL(env, napi_create_object(env, &tagType)); 83 AddUint32Property(env, tagType, "BOOL", SEC_ASSET_TYPE_BOOL); 84 AddUint32Property(env, tagType, "NUMBER", SEC_ASSET_TYPE_NUMBER); 85 AddUint32Property(env, tagType, "BYTES", SEC_ASSET_TYPE_BYTES); 86 return tagType; 87} 88 89napi_value DeclareErrorCode(const napi_env env) 90{ 91 napi_value errorCode = nullptr; 92 NAPI_CALL(env, napi_create_object(env, &errorCode)); 93 AddUint32Property(env, errorCode, "PERMISSION_DENIED", SEC_ASSET_PERMISSION_DENIED); 94 AddUint32Property(env, errorCode, "NOT_SYSTEM_APPLICATION", SEC_ASSET_NOT_SYSTEM_APPLICATION); 95 AddUint32Property(env, errorCode, "INVALID_ARGUMENT", SEC_ASSET_INVALID_ARGUMENT); 96 AddUint32Property(env, errorCode, "SERVICE_UNAVAILABLE", SEC_ASSET_SERVICE_UNAVAILABLE); 97 AddUint32Property(env, errorCode, "NOT_FOUND", SEC_ASSET_NOT_FOUND); 98 AddUint32Property(env, errorCode, "DUPLICATED", SEC_ASSET_DUPLICATED); 99 AddUint32Property(env, errorCode, "ACCESS_DENIED", SEC_ASSET_ACCESS_DENIED); 100 AddUint32Property(env, errorCode, "STATUS_MISMATCH", SEC_ASSET_STATUS_MISMATCH); 101 AddUint32Property(env, errorCode, "OUT_OF_MEMORY", SEC_ASSET_OUT_OF_MEMORY); 102 AddUint32Property(env, errorCode, "DATA_CORRUPTED", SEC_ASSET_DATA_CORRUPTED); 103 AddUint32Property(env, errorCode, "DATABASE_ERROR", SEC_ASSET_DATABASE_ERROR); 104 AddUint32Property(env, errorCode, "CRYPTO_ERROR", SEC_ASSET_CRYPTO_ERROR); 105 AddUint32Property(env, errorCode, "IPC_ERROR", SEC_ASSET_IPC_ERROR); 106 AddUint32Property(env, errorCode, "BMS_ERROR", SEC_ASSET_BMS_ERROR); 107 AddUint32Property(env, errorCode, "ACCOUNT_ERROR", SEC_ASSET_ACCOUNT_ERROR); 108 AddUint32Property(env, errorCode, "ACCESS_TOKEN_ERROR", SEC_ASSET_ACCESS_TOKEN_ERROR); 109 AddUint32Property(env, errorCode, "FILE_OPERATION_ERROR", SEC_ASSET_FILE_OPERATION_ERROR); 110 AddUint32Property(env, errorCode, "GET_SYSTEM_TIME_ERROR", SEC_ASSET_GET_SYSTEM_TIME_ERROR); 111 AddUint32Property(env, errorCode, "LIMIT_EXCEEDED", SEC_ASSET_LIMIT_EXCEEDED); 112 AddUint32Property(env, errorCode, "UNSUPPORTED", SEC_ASSET_UNSUPPORTED); 113 return errorCode; 114} 115 116napi_value DeclareAccessibility(const napi_env env) 117{ 118 napi_value accessibility = nullptr; 119 NAPI_CALL(env, napi_create_object(env, &accessibility)); 120 AddUint32Property(env, accessibility, "DEVICE_POWERED_ON", SEC_ASSET_ACCESSIBILITY_DEVICE_POWERED_ON); 121 AddUint32Property(env, accessibility, "DEVICE_FIRST_UNLOCKED", SEC_ASSET_ACCESSIBILITY_DEVICE_FIRST_UNLOCKED); 122 AddUint32Property(env, accessibility, "DEVICE_UNLOCKED", SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED); 123 return accessibility; 124} 125 126napi_value DeclareAuthType(const napi_env env) 127{ 128 napi_value authType = nullptr; 129 NAPI_CALL(env, napi_create_object(env, &authType)); 130 AddUint32Property(env, authType, "NONE", SEC_ASSET_AUTH_TYPE_NONE); 131 AddUint32Property(env, authType, "ANY", SEC_ASSET_AUTH_TYPE_ANY); 132 return authType; 133} 134 135napi_value DeclareSyncType(const napi_env env) 136{ 137 napi_value syncType = nullptr; 138 NAPI_CALL(env, napi_create_object(env, &syncType)); 139 AddUint32Property(env, syncType, "NEVER", SEC_ASSET_SYNC_TYPE_NEVER); 140 AddUint32Property(env, syncType, "THIS_DEVICE", SEC_ASSET_SYNC_TYPE_THIS_DEVICE); 141 AddUint32Property(env, syncType, "TRUSTED_DEVICE", SEC_ASSET_SYNC_TYPE_TRUSTED_DEVICE); 142 AddUint32Property(env, syncType, "TRUSTED_ACCOUNT", SEC_ASSET_SYNC_TYPE_TRUSTED_ACCOUNT); 143 return syncType; 144} 145 146napi_value DeclareConflictResolution(const napi_env env) 147{ 148 napi_value conflictResolution = nullptr; 149 NAPI_CALL(env, napi_create_object(env, &conflictResolution)); 150 AddUint32Property(env, conflictResolution, "OVERWRITE", SEC_ASSET_CONFLICT_OVERWRITE); 151 AddUint32Property(env, conflictResolution, "THROW_ERROR", SEC_ASSET_CONFLICT_THROW_ERROR); 152 return conflictResolution; 153} 154 155napi_value DeclareReturnType(const napi_env env) 156{ 157 napi_value returnType = nullptr; 158 NAPI_CALL(env, napi_create_object(env, &returnType)); 159 AddUint32Property(env, returnType, "ALL", SEC_ASSET_RETURN_ALL); 160 AddUint32Property(env, returnType, "ATTRIBUTES", SEC_ASSET_RETURN_ATTRIBUTES); 161 return returnType; 162} 163 164napi_value DeclareOperationType(const napi_env env) 165{ 166 napi_value operationType = nullptr; 167 NAPI_CALL(env, napi_create_object(env, &operationType)); 168 AddUint32Property(env, operationType, "NEED_SYNC", SEC_ASSET_NEED_SYNC); 169 AddUint32Property(env, operationType, "NEED_LOGOUT", SEC_ASSET_NEED_LOGOUT); 170 AddUint32Property(env, operationType, "NEED_DELETE_CLOUD_DATA", SEC_ASSET_NEED_DELETE_CLOUD_DATA); 171 return operationType; 172} 173 174napi_value Register(const napi_env env, napi_value exports) 175{ 176 napi_property_descriptor desc[] = { 177 // register function 178 DECLARE_NAPI_FUNCTION("add", NapiAdd), 179 DECLARE_NAPI_FUNCTION("addSync", NapiAddSync), 180 DECLARE_NAPI_FUNCTION("addAsUser", NapiAddAsUser), 181 DECLARE_NAPI_FUNCTION("remove", NapiRemove), 182 DECLARE_NAPI_FUNCTION("removeSync", NapiRemoveSync), 183 DECLARE_NAPI_FUNCTION("removeAsUser", NapiRemoveAsUser), 184 DECLARE_NAPI_FUNCTION("update", NapiUpdate), 185 DECLARE_NAPI_FUNCTION("updateSync", NapiUpdateSync), 186 DECLARE_NAPI_FUNCTION("updateAsUser", NapiUpdateAsUser), 187 DECLARE_NAPI_FUNCTION("preQuery", NapiPreQuery), 188 DECLARE_NAPI_FUNCTION("preQuerySync", NapiPreQuerySync), 189 DECLARE_NAPI_FUNCTION("preQueryAsUser", NapiPreQueryAsUser), 190 DECLARE_NAPI_FUNCTION("query", NapiQuery), 191 DECLARE_NAPI_FUNCTION("querySync", NapiQuerySync), 192 DECLARE_NAPI_FUNCTION("queryAsUser", NapiQueryAsUser), 193 DECLARE_NAPI_FUNCTION("postQuery", NapiPostQuery), 194 DECLARE_NAPI_FUNCTION("postQuerySync", NapiPostQuerySync), 195 DECLARE_NAPI_FUNCTION("postQueryAsUser", NapiPostQueryAsUser), 196 197 // register enumerate 198 DECLARE_NAPI_PROPERTY("Tag", DeclareTag(env)), 199 DECLARE_NAPI_PROPERTY("TagType", DeclareTagType(env)), 200 DECLARE_NAPI_PROPERTY("ErrorCode", DeclareErrorCode(env)), 201 DECLARE_NAPI_PROPERTY("Accessibility", DeclareAccessibility(env)), 202 DECLARE_NAPI_PROPERTY("AuthType", DeclareAuthType(env)), 203 DECLARE_NAPI_PROPERTY("SyncType", DeclareSyncType(env)), 204 DECLARE_NAPI_PROPERTY("ConflictResolution", DeclareConflictResolution(env)), 205 DECLARE_NAPI_PROPERTY("ReturnType", DeclareReturnType(env)), 206 DECLARE_NAPI_PROPERTY("OperationType", DeclareOperationType(env)), 207 }; 208 209 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); 210 return exports; 211} 212 213napi_module g_module = { 214 .nm_version = 1, 215 .nm_flags = 0, 216 .nm_filename = nullptr, 217 .nm_register_func = Register, 218 .nm_modname = "security.asset", 219 .nm_priv = static_cast<void *>(0), 220 .reserved = { 0 }, 221}; 222 223} // anonymous namespace 224 225extern "C" __attribute__((constructor)) void RegisterModule(void) 226{ 227 napi_module_register(&g_module); 228} 229