• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2025 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 "account_iam_callback_service.h"
17 
18 #include "account_error_no.h"
19 #include "account_iam_client.h"
20 #include "account_log_wrapper.h"
21 #include "domain_account_client.h"
22 
23 namespace OHOS {
24 namespace AccountSA {
IDMCallbackService(int32_t userId,const std::shared_ptr<IDMCallback> & callback)25 IDMCallbackService::IDMCallbackService(int32_t userId, const std::shared_ptr<IDMCallback> &callback)
26     : userId_(userId), callback_(callback)
27 {}
28 
~IDMCallbackService()29 IDMCallbackService::~IDMCallbackService()
30 {
31     if (!isCalled_ && (callback_ != nullptr)) {
32         ACCOUNT_LOGW("No valid result returned because system exception");
33         Attributes emptyAttributes;
34         callback_->OnResult(ERR_ACCOUNT_ZIDL_ACCOUNT_SERVICE_ERROR, emptyAttributes);
35     }
36 }
37 
OnAcquireInfo(int32_t module,uint32_t acquireInfo,const std::vector<uint8_t> & extraInfoBuffer)38 ErrCode IDMCallbackService::OnAcquireInfo(
39     int32_t module, uint32_t acquireInfo, const std::vector<uint8_t>& extraInfoBuffer)
40 {
41     if (callback_ == nullptr) {
42         ACCOUNT_LOGE("callback is nullptr");
43         return ERR_INVALID_VALUE;
44     }
45     Attributes extraInfo(extraInfoBuffer);
46     callback_->OnAcquireInfo(module, acquireInfo, extraInfo);
47     return ERR_OK;
48 }
49 
OnResult(int32_t resultCode,const std::vector<uint8_t> & extraInfoBuffer)50 ErrCode IDMCallbackService::OnResult(int32_t resultCode, const std::vector<uint8_t>& extraInfoBuffer)
51 {
52     isCalled_ = true;
53     if (callback_ == nullptr) {
54         ACCOUNT_LOGE("callback is nullptr");
55         return ERR_INVALID_VALUE;
56     }
57     if (resultCode != 0) {
58         ACCOUNT_LOGE("idm operation failure, localId: %{public}d", userId_);
59     }
60     Attributes extraInfo(extraInfoBuffer);
61     callback_->OnResult(resultCode, extraInfo);
62     return ERR_OK;
63 }
64 
GetCredInfoCallbackService(const std::shared_ptr<GetCredInfoCallback> & callback)65 GetCredInfoCallbackService::GetCredInfoCallbackService(const std::shared_ptr<GetCredInfoCallback> &callback)
66     : callback_(callback)
67 {}
68 
~GetCredInfoCallbackService()69 GetCredInfoCallbackService::~GetCredInfoCallbackService()
70 {
71     if (!isCalled_ && (callback_ != nullptr)) {
72         ACCOUNT_LOGW("No valid result returned because system exception");
73         std::vector<CredentialInfo> emptyInfoList;
74         callback_->OnCredentialInfo(ERR_ACCOUNT_ZIDL_ACCOUNT_SERVICE_ERROR, emptyInfoList);
75     }
76 }
77 
OnCredentialInfo(int32_t resultCode,const std::vector<CredentialInfoIam> & infoList)78 ErrCode GetCredInfoCallbackService::OnCredentialInfo(int32_t resultCode, const std::vector<CredentialInfoIam>& infoList)
79 {
80     isCalled_ = true;
81     if (callback_ == nullptr) {
82         ACCOUNT_LOGE("callback is nullptr");
83         return ERR_INVALID_VALUE;
84     }
85     auto convertedInfoList = ConvertToCredentialInfoList(infoList);
86     callback_->OnCredentialInfo(resultCode, convertedInfoList);
87     return ERR_OK;
88 }
89 
GetSetPropCallbackService(const std::shared_ptr<GetSetPropCallback> & callback)90 GetSetPropCallbackService::GetSetPropCallbackService(const std::shared_ptr<GetSetPropCallback> &callback)
91     : callback_(callback)
92 {}
93 
~GetSetPropCallbackService()94 GetSetPropCallbackService::~GetSetPropCallbackService()
95 {
96     if (!isCalled_ && (callback_ != nullptr)) {
97         ACCOUNT_LOGW("No valid result returned because system exception");
98         Attributes emptyAttributes;
99         callback_->OnResult(ERR_ACCOUNT_ZIDL_ACCOUNT_SERVICE_ERROR, emptyAttributes);
100     }
101 }
102 
OnResult(int32_t resultCode,const std::vector<uint8_t> & extraInfoBuffer)103 ErrCode GetSetPropCallbackService::OnResult(int32_t resultCode, const std::vector<uint8_t>& extraInfoBuffer)
104 {
105     isCalled_ = true;
106     if (callback_ == nullptr) {
107         ACCOUNT_LOGE("callback is nullptr");
108         return ERR_INVALID_VALUE;
109     }
110     Attributes extraInfo(extraInfoBuffer);
111     callback_->OnResult(resultCode, extraInfo);
112     return ERR_OK;
113 }
114 
GetEnrolledIdCallbackService(const std::shared_ptr<GetEnrolledIdCallback> & callback)115 GetEnrolledIdCallbackService::GetEnrolledIdCallbackService(const std::shared_ptr<GetEnrolledIdCallback> &callback)
116     : callback_(callback)
117 {}
118 
~GetEnrolledIdCallbackService()119 GetEnrolledIdCallbackService::~GetEnrolledIdCallbackService()
120 {
121     if (!isCalled_ && (callback_ != nullptr)) {
122         ACCOUNT_LOGW("No valid result returned because system exception");
123         uint64_t enrolledId = 0;
124         callback_->OnEnrolledId(ERR_ACCOUNT_ZIDL_ACCOUNT_SERVICE_ERROR, enrolledId);
125     }
126 }
127 
OnEnrolledId(int32_t resultCode,uint64_t enrolledId)128 ErrCode GetEnrolledIdCallbackService::OnEnrolledId(int32_t resultCode, uint64_t enrolledId)
129 {
130     isCalled_ = true;
131     if (callback_ == nullptr) {
132         ACCOUNT_LOGE("Callback is nullptr");
133         return ERR_INVALID_VALUE;
134     }
135     callback_->OnEnrolledId(resultCode, enrolledId);
136     return ERR_OK;
137 }
138 
PreRemoteAuthCallbackService(const std::shared_ptr<PreRemoteAuthCallback> & callback)139 PreRemoteAuthCallbackService::PreRemoteAuthCallbackService(
140     const std::shared_ptr<PreRemoteAuthCallback> &callback) : callback_(callback)
141 {}
142 
~PreRemoteAuthCallbackService()143 PreRemoteAuthCallbackService::~PreRemoteAuthCallbackService()
144 {
145     if (!isCalled_ && (callback_ != nullptr)) {
146         ACCOUNT_LOGW("No valid result returned because system exception");
147         callback_->OnResult(ERR_ACCOUNT_ZIDL_ACCOUNT_SERVICE_ERROR);
148     }
149 }
150 
OnResult(int32_t resultCode)151 ErrCode PreRemoteAuthCallbackService::OnResult(int32_t resultCode)
152 {
153     isCalled_ = true;
154     if (callback_ == nullptr) {
155         ACCOUNT_LOGE("Callback is nullptr.");
156         return ERR_INVALID_VALUE;
157     }
158     callback_->OnResult(resultCode);
159     return ERR_OK;
160 }
161 
DomainAuthCallbackAdapter(const std::shared_ptr<IDMCallback> & callback)162 DomainAuthCallbackAdapter::DomainAuthCallbackAdapter(
163     const std::shared_ptr<IDMCallback> &callback) : callback_(callback)
164 {}
165 
OnResult(const int32_t errCode,Parcel & parcel)166 void DomainAuthCallbackAdapter::OnResult(const int32_t errCode, Parcel &parcel)
167 {
168     if (callback_ == nullptr) {
169         ACCOUNT_LOGE("callback is nullptr");
170         return;
171     }
172     Attributes attr;
173     std::shared_ptr<DomainAuthResult> authResult(DomainAuthResult::Unmarshalling(parcel));
174     if (authResult == nullptr) {
175         ACCOUNT_LOGE("authResult is nullptr");
176         callback_->OnResult(ERR_ACCOUNT_COMMON_READ_PARCEL_ERROR, attr);
177         return;
178     }
179     attr.SetUint8ArrayValue(Attributes::AttributeKey::ATTR_SIGNATURE, (*authResult).token);
180     attr.SetInt32Value(Attributes::AttributeKey::ATTR_REMAIN_TIMES, (*authResult).authStatusInfo.remainingTimes);
181     attr.SetInt32Value(Attributes::AttributeKey::ATTR_FREEZING_TIME, (*authResult).authStatusInfo.freezingTime);
182     callback_->OnResult(errCode, attr);
183 }
184 
185 #ifdef HAS_PIN_AUTH_PART
DomainCredentialRecipient(int32_t userId,const std::shared_ptr<IDMCallback> & callback)186 DomainCredentialRecipient::DomainCredentialRecipient(int32_t userId, const std::shared_ptr<IDMCallback> &callback)
187     : userId_(userId), idmCallback_(callback)
188 {}
189 
~DomainCredentialRecipient()190 DomainCredentialRecipient::~DomainCredentialRecipient()
191 {}
192 
OnSetData(int32_t authSubType,std::vector<uint8_t> data)193 void DomainCredentialRecipient::OnSetData(int32_t authSubType, std::vector<uint8_t> data)
194 {
195     auto callback = std::make_shared<DomainAuthCallbackAdapter>(idmCallback_);
196     ErrCode errCode = DomainAccountClient::GetInstance().AuthUser(userId_, data, callback);
197     if (errCode != ERR_OK) {
198         ACCOUNT_LOGE("Failed to auth for domain account, errCode=%{public}d", errCode);
199         Parcel emptyParcel;
200         AccountSA::DomainAuthResult emptyResult;
201         if (!emptyResult.Marshalling(emptyParcel)) {
202             ACCOUNT_LOGE("authResult Marshalling failed");
203             callback->OnResult(ERR_ACCOUNT_COMMON_WRITE_PARCEL_ERROR, emptyParcel);
204             return;
205         }
206         callback->OnResult(errCode, emptyParcel);
207     }
208 }
209 
IAMInputer(int32_t userId,const std::shared_ptr<IInputer> & inputer)210 IAMInputer::IAMInputer(int32_t userId, const std::shared_ptr<IInputer> &inputer)
211     : userId_(userId), innerInputer_(inputer)
212 {}
213 
OnGetData(int32_t authSubType,std::vector<uint8_t> challenge,std::shared_ptr<IInputerData> inputerData)214 void IAMInputer::OnGetData(int32_t authSubType, std::vector<uint8_t> challenge,
215     std::shared_ptr<IInputerData> inputerData)
216 {
217     ACCOUNT_LOGI("AuthSubType: %{public}d", authSubType);
218     if (authSubType == 0) {
219         authSubType = AccountIAMClient::GetInstance().GetAuthSubType(userId_);
220     }
221     if (innerInputer_ == nullptr) {
222         ACCOUNT_LOGE("innerInputer_ is nullptr");
223         return;
224     }
225     innerInputer_->OnGetData(authSubType, challenge, inputerData);
226 }
227 #endif
228 }  // namespace AccountSA
229 }  // namespace OHOS
230