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