• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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 "iam_logger.h"
17 
18 #include "user_auth_impl.h"
19 #include "auth_instance_v9.h"
20 #include "nlohmann/json.hpp"
21 #include "user_auth_impl.h"
22 #include "user_auth_instance_v10.h"
23 #include "user_auth_widget_mgr_v10.h"
24 #include "user_auth_client_impl.h"
25 
26 #define LOG_LABEL UserIam::Common::LABEL_USER_AUTH_NAPI
27 
28 namespace OHOS {
29 namespace UserIam {
30 namespace UserAuth {
31 namespace {
32 const std::string NOTICE_WIDGET_CTXID = "widgetContextId";
33 const std::string NOTICE_EVENT_TYPE = "event";
34 const std::string NOTICE_VERSION = "version";
35 const std::string NOTICE_PAYLOAD = "payload";
36 const std::string NOTICE_PAYLOAD_TYPE = "type";
37 const std::string SUPPORT_NOTICE_VERSION = "1";
38 
UserAuthServiceConstructor(napi_env env,napi_callback_info info)39 napi_value UserAuthServiceConstructor(napi_env env, napi_callback_info info)
40 {
41     IAM_LOGI("start");
42     napi_value thisVar = nullptr;
43     size_t argc = ARGS_ONE;
44     napi_value argv[ARGS_ONE] = {nullptr};
45     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr));
46     return thisVar;
47 }
48 
GetVersion(napi_env env,napi_callback_info info)49 napi_value GetVersion(napi_env env, napi_callback_info info)
50 {
51     IAM_LOGI("start");
52     return UserAuthImpl::GetVersion(env, info);
53 }
54 
GetAvailableStatus(napi_env env,napi_callback_info info)55 napi_value GetAvailableStatus(napi_env env, napi_callback_info info)
56 {
57     IAM_LOGI("start");
58     return UserAuthImpl::GetAvailableStatus(env, info);
59 }
60 
GetAvailableStatusV9(napi_env env,napi_callback_info info)61 napi_value GetAvailableStatusV9(napi_env env, napi_callback_info info)
62 {
63     IAM_LOGI("start");
64     UserAuthResultCode result = AuthInstanceV9::GetAvailableStatus(env, info);
65     if (result != UserAuthResultCode::SUCCESS) {
66         IAM_LOGE("fail");
67         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, result));
68     }
69     return nullptr;
70 }
71 
UnwrapAuthInstanceV9(napi_env env,napi_callback_info info,AuthInstanceV9 ** authInstanceV9)72 napi_status UnwrapAuthInstanceV9(napi_env env, napi_callback_info info, AuthInstanceV9 **authInstanceV9)
73 {
74     napi_value thisVar = nullptr;
75     size_t argc = ARGS_ONE;
76     napi_value argv[ARGS_ONE] = {nullptr};
77     napi_status ret = napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
78     if (ret != napi_ok) {
79         IAM_LOGE("napi_get_cb_info fail");
80         return ret;
81     }
82     ret = napi_unwrap(env, thisVar, reinterpret_cast<void **>(authInstanceV9));
83     if (ret != napi_ok) {
84         IAM_LOGE("napi_unwrap fail");
85         return ret;
86     }
87     if (*authInstanceV9 == nullptr) {
88         IAM_LOGE("authInstanceV9 is null");
89         return napi_generic_failure;
90     }
91     return ret;
92 }
93 
AuthInstanceV9Constructor(napi_env env,napi_callback_info info)94 napi_value AuthInstanceV9Constructor(napi_env env, napi_callback_info info)
95 {
96     IAM_LOGI("start");
97     std::unique_ptr<AuthInstanceV9> authInstanceV9 {new (std::nothrow) AuthInstanceV9(env)};
98     if (authInstanceV9 == nullptr) {
99         IAM_LOGE("authInstanceV9 is nullptr");
100         return nullptr;
101     }
102 
103     napi_value thisVar = nullptr;
104     size_t argc = ARGS_ONE;
105     napi_value argv[ARGS_ONE] = {nullptr};
106     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr));
107     NAPI_CALL(env, napi_wrap(env, thisVar, authInstanceV9.get(),
108         [](napi_env env, void *data, void *hint) {
109             AuthInstanceV9 *authInstanceV9 = static_cast<AuthInstanceV9 *>(data);
110             if (authInstanceV9 != nullptr) {
111                 delete authInstanceV9;
112             }
113         },
114         nullptr, nullptr));
115     authInstanceV9.release();
116     return thisVar;
117 }
118 
On(napi_env env,napi_callback_info info)119 napi_value On(napi_env env, napi_callback_info info)
120 {
121     IAM_LOGI("start");
122     AuthInstanceV9 *authInstance;
123     napi_status ret = UnwrapAuthInstanceV9(env, info, &authInstance);
124     if (ret != napi_ok) {
125         IAM_LOGE("UnwrapAuthInstanceV9 fail:%{public}d", ret);
126         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
127         return nullptr;
128     }
129     UserAuthResultCode code = authInstance->On(env, info);
130     if (code != UserAuthResultCode::SUCCESS) {
131         IAM_LOGE("On fail:%{public}d", static_cast<int32_t>(code));
132         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
133     }
134     return nullptr;
135 }
136 
Off(napi_env env,napi_callback_info info)137 napi_value Off(napi_env env, napi_callback_info info)
138 {
139     IAM_LOGI("start");
140     AuthInstanceV9 *authInstance;
141     napi_status ret = UnwrapAuthInstanceV9(env, info, &authInstance);
142     if (ret != napi_ok) {
143         IAM_LOGE("UnwrapAuthInstanceV9 fail:%{public}d", ret);
144         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
145         return nullptr;
146     }
147     UserAuthResultCode code = authInstance->Off(env, info);
148     if (code != UserAuthResultCode::SUCCESS) {
149         IAM_LOGE("Off fail:%{public}d", static_cast<int32_t>(code));
150         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
151     }
152     return nullptr;
153 }
154 
Start(napi_env env,napi_callback_info info)155 napi_value Start(napi_env env, napi_callback_info info)
156 {
157     IAM_LOGI("start");
158     AuthInstanceV9 *authInstance;
159     napi_status ret = UnwrapAuthInstanceV9(env, info, &authInstance);
160     if (ret != napi_ok) {
161         IAM_LOGE("UnwrapAuthInstanceV9 fail:%{public}d", ret);
162         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
163         return nullptr;
164     }
165     UserAuthResultCode code = authInstance->Start(env, info);
166     if (code != UserAuthResultCode::SUCCESS) {
167         IAM_LOGE("Start fail:%{public}d", static_cast<int32_t>(code));
168         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
169     }
170     return nullptr;
171 }
172 
Cancel(napi_env env,napi_callback_info info)173 napi_value Cancel(napi_env env, napi_callback_info info)
174 {
175     IAM_LOGI("start");
176     AuthInstanceV9 *authInstance;
177     napi_status ret = UnwrapAuthInstanceV9(env, info, &authInstance);
178     if (ret != napi_ok) {
179         IAM_LOGE("UnwrapAuthInstanceV9 fail:%{public}d", ret);
180         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
181         return nullptr;
182     }
183     UserAuthResultCode code = authInstance->Cancel(env, info);
184     if (code != UserAuthResultCode::SUCCESS) {
185         IAM_LOGE("Cancel fail:%{public}d", static_cast<int32_t>(code));
186         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
187     }
188     return nullptr;
189 }
190 
AuthInstanceV9Class(napi_env env)191 napi_value AuthInstanceV9Class(napi_env env)
192 {
193     napi_value result = nullptr;
194     napi_property_descriptor clzDes[] = {
195         DECLARE_NAPI_FUNCTION("on", UserAuth::On),
196         DECLARE_NAPI_FUNCTION("off", UserAuth::Off),
197         DECLARE_NAPI_FUNCTION("start", UserAuth::Start),
198         DECLARE_NAPI_FUNCTION("cancel", UserAuth::Cancel),
199     };
200     NAPI_CALL(env, napi_define_class(env, "AuthInstace", NAPI_AUTO_LENGTH, AuthInstanceV9Constructor, nullptr,
201         sizeof(clzDes) / sizeof(napi_property_descriptor), clzDes, &result));
202     return result;
203 }
204 
GetAuthInstanceV9(napi_env env,napi_callback_info info)205 napi_value GetAuthInstanceV9(napi_env env, napi_callback_info info)
206 {
207     IAM_LOGI("start");
208     napi_value authInstanceV9;
209     napi_status ret = napi_new_instance(env, AuthInstanceV9Class(env), 0, nullptr, &authInstanceV9);
210     if (ret != napi_ok) {
211         IAM_LOGE("napi_new_instance fail:%{public}d", ret);
212         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
213         return nullptr;
214     }
215     AuthInstanceV9 *authInstance;
216     ret = napi_unwrap(env, authInstanceV9, reinterpret_cast<void **>(&authInstance));
217     if (ret != napi_ok) {
218         IAM_LOGE("napi_unwrap fail");
219         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
220         return nullptr;
221     }
222     if (authInstance == nullptr) {
223         IAM_LOGE("authInstanceV9 is null");
224         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
225         return nullptr;
226     }
227     UserAuthResultCode code = authInstance->Init(env, info);
228     if (code != UserAuthResultCode::SUCCESS) {
229         IAM_LOGE("Init fail:%{public}d", static_cast<int32_t>(code));
230         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
231         return nullptr;
232     }
233     return authInstanceV9;
234 }
235 
UnwrapAuthInstanceV10(napi_env env,napi_callback_info info,UserAuthInstanceV10 ** authInstanceV10)236 napi_status UnwrapAuthInstanceV10(napi_env env, napi_callback_info info, UserAuthInstanceV10 **authInstanceV10)
237 {
238     napi_value thisVar = nullptr;
239     size_t argc = ARGS_ONE;
240     napi_value argv[ARGS_ONE] = {nullptr};
241     napi_status ret = napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
242     if (ret != napi_ok) {
243         IAM_LOGE("napi_get_cb_info fail");
244         return ret;
245     }
246     ret = napi_unwrap(env, thisVar, reinterpret_cast<void **>(authInstanceV10));
247     if (ret != napi_ok) {
248         IAM_LOGE("napi_unwrap fail");
249         return ret;
250     }
251     if (*authInstanceV10 == nullptr) {
252         IAM_LOGE("authInstanceV9 is null");
253         return napi_generic_failure;
254     }
255     return ret;
256 }
257 
OnV10(napi_env env,napi_callback_info info)258 napi_value OnV10(napi_env env, napi_callback_info info)
259 {
260     IAM_LOGI("start");
261     UserAuthInstanceV10 *authInstance = nullptr;
262     napi_status ret = UnwrapAuthInstanceV10(env, info, &authInstance);
263     if (ret != napi_ok) {
264         IAM_LOGE("UnwrapAuthInstanceV10 fail:%{public}d", ret);
265         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
266         return nullptr;
267     }
268     UserAuthResultCode code = authInstance->On(env, info);
269     if (code != UserAuthResultCode::SUCCESS) {
270         IAM_LOGE("On fail:%{public}d", static_cast<int32_t>(code));
271         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
272     }
273     return nullptr;
274 }
275 
OffV10(napi_env env,napi_callback_info info)276 napi_value OffV10(napi_env env, napi_callback_info info)
277 {
278     IAM_LOGI("start");
279     UserAuthInstanceV10 *authInstance = nullptr;
280     napi_status ret = UnwrapAuthInstanceV10(env, info, &authInstance);
281     if (ret != napi_ok) {
282         IAM_LOGE("UnwrapAuthInstanceV10 fail:%{public}d", ret);
283         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
284         return nullptr;
285     }
286     UserAuthResultCode code = authInstance->Off(env, info);
287     if (code != UserAuthResultCode::SUCCESS) {
288         IAM_LOGE("Off fail:%{public}d", static_cast<int32_t>(code));
289         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
290     }
291     return nullptr;
292 }
293 
StartV10(napi_env env,napi_callback_info info)294 napi_value StartV10(napi_env env, napi_callback_info info)
295 {
296     IAM_LOGI("start");
297     UserAuthInstanceV10 *authInstance = nullptr;
298     napi_status ret = UnwrapAuthInstanceV10(env, info, &authInstance);
299     if (ret != napi_ok) {
300         IAM_LOGE("UnwrapAuthInstanceV10 fail:%{public}d", ret);
301         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
302         return nullptr;
303     }
304     UserAuthResultCode code = authInstance->Start(env, info);
305     if (code != UserAuthResultCode::SUCCESS) {
306         IAM_LOGE("Start fail:%{public}d", static_cast<int32_t>(code));
307         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
308     }
309     return nullptr;
310 }
311 
CancelV10(napi_env env,napi_callback_info info)312 napi_value CancelV10(napi_env env, napi_callback_info info)
313 {
314     IAM_LOGI("start");
315     UserAuthInstanceV10 *authInstance = nullptr;
316     napi_status ret = UnwrapAuthInstanceV10(env, info, &authInstance);
317     if (ret != napi_ok) {
318         IAM_LOGE("UnwrapAuthInstanceV10 fail:%{public}d", ret);
319         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
320         return nullptr;
321     }
322     UserAuthResultCode code = authInstance->Cancel(env, info);
323     if (code != UserAuthResultCode::SUCCESS) {
324         IAM_LOGE("Cancel fail:%{public}d", static_cast<int32_t>(code));
325         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
326     }
327     return nullptr;
328 }
329 
UserAuthInstanceV10Constructor(napi_env env,napi_callback_info info)330 napi_value UserAuthInstanceV10Constructor(napi_env env, napi_callback_info info)
331 {
332     IAM_LOGI("start");
333     std::unique_ptr<UserAuthInstanceV10> userAuthInstanceV10 {new (std::nothrow) UserAuthInstanceV10(env)};
334     if (userAuthInstanceV10 == nullptr) {
335         IAM_LOGE("userAuthInstanceV10 is nullptr");
336         return nullptr;
337     }
338 
339     napi_value thisVar = nullptr;
340     size_t argc = ARGS_TWO;
341     napi_value argv[ARGS_TWO] = {nullptr};
342     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr));
343     NAPI_CALL(env, napi_wrap(env, thisVar, userAuthInstanceV10.get(),
344         [](napi_env env, void *data, void *hint) {
345             UserAuthInstanceV10 *userAuthInstanceV10 = static_cast<UserAuthInstanceV10 *>(data);
346             if (userAuthInstanceV10 != nullptr) {
347                 delete userAuthInstanceV10;
348             }
349         },
350         nullptr, nullptr));
351     userAuthInstanceV10.release();
352     return thisVar;
353 }
354 
UserAuthInstanceV10Class(napi_env env)355 napi_value UserAuthInstanceV10Class(napi_env env)
356 {
357     napi_value result = nullptr;
358     napi_property_descriptor clzDes[] = {
359         DECLARE_NAPI_FUNCTION("on", UserAuth::OnV10),
360         DECLARE_NAPI_FUNCTION("off", UserAuth::OffV10),
361         DECLARE_NAPI_FUNCTION("start", UserAuth::StartV10),
362         DECLARE_NAPI_FUNCTION("cancel", UserAuth::CancelV10),
363     };
364     NAPI_CALL(env, napi_define_class(env, "UserAuthInstance", NAPI_AUTO_LENGTH, UserAuthInstanceV10Constructor, nullptr,
365         sizeof(clzDes) / sizeof(napi_property_descriptor), clzDes, &result));
366     return result;
367 }
368 
UnwrapAuthWidgetMgrV10(napi_env env,napi_callback_info info,UserAuthWidgetMgr ** authWidgetMgrV10)369 napi_status UnwrapAuthWidgetMgrV10(napi_env env, napi_callback_info info, UserAuthWidgetMgr **authWidgetMgrV10)
370 {
371     napi_value thisVar = nullptr;
372     size_t argc = ARGS_ONE;
373     napi_value argv[ARGS_ONE] = {nullptr};
374     napi_status ret = napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
375     if (ret != napi_ok) {
376         IAM_LOGE("napi_get_cb_info fail");
377         return ret;
378     }
379     ret = napi_unwrap(env, thisVar, reinterpret_cast<void **>(authWidgetMgrV10));
380     if (ret != napi_ok) {
381         IAM_LOGE("napi_unwrap fail");
382         return ret;
383     }
384     if (*authWidgetMgrV10 == nullptr) {
385         IAM_LOGE("authWidgetMgr is null");
386         return napi_generic_failure;
387     }
388     return ret;
389 }
390 
WidgetOn(napi_env env,napi_callback_info info)391 napi_value WidgetOn(napi_env env, napi_callback_info info)
392 {
393     IAM_LOGI("widgetOn");
394     UserAuthWidgetMgr *authWidgetMgr = nullptr;
395     napi_status ret = UnwrapAuthWidgetMgrV10(env, info, &authWidgetMgr);
396     if (ret != napi_ok) {
397         IAM_LOGE("UnwrapAuthWidgetMgrV10 fail:%{public}d", ret);
398         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
399         return nullptr;
400     }
401     UserAuthResultCode code = authWidgetMgr->On(env, info);
402     if (code != UserAuthResultCode::SUCCESS) {
403         IAM_LOGE("widgetOn fail:%{public}d", static_cast<int32_t>(code));
404         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
405     }
406     return nullptr;
407 }
408 
WidgetOff(napi_env env,napi_callback_info info)409 napi_value WidgetOff(napi_env env, napi_callback_info info)
410 {
411     IAM_LOGI("widgetOff");
412     UserAuthWidgetMgr *authWidgetMgr = nullptr;
413     napi_status ret = UnwrapAuthWidgetMgrV10(env, info, &authWidgetMgr);
414     if (ret != napi_ok) {
415         IAM_LOGE("UnwrapAuthWidgetMgrV10 fail:%{public}d", ret);
416         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
417         return nullptr;
418     }
419     UserAuthResultCode code = authWidgetMgr->Off(env, info);
420     if (code != UserAuthResultCode::SUCCESS) {
421         IAM_LOGE("widgetOff fail:%{public}d", static_cast<int32_t>(code));
422         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
423     }
424     return nullptr;
425 }
426 
VerifyNoticeParam(const std::string & eventData)427 static bool VerifyNoticeParam(const std::string &eventData)
428 {
429     auto json = nlohmann::json::parse(eventData.c_str(), nullptr, false);
430     if (json.is_null() || json.is_discarded()) {
431         IAM_LOGE("Notice data is invalid json object");
432         return false;
433     }
434 
435     if (json.find(NOTICE_EVENT_TYPE) == json.end() || !json[NOTICE_EVENT_TYPE].is_string()) {
436         IAM_LOGE("Invalid event type exist in notice data");
437         return false;
438     }
439 
440     if (json.find(NOTICE_PAYLOAD) == json.end() ||
441         json[NOTICE_PAYLOAD].find(NOTICE_PAYLOAD_TYPE) == json[NOTICE_PAYLOAD].end() ||
442         !json[NOTICE_PAYLOAD][NOTICE_PAYLOAD_TYPE].is_array()) {
443         IAM_LOGE("Invalid payload exist in notice data");
444         return false;
445     }
446     IAM_LOGI("valid notice parameter");
447     return true;
448 }
449 
ResultOfSendNotice(napi_env env,UserAuthResultCode errCode)450 napi_value ResultOfSendNotice(napi_env env, UserAuthResultCode errCode)
451 {
452     napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, errCode));
453     return nullptr;
454 }
455 
SendNotice(napi_env env,napi_callback_info info)456 napi_value SendNotice(napi_env env, napi_callback_info info)
457 {
458     IAM_LOGI("start SendNotice");
459     UserAuthResultCode errCode = UserAuthResultCode::SUCCESS;
460 
461     napi_value argv[ARGS_TWO];
462     size_t argc = ARGS_TWO;
463     napi_status ret = napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
464     if (ret != napi_ok) {
465         IAM_LOGE("napi_get_cb_info fail:%{public}d", ret);
466         return ResultOfSendNotice(env, UserAuthResultCode::GENERAL_ERROR);
467     }
468     if (argc != ARGS_TWO) {
469         IAM_LOGE("invalid param, argc:%{public}zu", argc);
470         return ResultOfSendNotice(env, UserAuthResultCode::OHOS_INVALID_PARAM);
471     }
472 
473     NoticeType noticeType = NoticeType::WIDGET_NOTICE;
474     int32_t noticeType_value = 0;
475     ret = UserAuthNapiHelper::GetInt32Value(env, argv[PARAM0], noticeType_value);
476     if (ret != napi_ok) {
477         IAM_LOGE("GetStrValue fail:%{public}d", ret);
478         return ResultOfSendNotice(env, UserAuthResultCode::OHOS_INVALID_PARAM);
479     }
480     IAM_LOGI("recv SendNotice noticeType:%{public}d", noticeType_value);
481 
482     if (noticeType_value != WIDGET_NOTICE) {
483         return ResultOfSendNotice(env, UserAuthResultCode::OHOS_INVALID_PARAM);
484     }
485 
486     std::string eventData = UserAuthNapiHelper::GetStringFromValueUtf8(env, argv[PARAM1]);
487     IAM_LOGI("recv SendNotice eventData:%{public}s", eventData.c_str());
488     if (!VerifyNoticeParam(eventData)) {
489         IAM_LOGE("Invalid notice parameter");
490         return ResultOfSendNotice(env, UserAuthResultCode::OHOS_INVALID_PARAM);
491     }
492 
493     int32_t result = UserAuthClientImpl::Instance().Notice(noticeType, eventData);
494     if (result != ResultCode::SUCCESS) {
495         errCode = UserAuthResultCode(UserAuthNapiHelper::GetResultCodeV10(result));
496         IAM_LOGE("SendNotice fail. result: %{public}d, errCode: %{public}d", result, errCode);
497         return ResultOfSendNotice(env, errCode);
498     }
499     IAM_LOGI("end SendNotice");
500     return nullptr;
501 }
502 
UserAuthWidgetMgrV10Constructor(napi_env env,napi_callback_info info)503 napi_value UserAuthWidgetMgrV10Constructor(napi_env env, napi_callback_info info)
504 {
505     IAM_LOGI("start");
506     std::unique_ptr<UserAuthWidgetMgr> userAuthWidgetMgrV10 {new (std::nothrow) UserAuthWidgetMgr(env)};
507     if (userAuthWidgetMgrV10 == nullptr) {
508         IAM_LOGE("userAuthWidgetMgrV10 is nullptr");
509         return nullptr;
510     }
511 
512     napi_value thisVar = nullptr;
513     size_t argc = ARGS_ONE;
514     napi_value argv[ARGS_ONE] = {nullptr};
515     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr));
516     NAPI_CALL(env, napi_wrap(env, thisVar, userAuthWidgetMgrV10.get(),
517         [](napi_env env, void *data, void *hint) {
518             UserAuthWidgetMgr *userAuthWidgetMgrV10 = static_cast<UserAuthWidgetMgr *>(data);
519             if (userAuthWidgetMgrV10 != nullptr) {
520                 delete userAuthWidgetMgrV10;
521             }
522         },
523         nullptr, nullptr));
524     userAuthWidgetMgrV10.release();
525     return thisVar;
526 }
527 
UserAuthWidgetMgrV10Class(napi_env env)528 napi_value UserAuthWidgetMgrV10Class(napi_env env)
529 {
530     napi_value result = nullptr;
531     napi_property_descriptor clzDes[] = {
532         DECLARE_NAPI_FUNCTION("on", UserAuth::WidgetOn),
533         DECLARE_NAPI_FUNCTION("off", UserAuth::WidgetOff),
534     };
535     NAPI_CALL(env, napi_define_class(env, "UserAuthWidgetMgr", NAPI_AUTO_LENGTH, UserAuthWidgetMgrV10Constructor,
536         nullptr, sizeof(clzDes) / sizeof(napi_property_descriptor), clzDes, &result));
537     return result;
538 }
539 
GetUserAuthInstanceV10(napi_env env,napi_callback_info info)540 napi_value GetUserAuthInstanceV10(napi_env env, napi_callback_info info)
541 {
542     IAM_LOGI("start");
543     napi_value userAuthInstanceV10;
544     napi_status ret = napi_new_instance(env, UserAuthInstanceV10Class(env), 0, nullptr, &userAuthInstanceV10);
545     if (ret != napi_ok) {
546         IAM_LOGE("napi_new_instance fail:%{public}d", ret);
547         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
548         return nullptr;
549     }
550     UserAuthInstanceV10 *userAuthInstance = nullptr;
551     ret = napi_unwrap(env, userAuthInstanceV10, reinterpret_cast<void **>(&userAuthInstance));
552     if (ret != napi_ok) {
553         IAM_LOGE("napi_unwrap fail");
554         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
555         return nullptr;
556     }
557     if (userAuthInstance == nullptr) {
558         IAM_LOGE("userAuthInstanceV10 is null");
559         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
560         return nullptr;
561     }
562     UserAuthResultCode code = userAuthInstance->Init(env, info);
563     if (code != UserAuthResultCode::SUCCESS) {
564         IAM_LOGE("Init fail:%{public}d", static_cast<int32_t>(code));
565         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
566         return nullptr;
567     }
568 
569     IAM_LOGE("GetUserAuthInstanceV10 SUCCESS");
570     return userAuthInstanceV10;
571 }
572 
GetUserAuthWidgetMgrV10(napi_env env,napi_callback_info info)573 napi_value GetUserAuthWidgetMgrV10(napi_env env, napi_callback_info info)
574 {
575     IAM_LOGI("start");
576     napi_value userAuthWidgetMgrV10;
577     napi_status ret = napi_new_instance(env, UserAuthWidgetMgrV10Class(env), 0, nullptr, &userAuthWidgetMgrV10);
578     if (ret != napi_ok) {
579         IAM_LOGE("napi_new_instance fail:%{public}d", ret);
580         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
581         return nullptr;
582     }
583     UserAuthWidgetMgr *userAuthWidgetMgr = nullptr;
584     ret = napi_unwrap(env, userAuthWidgetMgrV10, reinterpret_cast<void **>(&userAuthWidgetMgr));
585     if (ret != napi_ok) {
586         IAM_LOGE("napi_unwrap fail");
587         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
588         return nullptr;
589     }
590     if (userAuthWidgetMgr == nullptr) {
591         IAM_LOGE("userAuthWidgetMgr is null");
592         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, UserAuthResultCode::GENERAL_ERROR));
593         return nullptr;
594     }
595     UserAuthResultCode code = userAuthWidgetMgr->Init(env, info);
596     if (code != UserAuthResultCode::SUCCESS) {
597         IAM_LOGE("Init fail:%{public}d", static_cast<int32_t>(code));
598         napi_throw(env, UserAuthNapiHelper::GenerateBusinessErrorV9(env, code));
599         return nullptr;
600     }
601     IAM_LOGI("end");
602     return userAuthWidgetMgrV10;
603 }
604 
Auth(napi_env env,napi_callback_info info)605 napi_value Auth(napi_env env, napi_callback_info info)
606 {
607     IAM_LOGI("start");
608     return UserAuthImpl::Auth(env, info);
609 }
610 
Execute(napi_env env,napi_callback_info info)611 napi_value Execute(napi_env env, napi_callback_info info)
612 {
613     IAM_LOGI("start");
614     return UserAuthImpl::Execute(env, info);
615 }
616 
CancelAuth(napi_env env,napi_callback_info info)617 napi_value CancelAuth(napi_env env, napi_callback_info info)
618 {
619     IAM_LOGI("start");
620     return UserAuthImpl::CancelAuth(env, info);
621 }
622 
AuthTrustLevelConstructor(napi_env env)623 napi_value AuthTrustLevelConstructor(napi_env env)
624 {
625     napi_value authTrustLevel = nullptr;
626     napi_value atl1 = nullptr;
627     napi_value atl2 = nullptr;
628     napi_value atl3 = nullptr;
629     napi_value atl4 = nullptr;
630     NAPI_CALL(env, napi_create_object(env, &authTrustLevel));
631     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthTrustLevel::ATL1), &atl1));
632     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthTrustLevel::ATL2), &atl2));
633     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthTrustLevel::ATL3), &atl3));
634     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthTrustLevel::ATL4), &atl4));
635     NAPI_CALL(env, napi_set_named_property(env, authTrustLevel, "ATL1", atl1));
636     NAPI_CALL(env, napi_set_named_property(env, authTrustLevel, "ATL2", atl2));
637     NAPI_CALL(env, napi_set_named_property(env, authTrustLevel, "ATL3", atl3));
638     NAPI_CALL(env, napi_set_named_property(env, authTrustLevel, "ATL4", atl4));
639     return authTrustLevel;
640 }
641 
ResultCodeConstructor(napi_env env)642 napi_value ResultCodeConstructor(napi_env env)
643 {
644     napi_value resultCode = nullptr;
645     napi_value success = nullptr;
646     napi_value fail = nullptr;
647     napi_value generalError = nullptr;
648     napi_value canceled = nullptr;
649     napi_value timeout = nullptr;
650     napi_value typeNotSupport = nullptr;
651     napi_value trustLevelNotSupport = nullptr;
652     napi_value busy = nullptr;
653     napi_value invalidParameters = nullptr;
654     napi_value locked = nullptr;
655     napi_value notEnrolled = nullptr;
656     napi_value canceledFromWidget = nullptr;
657     NAPI_CALL(env, napi_create_object(env, &resultCode));
658     NAPI_CALL(env, napi_create_int32(env, ResultCode::SUCCESS, &success));
659     NAPI_CALL(env, napi_create_int32(env, ResultCode::FAIL, &fail));
660     NAPI_CALL(env, napi_create_int32(env, ResultCode::GENERAL_ERROR, &generalError));
661     NAPI_CALL(env, napi_create_int32(env, ResultCode::CANCELED, &canceled));
662     NAPI_CALL(env, napi_create_int32(env, ResultCode::TIMEOUT, &timeout));
663     NAPI_CALL(env, napi_create_int32(env, ResultCode::TYPE_NOT_SUPPORT, &typeNotSupport));
664     NAPI_CALL(env, napi_create_int32(env, ResultCode::TRUST_LEVEL_NOT_SUPPORT, &trustLevelNotSupport));
665     NAPI_CALL(env, napi_create_int32(env, ResultCode::BUSY, &busy));
666     NAPI_CALL(env, napi_create_int32(env, ResultCode::INVALID_PARAMETERS, &invalidParameters));
667     NAPI_CALL(env, napi_create_int32(env, ResultCode::LOCKED, &locked));
668     NAPI_CALL(env, napi_create_int32(env, ResultCode::NOT_ENROLLED, &notEnrolled));
669     NAPI_CALL(env, napi_create_int32(env, ResultCode::CANCELED_FROM_WIDGET, &canceledFromWidget));
670     NAPI_CALL(env, napi_set_named_property(env, resultCode, "SUCCESS", success));
671     NAPI_CALL(env, napi_set_named_property(env, resultCode, "FAIL", fail));
672     NAPI_CALL(env, napi_set_named_property(env, resultCode, "GENERAL_ERROR", generalError));
673     NAPI_CALL(env, napi_set_named_property(env, resultCode, "CANCELED", canceled));
674     NAPI_CALL(env, napi_set_named_property(env, resultCode, "TIMEOUT", timeout));
675     NAPI_CALL(env, napi_set_named_property(env, resultCode, "TYPE_NOT_SUPPORT", typeNotSupport));
676     NAPI_CALL(env, napi_set_named_property(env, resultCode, "TRUST_LEVEL_NOT_SUPPORT", trustLevelNotSupport));
677     NAPI_CALL(env, napi_set_named_property(env, resultCode, "BUSY", busy));
678     NAPI_CALL(env, napi_set_named_property(env, resultCode, "INVALID_PARAMETERS", invalidParameters));
679     NAPI_CALL(env, napi_set_named_property(env, resultCode, "LOCKED", locked));
680     NAPI_CALL(env, napi_set_named_property(env, resultCode, "NOT_ENROLLED", notEnrolled));
681     NAPI_CALL(env, napi_set_named_property(env, resultCode, "CANCELED_FROM_WIDGET", canceledFromWidget));
682     return resultCode;
683 }
684 
UserAuthResultCodeConstructor(napi_env env)685 napi_value UserAuthResultCodeConstructor(napi_env env)
686 {
687     napi_value resultCode = nullptr;
688     napi_value success = nullptr;
689     napi_value fail = nullptr;
690     napi_value generalError = nullptr;
691     napi_value canceled = nullptr;
692     napi_value timeout = nullptr;
693     napi_value typeNotSupport = nullptr;
694     napi_value trustLevelNotSupport = nullptr;
695     napi_value busy = nullptr;
696     napi_value locked = nullptr;
697     napi_value notEnrolled = nullptr;
698     napi_value canceledFromWidget = nullptr;
699     NAPI_CALL(env, napi_create_object(env, &resultCode));
700     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(UserAuthResultCode::SUCCESS), &success));
701     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(UserAuthResultCode::FAIL), &fail));
702     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(UserAuthResultCode::GENERAL_ERROR), &generalError));
703     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(UserAuthResultCode::CANCELED), &canceled));
704     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(UserAuthResultCode::TIMEOUT), &timeout));
705     NAPI_CALL(env, napi_create_int32(env,
706         static_cast<int32_t>(UserAuthResultCode::TYPE_NOT_SUPPORT), &typeNotSupport));
707     NAPI_CALL(env, napi_create_int32(env,
708         static_cast<int32_t>(UserAuthResultCode::TRUST_LEVEL_NOT_SUPPORT), &trustLevelNotSupport));
709     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(UserAuthResultCode::BUSY), &busy));
710     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(UserAuthResultCode::LOCKED), &locked));
711     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(UserAuthResultCode::NOT_ENROLLED), &notEnrolled));
712     NAPI_CALL(env, napi_create_int32(env,
713         static_cast<int32_t>(UserAuthResultCode::CANCELED_FROM_WIDGET), &canceledFromWidget));
714     NAPI_CALL(env, napi_set_named_property(env, resultCode, "SUCCESS", success));
715     NAPI_CALL(env, napi_set_named_property(env, resultCode, "FAIL", fail));
716     NAPI_CALL(env, napi_set_named_property(env, resultCode, "GENERAL_ERROR", generalError));
717     NAPI_CALL(env, napi_set_named_property(env, resultCode, "CANCELED", canceled));
718     NAPI_CALL(env, napi_set_named_property(env, resultCode, "TIMEOUT", timeout));
719     NAPI_CALL(env, napi_set_named_property(env, resultCode, "TYPE_NOT_SUPPORT", typeNotSupport));
720     NAPI_CALL(env, napi_set_named_property(env, resultCode, "TRUST_LEVEL_NOT_SUPPORT", trustLevelNotSupport));
721     NAPI_CALL(env, napi_set_named_property(env, resultCode, "BUSY", busy));
722     NAPI_CALL(env, napi_set_named_property(env, resultCode, "LOCKED", locked));
723     NAPI_CALL(env, napi_set_named_property(env, resultCode, "NOT_ENROLLED", notEnrolled));
724     NAPI_CALL(env, napi_set_named_property(env, resultCode, "CANCELED_FROM_WIDGET", canceledFromWidget));
725     return resultCode;
726 }
727 
AuthenticationResultConstructor(napi_env env)728 napi_value AuthenticationResultConstructor(napi_env env)
729 {
730     napi_value resultCode = nullptr;
731     napi_value noSupport = nullptr;
732     napi_value success = nullptr;
733     napi_value compareFailure = nullptr;
734     napi_value canceled = nullptr;
735     napi_value timeout = nullptr;
736     napi_value cameraFail = nullptr;
737     napi_value busy = nullptr;
738     napi_value invalidParameters = nullptr;
739     napi_value locked = nullptr;
740     napi_value notEnrolled = nullptr;
741     napi_value generalError = nullptr;
742     NAPI_CALL(env, napi_create_object(env, &resultCode));
743     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthenticationResult::NO_SUPPORT), &noSupport));
744     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthenticationResult::SUCCESS), &success));
745     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthenticationResult::COMPARE_FAILURE),
746         &compareFailure));
747     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthenticationResult::CANCELED), &canceled));
748     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthenticationResult::TIMEOUT), &timeout));
749     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthenticationResult::CAMERA_FAIL), &cameraFail));
750     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthenticationResult::BUSY), &busy));
751     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthenticationResult::INVALID_PARAMETERS),
752         &invalidParameters));
753     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthenticationResult::LOCKED), &locked));
754     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthenticationResult::NOT_ENROLLED), &notEnrolled));
755     NAPI_CALL(env, napi_create_int32(env, static_cast<int32_t>(AuthenticationResult::GENERAL_ERROR), &generalError));
756     NAPI_CALL(env, napi_set_named_property(env, resultCode, "NO_SUPPORT", noSupport));
757     NAPI_CALL(env, napi_set_named_property(env, resultCode, "SUCCESS", success));
758     NAPI_CALL(env, napi_set_named_property(env, resultCode, "COMPARE_FAILURE", compareFailure));
759     NAPI_CALL(env, napi_set_named_property(env, resultCode, "CANCELED", canceled));
760     NAPI_CALL(env, napi_set_named_property(env, resultCode, "TIMEOUT", timeout));
761     NAPI_CALL(env, napi_set_named_property(env, resultCode, "CAMERA_FAIL", cameraFail));
762     NAPI_CALL(env, napi_set_named_property(env, resultCode, "BUSY", busy));
763     NAPI_CALL(env, napi_set_named_property(env, resultCode, "INVALID_PARAMETERS", invalidParameters));
764     NAPI_CALL(env, napi_set_named_property(env, resultCode, "LOCKED", locked));
765     NAPI_CALL(env, napi_set_named_property(env, resultCode, "NOT_ENROLLED", notEnrolled));
766     NAPI_CALL(env, napi_set_named_property(env, resultCode, "GENERAL_ERROR", generalError));
767     return resultCode;
768 }
769 
FaceTipsCodeConstructor(napi_env env)770 napi_value FaceTipsCodeConstructor(napi_env env)
771 {
772     napi_value faceTipsCode = nullptr;
773     napi_value faceAuthTipTooBright = nullptr;
774     napi_value faceAuthTipTooDark = nullptr;
775     napi_value faceAuthTipTooClose = nullptr;
776     napi_value faceAuthTipTooFar = nullptr;
777     napi_value faceAuthTipTooHigh = nullptr;
778     napi_value faceAuthTipTooLow = nullptr;
779     napi_value faceAuthTipTooRight = nullptr;
780     napi_value faceAuthTipTooLeft = nullptr;
781     napi_value faceAuthTipTooMuchMotion = nullptr;
782     napi_value faceAuthTipPoorGaze = nullptr;
783     napi_value faceAuthTipNotDetected = nullptr;
784     NAPI_CALL(env, napi_create_object(env, &faceTipsCode));
785     NAPI_CALL(env, napi_create_int32(env, FaceTipsCode::FACE_AUTH_TIP_TOO_BRIGHT, &faceAuthTipTooBright));
786     NAPI_CALL(env, napi_create_int32(env, FaceTipsCode::FACE_AUTH_TIP_TOO_DARK, &faceAuthTipTooDark));
787     NAPI_CALL(env, napi_create_int32(env, FaceTipsCode::FACE_AUTH_TIP_TOO_CLOSE, &faceAuthTipTooClose));
788     NAPI_CALL(env, napi_create_int32(env, FaceTipsCode::FACE_AUTH_TIP_TOO_FAR, &faceAuthTipTooFar));
789     NAPI_CALL(env, napi_create_int32(env, FaceTipsCode::FACE_AUTH_TIP_TOO_HIGH, &faceAuthTipTooHigh));
790     NAPI_CALL(env, napi_create_int32(env, FaceTipsCode::FACE_AUTH_TIP_TOO_LOW, &faceAuthTipTooLow));
791     NAPI_CALL(env, napi_create_int32(env, FaceTipsCode::FACE_AUTH_TIP_TOO_RIGHT, &faceAuthTipTooRight));
792     NAPI_CALL(env, napi_create_int32(env, FaceTipsCode::FACE_AUTH_TIP_TOO_LEFT, &faceAuthTipTooLeft));
793     NAPI_CALL(env, napi_create_int32(env, FaceTipsCode::FACE_AUTH_TIP_TOO_MUCH_MOTION, &faceAuthTipTooMuchMotion));
794     NAPI_CALL(env, napi_create_int32(env, FaceTipsCode::FACE_AUTH_TIP_POOR_GAZE, &faceAuthTipPoorGaze));
795     NAPI_CALL(env, napi_create_int32(env, FaceTipsCode::FACE_AUTH_TIP_NOT_DETECTED, &faceAuthTipNotDetected));
796     NAPI_CALL(env, napi_set_named_property(env, faceTipsCode, "FACE_AUTH_TIP_TOO_BRIGHT", faceAuthTipTooBright));
797     NAPI_CALL(env, napi_set_named_property(env, faceTipsCode, "FACE_AUTH_TIP_TOO_DARK", faceAuthTipTooDark));
798     NAPI_CALL(env, napi_set_named_property(env, faceTipsCode, "FACE_AUTH_TIP_TOO_CLOSE", faceAuthTipTooClose));
799     NAPI_CALL(env, napi_set_named_property(env, faceTipsCode, "FACE_AUTH_TIP_TOO_FAR", faceAuthTipTooFar));
800     NAPI_CALL(env, napi_set_named_property(env, faceTipsCode, "FACE_AUTH_TIP_TOO_HIGH", faceAuthTipTooHigh));
801     NAPI_CALL(env, napi_set_named_property(env, faceTipsCode, "FACE_AUTH_TIP_TOO_LOW", faceAuthTipTooLow));
802     NAPI_CALL(env, napi_set_named_property(env, faceTipsCode, "FACE_AUTH_TIP_TOO_RIGHT", faceAuthTipTooRight));
803     NAPI_CALL(env, napi_set_named_property(env, faceTipsCode, "FACE_AUTH_TIP_TOO_LEFT", faceAuthTipTooLeft));
804     NAPI_CALL(env, napi_set_named_property(env, faceTipsCode,
805         "FACE_AUTH_TIP_TOO_MUCH_MOTION", faceAuthTipTooMuchMotion));
806     NAPI_CALL(env, napi_set_named_property(env, faceTipsCode, "FACE_AUTH_TIP_POOR_GAZE", faceAuthTipPoorGaze));
807     NAPI_CALL(env, napi_set_named_property(env, faceTipsCode, "FACE_AUTH_TIP_NOT_DETECTED", faceAuthTipNotDetected));
808     return faceTipsCode;
809 }
810 
FingerprintTipsConstructorForKits(napi_env env)811 napi_value FingerprintTipsConstructorForKits(napi_env env)
812 {
813     napi_value fingerprintTips = nullptr;
814     napi_value fingerprintTipGood = nullptr;
815     napi_value fingerprintTipImagerDirty = nullptr;
816     napi_value fingerprintTipInsufficient = nullptr;
817     napi_value fingerprintTipPartial = nullptr;
818     napi_value fingerprintTipTooFast = nullptr;
819     napi_value fingerprintTipTooSlow = nullptr;
820     NAPI_CALL(env, napi_create_object(env, &fingerprintTips));
821     NAPI_CALL(env, napi_create_int32(env, FingerprintTips::FINGERPRINT_AUTH_TIP_GOOD, &fingerprintTipGood));
822     NAPI_CALL(env, napi_create_int32(env, FingerprintTips::FINGERPRINT_AUTH_TIP_IMAGER_DIRTY,
823         &fingerprintTipImagerDirty));
824     NAPI_CALL(env, napi_create_int32(env, FingerprintTips::FINGERPRINT_AUTH_TIP_INSUFFICIENT,
825         &fingerprintTipInsufficient));
826     NAPI_CALL(env, napi_create_int32(env, FingerprintTips::FINGERPRINT_AUTH_TIP_PARTIAL, &fingerprintTipPartial));
827     NAPI_CALL(env, napi_create_int32(env, FingerprintTips::FINGERPRINT_AUTH_TIP_TOO_FAST, &fingerprintTipTooFast));
828     NAPI_CALL(env, napi_create_int32(env, FingerprintTips::FINGERPRINT_AUTH_TIP_TOO_SLOW, &fingerprintTipTooSlow));
829     NAPI_CALL(env, napi_set_named_property(env, fingerprintTips, "FINGERPRINT_AUTH_TIP_GOOD", fingerprintTipGood));
830     NAPI_CALL(env, napi_set_named_property(env, fingerprintTips,
831         "FINGERPRINT_AUTH_TIP_DIRTY", fingerprintTipImagerDirty));
832     NAPI_CALL(env, napi_set_named_property(env, fingerprintTips,
833         "FINGERPRINT_AUTH_TIP_INSUFFICIENT", fingerprintTipInsufficient));
834     NAPI_CALL(env, napi_set_named_property(env, fingerprintTips,
835         "FINGERPRINT_AUTH_TIP_PARTIAL", fingerprintTipPartial));
836     NAPI_CALL(env, napi_set_named_property(env, fingerprintTips,
837         "FINGERPRINT_AUTH_TIP_TOO_FAST", fingerprintTipTooFast));
838     NAPI_CALL(env, napi_set_named_property(env, fingerprintTips,
839         "FINGERPRINT_AUTH_TIP_TOO_SLOW", fingerprintTipTooSlow));
840     return fingerprintTips;
841 }
842 
UserAuthTypeConstructor(napi_env env)843 napi_value UserAuthTypeConstructor(napi_env env)
844 {
845     napi_value userAuthType = nullptr;
846     napi_value pin = nullptr;
847     napi_value face = nullptr;
848     napi_value fingerprint = nullptr;
849     NAPI_CALL(env, napi_create_object(env, &userAuthType));
850     NAPI_CALL(env, napi_create_int32(env, AuthType::PIN, &pin));
851     NAPI_CALL(env, napi_create_int32(env, AuthType::FACE, &face));
852     NAPI_CALL(env, napi_create_int32(env, AuthType::FINGERPRINT, &fingerprint));
853     NAPI_CALL(env, napi_set_named_property(env, userAuthType, "PIN", pin));
854     NAPI_CALL(env, napi_set_named_property(env, userAuthType, "FACE", face));
855     NAPI_CALL(env, napi_set_named_property(env, userAuthType, "FINGERPRINT", fingerprint));
856     return userAuthType;
857 }
858 
NoticeTypeConstructor(napi_env env)859 napi_value NoticeTypeConstructor(napi_env env)
860 {
861     napi_value noticeType = nullptr;
862     napi_value widget_notice = nullptr;
863     NAPI_CALL(env, napi_create_object(env, &noticeType));
864     NAPI_CALL(env, napi_create_int32(env, NoticeType::WIDGET_NOTICE, &widget_notice));
865     NAPI_CALL(env, napi_set_named_property(env, noticeType, "WIDGET_NOTICE", widget_notice));
866     return noticeType;
867 }
868 
WindowModeTypeConstructor(napi_env env)869 napi_value WindowModeTypeConstructor(napi_env env)
870 {
871     napi_value windowModeType = nullptr;
872     napi_value dialog_box = nullptr;
873     napi_value fullscreen = nullptr;
874     NAPI_CALL(env, napi_create_object(env, &windowModeType));
875     NAPI_CALL(env, napi_create_int32(env, WindowModeType::DIALOG_BOX, &dialog_box));
876     NAPI_CALL(env, napi_create_int32(env, WindowModeType::FULLSCREEN, &fullscreen));
877     NAPI_CALL(env, napi_set_named_property(env, windowModeType, "DIALOG_BOX", dialog_box));
878     NAPI_CALL(env, napi_set_named_property(env, windowModeType, "FULLSCREEN", fullscreen));
879     return windowModeType;
880 }
881 
GetCtor(napi_env env)882 napi_value GetCtor(napi_env env)
883 {
884     IAM_LOGI("start");
885     napi_value cons = nullptr;
886     napi_property_descriptor clzDes[] = {
887         DECLARE_NAPI_FUNCTION("getVersion", UserAuth::GetVersion),
888         DECLARE_NAPI_FUNCTION("getAvailableStatus", UserAuth::GetAvailableStatus),
889         DECLARE_NAPI_FUNCTION("auth", UserAuth::Auth),
890         DECLARE_NAPI_FUNCTION("cancelAuth", UserAuth::CancelAuth),
891     };
892     NAPI_CALL(env, napi_define_class(env, "UserAuth", NAPI_AUTO_LENGTH, UserAuthServiceConstructor, nullptr,
893         sizeof(clzDes) / sizeof(napi_property_descriptor), clzDes, &cons));
894     return cons;
895 }
896 
GetCtorForApi6(napi_env env)897 napi_value GetCtorForApi6(napi_env env)
898 {
899     napi_value cons = nullptr;
900     napi_property_descriptor clzDes[] = {
901         DECLARE_NAPI_FUNCTION("execute", UserAuth::Execute),
902     };
903     NAPI_CALL(env, napi_define_class(env, "UserAuth", NAPI_AUTO_LENGTH, UserAuthServiceConstructor, nullptr,
904         sizeof(clzDes) / sizeof(napi_property_descriptor), clzDes, &cons));
905     return cons;
906 }
907 
ConstructorForApi6(napi_env env,napi_callback_info info)908 napi_value ConstructorForApi6(napi_env env, napi_callback_info info)
909 {
910     napi_value userAuthForApi6 = nullptr;
911     NAPI_CALL(env, napi_new_instance(env, GetCtorForApi6(env), 0, nullptr, &userAuthForApi6));
912     return userAuthForApi6;
913 }
914 
UserAuthInit(napi_env env,napi_value exports)915 napi_value UserAuthInit(napi_env env, napi_value exports)
916 {
917     IAM_LOGI("start");
918     napi_status status;
919     napi_property_descriptor exportFuncs[] = {
920         DECLARE_NAPI_FUNCTION("getAuthenticator", UserAuth::ConstructorForApi6),
921         DECLARE_NAPI_FUNCTION("getAvailableStatus", UserAuth::GetAvailableStatusV9),
922         DECLARE_NAPI_FUNCTION("getAuthInstance", UserAuth::GetAuthInstanceV9),
923         DECLARE_NAPI_FUNCTION("getUserAuthInstance", UserAuth::GetUserAuthInstanceV10),
924         DECLARE_NAPI_FUNCTION("getUserAuthWidgetMgr", UserAuth::GetUserAuthWidgetMgrV10),
925         DECLARE_NAPI_FUNCTION("sendNotice", UserAuth::SendNotice),
926     };
927     status = napi_define_properties(env, exports,
928         sizeof(exportFuncs) / sizeof(napi_property_descriptor), exportFuncs);
929     if (status != napi_ok) {
930         IAM_LOGE("napi_define_properties failed");
931         NAPI_CALL(env, status);
932     }
933     status = napi_set_named_property(env, exports, "UserAuth", GetCtor(env));
934     if (status != napi_ok) {
935         IAM_LOGE("napi_set_named_property failed");
936         NAPI_CALL(env, status);
937     }
938     return exports;
939 }
940 
EnumExport(napi_env env,napi_value exports)941 napi_value EnumExport(napi_env env, napi_value exports)
942 {
943     napi_property_descriptor descriptors[] = {
944         DECLARE_NAPI_PROPERTY("AuthTrustLevel", AuthTrustLevelConstructor(env)),
945         DECLARE_NAPI_PROPERTY("ResultCode", ResultCodeConstructor(env)),
946         DECLARE_NAPI_PROPERTY("UserAuthResultCode", UserAuthResultCodeConstructor(env)),
947         DECLARE_NAPI_PROPERTY("FingerprintTips", FingerprintTipsConstructorForKits(env)),
948         DECLARE_NAPI_PROPERTY("UserAuthType", UserAuthTypeConstructor(env)),
949         DECLARE_NAPI_PROPERTY("FaceTips", FaceTipsCodeConstructor(env)),
950         DECLARE_NAPI_PROPERTY("AuthenticationResult", AuthenticationResultConstructor(env)),
951         //add
952         DECLARE_NAPI_PROPERTY("NoticeType", NoticeTypeConstructor(env)),
953         DECLARE_NAPI_PROPERTY("WindowModeType", WindowModeTypeConstructor(env)),
954     };
955     NAPI_CALL(env, napi_define_properties(env, exports,
956         sizeof(descriptors) / sizeof(napi_property_descriptor), descriptors));
957     return exports;
958 }
959 
ModuleInit(napi_env env,napi_value exports)960 napi_value ModuleInit(napi_env env, napi_value exports)
961 {
962     napi_value val = UserAuthInit(env, exports);
963     return EnumExport(env, val);
964 }
965 } // namespace
966 
RegisterModule(void)967 extern "C" __attribute__((constructor)) void RegisterModule(void)
968 {
969     napi_module module = {
970         .nm_version = 1,
971         .nm_flags = 0,
972         .nm_filename = nullptr,
973         .nm_register_func = ModuleInit,
974         .nm_modname = "userIAM.userAuth",
975         .nm_priv = nullptr,
976         .reserved = {}
977     };
978     napi_module_register(&module);
979 }
980 } // namespace UserAuth
981 } // namespace UserIam
982 } // namespace OHOS
983