• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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