• 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 #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 resultCode,const std::vector<uint8_t> & extraInfo)46 int32_t IdmCallbackService::OnResult(int32_t resultCode, const std::vector<uint8_t> &extraInfo)
47 {
48     IAM_LOGI("start, result:%{public}d", resultCode);
49     iamHitraceHelper_ = nullptr;
50     if (idmClientCallback_ == nullptr) {
51         IAM_LOGE("idm client callback is nullptr");
52         return GENERAL_ERROR;
53     }
54     Attributes attribute(extraInfo);
55     idmClientCallback_->OnResult(resultCode, attribute);
56     return SUCCESS;
57 }
58 
OnAcquireInfo(int32_t module,int32_t acquireInfo,const std::vector<uint8_t> & extraInfo)59 int32_t IdmCallbackService::OnAcquireInfo(int32_t module, int32_t acquireInfo, const std::vector<uint8_t> &extraInfo)
60 {
61     IAM_LOGI("start, module:%{public}d acquireInfo:%{public}d", module, acquireInfo);
62     if (idmClientCallback_ == nullptr) {
63         IAM_LOGE("idm client callback is nullptr");
64         return GENERAL_ERROR;
65     }
66     Attributes attribute(extraInfo);
67     idmClientCallback_->OnAcquireInfo(module, static_cast<uint32_t>(acquireInfo), attribute);
68     return SUCCESS;
69 }
70 
CallbackEnter(uint32_t code)71 int32_t IdmCallbackService::CallbackEnter([[maybe_unused]] uint32_t code)
72 {
73     IAM_LOGI("start, code:%{public}u", code);
74     return SUCCESS;
75 }
76 
CallbackExit(uint32_t code,int32_t result)77 int32_t IdmCallbackService::CallbackExit([[maybe_unused]] uint32_t code, [[maybe_unused]] int32_t result)
78 {
79     IAM_LOGI("leave, code:%{public}u, result:%{public}d", code, result);
80     return SUCCESS;
81 }
82 
IdmGetCredInfoCallbackService(const std::shared_ptr<GetCredentialInfoCallback> & impl)83 IdmGetCredInfoCallbackService::IdmGetCredInfoCallbackService(
84     const std::shared_ptr<GetCredentialInfoCallback> &impl) : getCredInfoCallback_(impl)
85 {
86     CallbackManager::CallbackAction action = [impl]() {
87         if (impl != nullptr) {
88             IAM_LOGI("user idm service death, return default cred info result to caller");
89             std::vector<CredentialInfo> infoList;
90             impl->OnCredentialInfo(GENERAL_ERROR, infoList);
91         }
92     };
93     CallbackManager::GetInstance().AddCallback(reinterpret_cast<uintptr_t>(this), action);
94 }
95 
~IdmGetCredInfoCallbackService()96 IdmGetCredInfoCallbackService::~IdmGetCredInfoCallbackService()
97 {
98     CallbackManager::GetInstance().RemoveCallback(reinterpret_cast<uintptr_t>(this));
99 }
100 
OnCredentialInfos(int32_t resultCode,const std::vector<IpcCredentialInfo> & ipcCredInfoList)101 int32_t IdmGetCredInfoCallbackService::OnCredentialInfos(int32_t resultCode,
102     const std::vector<IpcCredentialInfo> &ipcCredInfoList)
103 {
104     IAM_LOGD("start, cred info vector size:%{public}zu", ipcCredInfoList.size());
105     if (getCredInfoCallback_ == nullptr) {
106         IAM_LOGE("getCredInfoCallback is nullptr");
107         return GENERAL_ERROR;
108     }
109 
110     std::vector<CredentialInfo> credInfoList;
111     for (auto &iter : ipcCredInfoList) {
112         CredentialInfo credentialInfo;
113         credentialInfo.authType = static_cast<AuthType>(iter.authType);
114         credentialInfo.pinType = static_cast<PinSubType>(iter.pinType);
115         credentialInfo.credentialId = iter.credentialId;
116         credentialInfo.templateId = iter.templateId;
117         credentialInfo.isAbandoned = iter.isAbandoned;
118         credentialInfo.validityPeriod = iter.validityPeriod;
119         credInfoList.push_back(credentialInfo);
120     }
121     getCredInfoCallback_->OnCredentialInfo(resultCode, credInfoList);
122     return SUCCESS;
123 }
124 
CallbackEnter(uint32_t code)125 int32_t IdmGetCredInfoCallbackService::CallbackEnter([[maybe_unused]] uint32_t code)
126 {
127     IAM_LOGI("start, code:%{public}u", code);
128     return SUCCESS;
129 }
130 
CallbackExit(uint32_t code,int32_t result)131 int32_t IdmGetCredInfoCallbackService::CallbackExit([[maybe_unused]] uint32_t code, [[maybe_unused]] int32_t result)
132 {
133     IAM_LOGI("leave, code:%{public}u, result:%{public}d", code, result);
134     return SUCCESS;
135 }
136 
IdmGetSecureUserInfoCallbackService(const std::shared_ptr<GetSecUserInfoCallback> & impl)137 IdmGetSecureUserInfoCallbackService::IdmGetSecureUserInfoCallbackService(
138     const std::shared_ptr<GetSecUserInfoCallback> &impl) : getSecInfoCallback_(impl)
139 {
140     CallbackManager::CallbackAction action = [impl]() {
141         if (impl != nullptr) {
142             IAM_LOGI("user idm service death, return default secure info to caller");
143             SecUserInfo info = {};
144             impl->OnSecUserInfo(GENERAL_ERROR, info);
145         }
146     };
147     CallbackManager::GetInstance().AddCallback(reinterpret_cast<uintptr_t>(this), action);
148 }
149 
~IdmGetSecureUserInfoCallbackService()150 IdmGetSecureUserInfoCallbackService::~IdmGetSecureUserInfoCallbackService()
151 {
152     CallbackManager::GetInstance().RemoveCallback(reinterpret_cast<uintptr_t>(this));
153 }
154 
OnSecureUserInfo(int32_t resultCode,const IpcSecUserInfo & ipcSecUserInfo)155 int32_t IdmGetSecureUserInfoCallbackService::OnSecureUserInfo(int32_t resultCode, const IpcSecUserInfo &ipcSecUserInfo)
156 {
157     IAM_LOGI("start, enrolled info vector size:%{public}zu", ipcSecUserInfo.enrolledInfo.size());
158     if (getSecInfoCallback_ == nullptr) {
159         IAM_LOGE("getSecInfoCallback_ is nullptr");
160         return GENERAL_ERROR;
161     }
162 
163     SecUserInfo secUserInfo = {};
164     secUserInfo.secureUid = ipcSecUserInfo.secureUid;
165     for (auto &iter : ipcSecUserInfo.enrolledInfo) {
166         EnrolledInfo enrolledInfo;
167         enrolledInfo.authType = static_cast<AuthType>(iter.authType);
168         enrolledInfo.enrolledId = iter.enrolledId;
169         secUserInfo.enrolledInfo.push_back(enrolledInfo);
170     }
171     getSecInfoCallback_->OnSecUserInfo(resultCode, secUserInfo);
172     return SUCCESS;
173 }
174 
CallbackEnter(uint32_t code)175 int32_t IdmGetSecureUserInfoCallbackService::CallbackEnter([[maybe_unused]] uint32_t code)
176 {
177     IAM_LOGI("start, code:%{public}u", code);
178     return SUCCESS;
179 }
180 
CallbackExit(uint32_t code,int32_t result)181 int32_t IdmGetSecureUserInfoCallbackService::CallbackExit([[maybe_unused]] uint32_t code,
182     [[maybe_unused]] int32_t result)
183 {
184     IAM_LOGI("leave, code:%{public}u, result:%{public}d", code, result);
185     return SUCCESS;
186 }
187 } // namespace UserAuth
188 } // namespace UserIam
189 } // namespace OHOS