• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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