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 #include "user_idm_callback_service.h"
17
18 #include "callback_manager.h"
19 #include "iam_logger.h"
20 #include "iam_ptr.h"
21
22 #define LOG_TAG "USER_IDM_SDK"
23
24 namespace OHOS {
25 namespace UserIam {
26 namespace UserAuth {
IdmCallbackService(const std::shared_ptr<UserIdmClientCallback> & impl)27 IdmCallbackService::IdmCallbackService(const std::shared_ptr<UserIdmClientCallback> &impl)
28 : idmClientCallback_(impl),
29 iamHitraceHelper_(Common::MakeShared<UserIam::UserAuth::IamHitraceHelper>("IDM InnerKit"))
30 {
31 CallbackManager::CallbackAction action = [impl]() {
32 if (impl != nullptr) {
33 IAM_LOGI("user idm service death, return default result to caller");
34 Attributes extraInfo;
35 impl->OnResult(GENERAL_ERROR, extraInfo);
36 }
37 };
38 CallbackManager::GetInstance().AddCallback(reinterpret_cast<uintptr_t>(this), action);
39 }
40
~IdmCallbackService()41 IdmCallbackService::~IdmCallbackService()
42 {
43 CallbackManager::GetInstance().RemoveCallback(reinterpret_cast<uintptr_t>(this));
44 }
45
OnResult(int32_t result,const Attributes & extraInfo)46 void IdmCallbackService::OnResult(int32_t result, const Attributes &extraInfo)
47 {
48 IAM_LOGI("start, result:%{public}d", result);
49 iamHitraceHelper_ = nullptr;
50 if (idmClientCallback_ == nullptr) {
51 IAM_LOGE("idm client callback is nullptr");
52 return;
53 }
54 idmClientCallback_->OnResult(result, extraInfo);
55 }
56
OnAcquireInfo(int32_t module,int32_t acquireInfo,const Attributes & extraInfo)57 void IdmCallbackService::OnAcquireInfo(int32_t module, int32_t acquireInfo, const Attributes &extraInfo)
58 {
59 IAM_LOGI("start, module:%{public}d acquireInfo:%{public}d", module, acquireInfo);
60 if (idmClientCallback_ == nullptr) {
61 IAM_LOGE("idm client callback is nullptr");
62 return;
63 }
64 idmClientCallback_->OnAcquireInfo(module, static_cast<uint32_t>(acquireInfo), extraInfo);
65 }
66
IdmGetCredInfoCallbackService(const std::shared_ptr<GetCredentialInfoCallback> & impl)67 IdmGetCredInfoCallbackService::IdmGetCredInfoCallbackService(
68 const std::shared_ptr<GetCredentialInfoCallback> &impl) : getCredInfoCallback_(impl)
69 {
70 CallbackManager::CallbackAction action = [impl]() {
71 if (impl != nullptr) {
72 IAM_LOGI("user idm service death, return default cred info result to caller");
73 std::vector<CredentialInfo> infoList;
74 impl->OnCredentialInfo(infoList);
75 }
76 };
77 CallbackManager::GetInstance().AddCallback(reinterpret_cast<uintptr_t>(this), action);
78 }
79
~IdmGetCredInfoCallbackService()80 IdmGetCredInfoCallbackService::~IdmGetCredInfoCallbackService()
81 {
82 CallbackManager::GetInstance().RemoveCallback(reinterpret_cast<uintptr_t>(this));
83 }
84
OnCredentialInfos(const std::vector<CredentialInfo> & credInfoList)85 void IdmGetCredInfoCallbackService::OnCredentialInfos(const std::vector<CredentialInfo> &credInfoList)
86 {
87 IAM_LOGI("start, cred info vector size:%{public}zu", credInfoList.size());
88 if (getCredInfoCallback_ == nullptr) {
89 IAM_LOGE("getCredInfoCallback is nullptr");
90 return;
91 }
92
93 getCredInfoCallback_->OnCredentialInfo(credInfoList);
94 }
95
IdmGetSecureUserInfoCallbackService(const std::shared_ptr<GetSecUserInfoCallback> & impl)96 IdmGetSecureUserInfoCallbackService::IdmGetSecureUserInfoCallbackService(
97 const std::shared_ptr<GetSecUserInfoCallback> &impl) : getSecInfoCallback_(impl)
98 {
99 CallbackManager::CallbackAction action = [impl]() {
100 if (impl != nullptr) {
101 IAM_LOGI("user idm service death, return default secure info to caller");
102 SecUserInfo info = {};
103 impl->OnSecUserInfo(info);
104 }
105 };
106 CallbackManager::GetInstance().AddCallback(reinterpret_cast<uintptr_t>(this), action);
107 }
108
~IdmGetSecureUserInfoCallbackService()109 IdmGetSecureUserInfoCallbackService::~IdmGetSecureUserInfoCallbackService()
110 {
111 CallbackManager::GetInstance().RemoveCallback(reinterpret_cast<uintptr_t>(this));
112 }
113
OnSecureUserInfo(const SecUserInfo & secUserInfo)114 void IdmGetSecureUserInfoCallbackService::OnSecureUserInfo(const SecUserInfo &secUserInfo)
115 {
116 IAM_LOGI("start, enrolled info vector size:%{public}zu", secUserInfo.enrolledInfo.size());
117 if (getSecInfoCallback_ == nullptr) {
118 IAM_LOGE("getSecInfoCallback_ is nullptr");
119 return;
120 }
121
122 getSecInfoCallback_->OnSecUserInfo(secUserInfo);
123 }
124 } // namespace UserAuth
125 } // namespace UserIam
126 } // namespace OHOS