1 /* 2 * Copyright (c) 2022 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 #ifndef OS_ACCOUNT_INTERFACES_KITS_NAPI_IAM_INCLUDE_NAPI_IAM_COMMON_H 17 #define OS_ACCOUNT_INTERFACES_KITS_NAPI_IAM_INCLUDE_NAPI_IAM_COMMON_H 18 19 #include "account_error_no.h" 20 #include "account_iam_client_callback.h" 21 #include "account_iam_info.h" 22 #include "i_inputer.h" 23 #include "napi/native_api.h" 24 #include "napi/native_node_api.h" 25 #include "napi_account_common.h" 26 27 namespace OHOS { 28 namespace AccountJsKit { 29 constexpr size_t ARG_SIZE_ONE = 1; 30 constexpr size_t ARG_SIZE_TWO = 2; 31 constexpr size_t ARG_SIZE_THREE = 3; 32 constexpr size_t ARG_SIZE_FOUR = 4; 33 constexpr size_t ARG_SIZE_FIVE = 5; 34 35 constexpr size_t PARAM_ZERO = 0; 36 constexpr size_t PARAM_ONE = 1; 37 constexpr size_t PARAM_TWO = 2; 38 constexpr size_t PARAM_THREE = 3; 39 constexpr size_t PARAM_FOUR = 4; 40 41 enum IAMResultCode : int32_t { 42 ERR_IAM_SUCCESS = 0, 43 ERR_IAM_FAIL = 1, 44 ERR_IAM_GENERAL_ERROR = 2, 45 ERR_IAM_CANCELED = 3, 46 ERR_IAM_TIMEOUT = 4, 47 ERR_IAM_TYPE_NOT_SUPPORT = 5, 48 ERR_IAM_TRUST_LEVEL_NOT_SUPPORT = 6, 49 ERR_IAM_BUSY = 7, 50 ERR_IAM_INVALID_PARAMETERS = 8, 51 ERR_IAM_LOCKED = 9, 52 ERR_IAM_NOT_ENROLLED = 10, 53 ERR_IAM_HARDWARE_NOT_SUPPORTED = 11, 54 ERR_IAM_SYSTEM_ERROR_CODE_BEGIN = 1000, 55 ERR_IAM_IPC_ERROR = 1001, 56 ERR_IAM_INVALID_CONTEXT_ID = 1002, 57 ERR_IAM_READ_PARCEL_ERROR = 1003, 58 ERR_IAM_WRITE_PARCEL_ERROR = 1004, 59 ERR_IAM_CHECK_PERMISSION_FAILED = 1005, 60 ERR_IAM_INVALID_HDI_INTERFACE = 1006, 61 ERR_IAM_VENDOR_ERROR_CODE_BEGIN = 10000, 62 }; 63 64 int32_t AccountIAMConvertToJSErrCode(int32_t errCode); 65 66 struct IAMAsyncContext : public CommonAsyncContext { 67 explicit IAMAsyncContext(napi_env napiEnv); 68 virtual ~IAMAsyncContext(); 69 bool throwErr = true; 70 }; 71 72 struct JsIAMCallback { 73 napi_ref onResult = nullptr; 74 napi_ref onAcquireInfo = nullptr; 75 }; 76 77 #ifdef HAS_USER_AUTH_PART 78 struct IDMCallbackParam : public CommonAsyncContext { IDMCallbackParamIDMCallbackParam79 explicit IDMCallbackParam(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 80 JsIAMCallback callback; 81 int32_t result = 0; 82 int32_t module = 0; 83 uint32_t acquire = 0; 84 uint64_t credentialId = 0; 85 }; 86 87 struct AuthCallbackParam : public CommonAsyncContext { AuthCallbackParamAuthCallbackParam88 explicit AuthCallbackParam(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 89 int32_t module = 0; 90 uint32_t acquireInfo = 0; 91 int32_t extraInfo = 0; 92 int32_t resultCode = 0; 93 int32_t remainTimes = -1; 94 int32_t freezingTime = -1; 95 std::vector<uint8_t> token; 96 JsIAMCallback callback; 97 }; 98 99 struct AuthContext { 100 int32_t userId = 0; 101 int32_t authType = -1; 102 int32_t trustLevel = -1; 103 bool throwErr = true; 104 std::vector<uint8_t> challenge; 105 std::shared_ptr<AccountSA::IDMCallback> callback; 106 }; 107 108 struct IDMContext : public IAMAsyncContext { IDMContextIDMContext109 explicit IDMContext(napi_env napiEnv) : IAMAsyncContext(napiEnv) {}; 110 std::vector<uint8_t> challenge; 111 uint64_t credentialId = 0; 112 std::vector<uint8_t> token; 113 AccountSA::CredentialParameters addCredInfo; 114 JsIAMCallback callback; 115 }; 116 117 struct GetAuthInfoContext : public CommonAsyncContext { GetAuthInfoContextGetAuthInfoContext118 explicit GetAuthInfoContext(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 119 AccountSA::AuthType authType {0}; 120 std::vector<AccountSA::CredentialInfo> credInfo; 121 }; 122 123 struct GetPropertyContext : public CommonAsyncContext { GetPropertyContextGetPropertyContext124 explicit GetPropertyContext(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 125 AccountSA::GetPropertyRequest request; 126 int32_t result = 0; 127 int32_t authSubType = 0; 128 int32_t remainTimes = 0; 129 int32_t freezingTime = 0; 130 }; 131 132 struct SetPropertyContext : public CommonAsyncContext { SetPropertyContextSetPropertyContext133 explicit SetPropertyContext(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 134 AccountSA::SetPropertyRequest request; 135 int32_t result = 0; 136 }; 137 138 class NapiIDMCallback : public AccountSA::IDMCallback { 139 public: 140 explicit NapiIDMCallback(napi_env env, const JsIAMCallback &callback); 141 virtual ~NapiIDMCallback(); 142 143 void OnResult(int32_t result, const AccountSA::Attributes &extraInfo) override; 144 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const AccountSA::Attributes &extraInfo) override; 145 146 private: 147 napi_env env_; 148 JsIAMCallback callback_; 149 }; 150 151 class NapiGetInfoCallback : public AccountSA::GetCredInfoCallback { 152 public: 153 explicit NapiGetInfoCallback(napi_env env, napi_ref callbackRef, napi_deferred deferred); 154 virtual ~NapiGetInfoCallback(); 155 156 void OnCredentialInfo(int32_t result, const std::vector<AccountSA::CredentialInfo> &infoList) override; 157 private: 158 napi_env env_; 159 napi_ref callbackRef_; 160 napi_deferred deferred_; 161 }; 162 163 class NapiUserAuthCallback : public AccountSA::IDMCallback { 164 public: 165 explicit NapiUserAuthCallback(napi_env env, JsIAMCallback callback); 166 virtual ~NapiUserAuthCallback(); 167 168 void OnResult(int32_t result, const AccountSA::Attributes &extraInfo) override; 169 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const AccountSA::Attributes &extraInfo) override; 170 private: 171 napi_env env_; 172 JsIAMCallback callback_; 173 }; 174 175 class NapiGetPropCallback : public AccountSA::GetSetPropCallback { 176 public: 177 explicit NapiGetPropCallback(napi_env env, napi_ref callbackRef, napi_deferred deferred); 178 virtual ~NapiGetPropCallback(); 179 180 void OnResult(int32_t result, const AccountSA::Attributes &extraInfo) override; 181 private: 182 napi_env env_; 183 napi_ref callbackRef_; 184 napi_deferred deferred_; 185 }; 186 187 class NapiSetPropCallback : public AccountSA::GetSetPropCallback { 188 public: 189 explicit NapiSetPropCallback(napi_env env, napi_ref callbackRef, napi_deferred deferred); 190 virtual ~NapiSetPropCallback(); 191 192 void OnResult(int32_t result, const AccountSA::Attributes &extraInfo) override; 193 194 private: 195 napi_env env_; 196 napi_ref callbackRef_; 197 napi_deferred deferred_; 198 }; 199 #endif // HAS_USER_AUTH_PART 200 201 #ifdef HAS_PIN_AUTH_PART 202 struct InputerContext : public CommonAsyncContext { 203 int32_t authSubType = -1; 204 std::shared_ptr<AccountSA::IInputerData> inputerData = nullptr; 205 ThreadLockInfo *lockInfo = nullptr; 206 }; 207 208 class NapiGetDataCallback : public AccountSA::IInputer { 209 public: 210 NapiGetDataCallback(napi_env env, napi_ref callback); 211 virtual ~NapiGetDataCallback(); 212 213 void OnGetData(int32_t authSubType, const std::shared_ptr<AccountSA::IInputerData> inputerData) override; 214 215 private: 216 napi_env env_; 217 napi_ref callback_; 218 ThreadLockInfo lockInfo_; 219 }; 220 #endif // HAS_PIN_AUTH_PART 221 222 void CallbackAsyncOrPromise(napi_env env, CommonAsyncContext *context, napi_value errJs, napi_value dataJs); 223 napi_value CreateErrorObject(napi_env env, int32_t code); 224 napi_status ParseUInt32Array(napi_env env, napi_value value, std::vector<uint32_t> &data); 225 napi_status ParseIAMCallback(napi_env env, napi_value value, JsIAMCallback &callback); 226 #ifdef HAS_USER_AUTH_PART 227 napi_status ParseAddCredInfo(napi_env env, napi_value value, AccountSA::CredentialParameters &info); 228 napi_status ParseGetPropRequest(napi_env env, napi_value value, AccountSA::GetPropertyRequest &request); 229 napi_status ParseSetPropRequest(napi_env env, napi_value value, AccountSA::SetPropertyRequest &request); 230 napi_value CreateCredInfoArray(napi_env env, const std::vector<AccountSA::CredentialInfo> &info); 231 napi_value CreateAuthResult(napi_env env, const std::vector<uint8_t> &token, int32_t remainTimes, int32_t freezingTime); 232 #endif 233 } // namespace AccountJsKit 234 } // namespace OHOS 235 #endif // OS_ACCOUNT_INTERFACES_KITS_NAPI_IAM_INCLUDE_NAPI_IAM_COMMON_H 236