1 /*
2 * Copyright (c) 2022-2024 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
OnAcquireInfo(int32_t module,uint32_t acquireInfo,const Attributes & extraInfo)29 void IDMCallbackService::OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo)
30 {
31 if (callback_ == nullptr) {
32 ACCOUNT_LOGE("callback is nullptr");
33 return;
34 }
35 callback_->OnAcquireInfo(module, acquireInfo, extraInfo);
36 }
37
OnResult(int32_t result,const Attributes & extraInfo)38 void IDMCallbackService::OnResult(int32_t result, const Attributes &extraInfo)
39 {
40 if (callback_ == nullptr) {
41 ACCOUNT_LOGE("callback is nullptr");
42 return;
43 }
44 if (result != 0) {
45 ACCOUNT_LOGE("idm operation failure, localId: %{public}d", userId_);
46 }
47 callback_->OnResult(result, extraInfo);
48 }
49
GetCredInfoCallbackService(const std::shared_ptr<GetCredInfoCallback> & callback)50 GetCredInfoCallbackService::GetCredInfoCallbackService(const std::shared_ptr<GetCredInfoCallback> &callback)
51 : callback_(callback)
52 {}
53
OnCredentialInfo(int32_t result,const std::vector<CredentialInfo> & infoList)54 void GetCredInfoCallbackService::OnCredentialInfo(int32_t result, const std::vector<CredentialInfo> &infoList)
55 {
56 if (callback_ == nullptr) {
57 ACCOUNT_LOGE("callback is nullptr");
58 return;
59 }
60 callback_->OnCredentialInfo(result, infoList);
61 }
62
GetSetPropCallbackService(const std::shared_ptr<GetSetPropCallback> & callback)63 GetSetPropCallbackService::GetSetPropCallbackService(const std::shared_ptr<GetSetPropCallback> &callback)
64 : callback_(callback)
65 {}
66
OnResult(int32_t result,const Attributes & extraInfo)67 void GetSetPropCallbackService::OnResult(int32_t result, const Attributes &extraInfo)
68 {
69 if (callback_ == nullptr) {
70 ACCOUNT_LOGE("callback is nullptr");
71 return;
72 }
73 callback_->OnResult(result, extraInfo);
74 }
75
GetEnrolledIdCallbackService(const std::shared_ptr<GetEnrolledIdCallback> & callback)76 GetEnrolledIdCallbackService::GetEnrolledIdCallbackService(const std::shared_ptr<GetEnrolledIdCallback> &callback)
77 : callback_(callback)
78 {}
79
OnEnrolledId(int32_t result,uint64_t enrolledId)80 void GetEnrolledIdCallbackService::OnEnrolledId(int32_t result, uint64_t enrolledId)
81 {
82 if (callback_ == nullptr) {
83 ACCOUNT_LOGE("Callback is nullptr");
84 return;
85 }
86 callback_->OnEnrolledId(result, enrolledId);
87 }
88
PreRemoteAuthCallbackService(const std::shared_ptr<PreRemoteAuthCallback> & callback)89 PreRemoteAuthCallbackService::PreRemoteAuthCallbackService(
90 const std::shared_ptr<PreRemoteAuthCallback> &callback) : callback_(callback)
91 {}
92
OnResult(int32_t result)93 void PreRemoteAuthCallbackService::OnResult(int32_t result)
94 {
95 if (callback_ == nullptr) {
96 ACCOUNT_LOGE("Callback is nullptr.");
97 return;
98 }
99 callback_->OnResult(result);
100 }
101
DomainAuthCallbackAdapter(const std::shared_ptr<IDMCallback> & callback)102 DomainAuthCallbackAdapter::DomainAuthCallbackAdapter(
103 const std::shared_ptr<IDMCallback> &callback) : callback_(callback)
104 {}
105
OnResult(const int32_t errCode,Parcel & parcel)106 void DomainAuthCallbackAdapter::OnResult(const int32_t errCode, Parcel &parcel)
107 {
108 if (callback_ == nullptr) {
109 ACCOUNT_LOGE("callback is nullptr");
110 return;
111 }
112 Attributes attr;
113 std::shared_ptr<DomainAuthResult> authResult(DomainAuthResult::Unmarshalling(parcel));
114 if (authResult == nullptr) {
115 ACCOUNT_LOGE("authResult is nullptr");
116 callback_->OnResult(ERR_ACCOUNT_COMMON_READ_PARCEL_ERROR, attr);
117 return;
118 }
119 attr.SetUint8ArrayValue(Attributes::AttributeKey::ATTR_SIGNATURE, (*authResult).token);
120 attr.SetInt32Value(Attributes::AttributeKey::ATTR_REMAIN_TIMES, (*authResult).authStatusInfo.remainingTimes);
121 attr.SetInt32Value(Attributes::AttributeKey::ATTR_FREEZING_TIME, (*authResult).authStatusInfo.freezingTime);
122 callback_->OnResult(errCode, attr);
123 }
124
125 #ifdef HAS_PIN_AUTH_PART
DomainCredentialRecipient(int32_t userId,const std::shared_ptr<IDMCallback> & callback)126 DomainCredentialRecipient::DomainCredentialRecipient(int32_t userId, const std::shared_ptr<IDMCallback> &callback)
127 : userId_(userId), idmCallback_(callback)
128 {}
129
~DomainCredentialRecipient()130 DomainCredentialRecipient::~DomainCredentialRecipient()
131 {}
132
OnSetData(int32_t authSubType,std::vector<uint8_t> data)133 void DomainCredentialRecipient::OnSetData(int32_t authSubType, std::vector<uint8_t> data)
134 {
135 auto callback = std::make_shared<DomainAuthCallbackAdapter>(idmCallback_);
136 ErrCode errCode = DomainAccountClient::GetInstance().AuthUser(userId_, data, callback);
137 if (errCode != ERR_OK) {
138 ACCOUNT_LOGE("Failed to set data, errCode=%{public}d", errCode);
139 Parcel emptyParcel;
140 AccountSA::DomainAuthResult emptyResult;
141 if (!emptyResult.Marshalling(emptyParcel)) {
142 ACCOUNT_LOGE("authResult Marshalling failed");
143 callback->OnResult(ERR_ACCOUNT_COMMON_WRITE_PARCEL_ERROR, emptyParcel);
144 return;
145 }
146 callback->OnResult(errCode, emptyParcel);
147 }
148 }
149
IAMInputer(int32_t userId,const std::shared_ptr<IInputer> & inputer)150 IAMInputer::IAMInputer(int32_t userId, const std::shared_ptr<IInputer> &inputer)
151 : userId_(userId), innerInputer_(inputer)
152 {}
153
OnGetData(int32_t authSubType,std::vector<uint8_t> challenge,std::shared_ptr<IInputerData> inputerData)154 void IAMInputer::OnGetData(int32_t authSubType, std::vector<uint8_t> challenge,
155 std::shared_ptr<IInputerData> inputerData)
156 {
157 ACCOUNT_LOGI("AuthSubType: %{public}d", authSubType);
158 if (authSubType == 0) {
159 authSubType = AccountIAMClient::GetInstance().GetAuthSubType(userId_);
160 }
161 if (innerInputer_ == nullptr) {
162 ACCOUNT_LOGE("innerInputer_ is nullptr");
163 return;
164 }
165 innerInputer_->OnGetData(authSubType, challenge, inputerData);
166 }
167 #endif
168 } // namespace AccountSA
169 } // namespace OHOS
170