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