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(const std::vector<CredentialInfo> & infoList)54 void GetCredInfoCallbackService::OnCredentialInfo(const std::vector<CredentialInfo> &infoList)
55 {
56 if (callback_ == nullptr) {
57 ACCOUNT_LOGE("callback is nullptr");
58 return;
59 }
60 callback_->OnCredentialInfo(ERR_OK, 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 std::shared_ptr<DomainAuthResult> authResult(DomainAuthResult::Unmarshalling(parcel));
113 if (authResult == nullptr) {
114 ACCOUNT_LOGE("authResult is nullptr");
115 return;
116 }
117 Attributes attr;
118 attr.SetUint8ArrayValue(Attributes::AttributeKey::ATTR_SIGNATURE, (*authResult).token);
119 attr.SetInt32Value(Attributes::AttributeKey::ATTR_REMAIN_TIMES, (*authResult).authStatusInfo.remainingTimes);
120 attr.SetInt32Value(Attributes::AttributeKey::ATTR_FREEZING_TIME, (*authResult).authStatusInfo.freezingTime);
121 callback_->OnResult(errCode, attr);
122 }
123
124 #ifdef HAS_PIN_AUTH_PART
DomainCredentialRecipient(int32_t userId,const std::shared_ptr<IDMCallback> & callback)125 DomainCredentialRecipient::DomainCredentialRecipient(int32_t userId, const std::shared_ptr<IDMCallback> &callback)
126 : userId_(userId), idmCallback_(callback)
127 {}
128
~DomainCredentialRecipient()129 DomainCredentialRecipient::~DomainCredentialRecipient()
130 {}
131
OnSetData(int32_t authSubType,std::vector<uint8_t> data)132 void DomainCredentialRecipient::OnSetData(int32_t authSubType, std::vector<uint8_t> data)
133 {
134 auto callback = std::make_shared<DomainAuthCallbackAdapter>(idmCallback_);
135 ErrCode errCode = DomainAccountClient::GetInstance().AuthUser(userId_, data, callback);
136 if (errCode != ERR_OK) {
137 Parcel emptyParcel;
138 AccountSA::DomainAuthResult emptyResult;
139 if (!emptyResult.Marshalling(emptyParcel)) {
140 ACCOUNT_LOGE("authResult Marshalling failed");
141 return;
142 }
143 callback->OnResult(errCode, emptyParcel);
144 }
145 }
146
IAMInputer(int32_t userId,const std::shared_ptr<IInputer> & inputer)147 IAMInputer::IAMInputer(int32_t userId, const std::shared_ptr<IInputer> &inputer)
148 : userId_(userId), innerInputer_(inputer)
149 {}
150
OnGetData(int32_t authSubType,std::vector<uint8_t> challenge,std::shared_ptr<IInputerData> inputerData)151 void IAMInputer::OnGetData(int32_t authSubType, std::vector<uint8_t> challenge,
152 std::shared_ptr<IInputerData> inputerData)
153 {
154 ACCOUNT_LOGI("AuthSubType: %{public}d", authSubType);
155 if (authSubType == 0) {
156 authSubType = AccountIAMClient::GetInstance().GetAuthSubType(userId_);
157 }
158 if (innerInputer_ == nullptr) {
159 ACCOUNT_LOGE("innerInputer_ is nullptr");
160 return;
161 }
162 innerInputer_->OnGetData(authSubType, challenge, inputerData);
163 }
164 #endif
165 } // namespace AccountSA
166 } // namespace OHOS
167