• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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 
DomainAuthCallbackAdapter(const std::shared_ptr<IDMCallback> & callback)76 DomainAuthCallbackAdapter::DomainAuthCallbackAdapter(
77     const std::shared_ptr<IDMCallback> &callback) : callback_(callback)
78 {}
79 
OnResult(const int32_t errCode,Parcel & parcel)80 void DomainAuthCallbackAdapter::OnResult(const int32_t errCode, Parcel &parcel)
81 {
82     if (callback_ == nullptr) {
83         ACCOUNT_LOGE("callback is nullptr");
84         return;
85     }
86     std::shared_ptr<DomainAuthResult> authResult(DomainAuthResult::Unmarshalling(parcel));
87     if (authResult == nullptr) {
88         ACCOUNT_LOGE("authResult is nullptr");
89         return;
90     }
91     Attributes attr;
92     attr.SetUint8ArrayValue(Attributes::AttributeKey::ATTR_SIGNATURE, (*authResult).token);
93     attr.SetInt32Value(Attributes::AttributeKey::ATTR_REMAIN_TIMES, (*authResult).authStatusInfo.remainingTimes);
94     attr.SetInt32Value(Attributes::AttributeKey::ATTR_FREEZING_TIME, (*authResult).authStatusInfo.freezingTime);
95     callback_->OnResult(errCode, attr);
96 }
97 
98 #ifdef HAS_PIN_AUTH_PART
DomainCredentialRecipient(int32_t userId,const std::shared_ptr<IDMCallback> & callback)99 DomainCredentialRecipient::DomainCredentialRecipient(int32_t userId, const std::shared_ptr<IDMCallback> &callback)
100     : userId_(userId), idmCallback_(callback)
101 {}
102 
~DomainCredentialRecipient()103 DomainCredentialRecipient::~DomainCredentialRecipient()
104 {}
105 
OnSetData(int32_t authSubType,std::vector<uint8_t> data)106 void DomainCredentialRecipient::OnSetData(int32_t authSubType, std::vector<uint8_t> data)
107 {
108     auto callback = std::make_shared<DomainAuthCallbackAdapter>(idmCallback_);
109     ErrCode errCode = DomainAccountClient::GetInstance().AuthUser(userId_, data, callback);
110     if (errCode != ERR_OK) {
111         Parcel emptyParcel;
112         AccountSA::DomainAuthResult emptyResult;
113         if (!emptyResult.Marshalling(emptyParcel)) {
114             ACCOUNT_LOGE("authResult Marshalling failed");
115             return;
116         }
117         callback->OnResult(errCode, emptyParcel);
118     }
119 }
120 
IAMInputerData(int32_t userId,const std::shared_ptr<IInputerData> & inputerData)121 IAMInputerData::IAMInputerData(int32_t userId, const std::shared_ptr<IInputerData> &inputerData)
122     : userId_(userId), innerInputerData_(inputerData)
123 {}
124 
~IAMInputerData()125 IAMInputerData::~IAMInputerData()
126 {}
127 
OnSetData(int32_t authSubType,std::vector<uint8_t> data)128 void IAMInputerData::OnSetData(int32_t authSubType, std::vector<uint8_t> data)
129 {
130     if (innerInputerData_ == nullptr) {
131         ACCOUNT_LOGE("innerInputerData_ is nullptr");
132         return;
133     }
134     innerInputerData_->OnSetData(authSubType, data);
135     innerInputerData_ = nullptr;
136     AccountIAMClient::GetInstance().SetCredential(userId_, data);
137 }
138 
IAMInputer(int32_t userId,const std::shared_ptr<IInputer> & inputer)139 IAMInputer::IAMInputer(int32_t userId, const std::shared_ptr<IInputer> &inputer)
140     : userId_(userId), innerInputer_(inputer)
141 {}
142 
~IAMInputer()143 IAMInputer::~IAMInputer()
144 {}
145 
OnGetData(int32_t authSubType,std::shared_ptr<IInputerData> inputerData)146 void IAMInputer::OnGetData(int32_t authSubType, std::shared_ptr<IInputerData> inputerData)
147 {
148     if (inputerData == nullptr) {
149         ACCOUNT_LOGE("inputerData is nullptr");
150         return;
151     }
152     IAMState state = AccountIAMClient::GetInstance().GetAccountState(userId_);
153     if (authSubType == 0) {
154         authSubType = AccountIAMClient::GetInstance().GetAuthSubType(userId_);
155     }
156     if (state >= AFTER_ADD_CRED) {
157         CredentialItem credItem;
158         AccountIAMClient::GetInstance().GetCredential(userId_, credItem);
159         inputerData->OnSetData(authSubType, credItem.credential);
160         AccountIAMClient::GetInstance().ClearCredential(userId_);
161         return;
162     }
163     if (innerInputer_ == nullptr) {
164         ACCOUNT_LOGE("innerInputer_ is nullptr");
165         return;
166     }
167     auto iamInputerData = std::make_shared<IAMInputerData>(userId_, inputerData);
168     innerInputer_->OnGetData(authSubType, iamInputerData);
169 }
170 
ResetInnerInputer(const std::shared_ptr<IInputer> & inputer)171 void IAMInputer::ResetInnerInputer(const std::shared_ptr<IInputer> &inputer)
172 {
173     innerInputer_ = inputer;
174 }
175 #endif
176 }  // namespace AccountSA
177 }  // namespace OHOS
178