• 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     callback_->OnResult(result, extraInfo);
45     AccountIAMClient::GetInstance().ClearCredential(userId_);
46 }
47 
GetCredInfoCallbackService(const std::shared_ptr<GetCredInfoCallback> & callback)48 GetCredInfoCallbackService::GetCredInfoCallbackService(const std::shared_ptr<GetCredInfoCallback> &callback)
49     : callback_(callback)
50 {}
51 
OnCredentialInfo(const std::vector<CredentialInfo> & infoList)52 void GetCredInfoCallbackService::OnCredentialInfo(const std::vector<CredentialInfo> &infoList)
53 {
54     if (callback_ == nullptr) {
55         ACCOUNT_LOGE("callback is nullptr");
56         return;
57     }
58     callback_->OnCredentialInfo(ERR_OK, infoList);
59 }
60 
GetSetPropCallbackService(const std::shared_ptr<GetSetPropCallback> & callback)61 GetSetPropCallbackService::GetSetPropCallbackService(const std::shared_ptr<GetSetPropCallback> &callback)
62     : callback_(callback)
63 {}
64 
OnResult(int32_t result,const Attributes & extraInfo)65 void GetSetPropCallbackService::OnResult(int32_t result, const Attributes &extraInfo)
66 {
67     if (callback_ == nullptr) {
68         ACCOUNT_LOGE("callback is nullptr");
69         return;
70     }
71     callback_->OnResult(result, extraInfo);
72 }
73 
DomainAuthCallbackAdapter(const std::shared_ptr<IDMCallback> & callback)74 DomainAuthCallbackAdapter::DomainAuthCallbackAdapter(
75     const std::shared_ptr<IDMCallback> &callback) : callback_(callback)
76 {}
77 
OnResult(int32_t resultCode,const DomainAuthResult & result)78 void DomainAuthCallbackAdapter::OnResult(int32_t resultCode, const DomainAuthResult &result)
79 {
80     if (callback_ == nullptr) {
81         ACCOUNT_LOGE("callback is nullptr");
82         return;
83     }
84     Attributes attr;
85     attr.SetUint8ArrayValue(Attributes::AttributeKey::ATTR_SIGNATURE, result.token);
86     attr.SetInt32Value(Attributes::AttributeKey::ATTR_REMAIN_TIMES, result.authStatusInfo.remainingTimes);
87     attr.SetInt32Value(Attributes::AttributeKey::ATTR_FREEZING_TIME, result.authStatusInfo.freezingTime);
88     callback_->OnResult(resultCode, attr);
89 }
90 
DomainCredentialRecipient(int32_t userId,const std::shared_ptr<IDMCallback> & callback)91 DomainCredentialRecipient::DomainCredentialRecipient(int32_t userId, const std::shared_ptr<IDMCallback> &callback)
92     : userId_(userId), idmCallback_(callback)
93 {}
94 
~DomainCredentialRecipient()95 DomainCredentialRecipient::~DomainCredentialRecipient()
96 {}
97 
OnSetData(int32_t authSubType,std::vector<uint8_t> data)98 void DomainCredentialRecipient::OnSetData(int32_t authSubType, std::vector<uint8_t> data)
99 {
100     auto callback = std::make_shared<DomainAuthCallbackAdapter>(idmCallback_);
101     if (callback == nullptr) {
102         ACCOUNT_LOGE("fail to create DomainAuthCallbackAdapter");
103         if (idmCallback_ != nullptr) {
104             ACCOUNT_LOGE("idmCallback is nullptr");
105             Attributes attr;
106             idmCallback_->OnResult(ERR_ACCOUNT_COMMON_INSUFFICIENT_MEMORY_ERROR, attr);
107         }
108         return;
109     }
110     ErrCode errCode = DomainAccountClient::GetInstance().AuthUser(userId_, data, callback);
111     if (errCode != ERR_OK) {
112         DomainAuthResult result;
113         callback->OnResult(errCode, result);
114     }
115 }
116 
IAMInputerData(int32_t userId,const std::shared_ptr<IInputerData> & inputerData)117 IAMInputerData::IAMInputerData(int32_t userId, const std::shared_ptr<IInputerData> &inputerData)
118     : userId_(userId), innerInputerData_(inputerData)
119 {}
120 
~IAMInputerData()121 IAMInputerData::~IAMInputerData()
122 {}
123 
OnSetData(int32_t authSubType,std::vector<uint8_t> data)124 void IAMInputerData::OnSetData(int32_t authSubType, std::vector<uint8_t> data)
125 {
126     if (innerInputerData_ == nullptr) {
127         ACCOUNT_LOGE("innerInputerData_ is nullptr");
128         return;
129     }
130     innerInputerData_->OnSetData(authSubType, data);
131     innerInputerData_ = nullptr;
132     AccountIAMClient::GetInstance().SetCredential(userId_, data);
133 }
134 
IAMInputer(int32_t userId,const std::shared_ptr<IInputer> & inputer)135 IAMInputer::IAMInputer(int32_t userId, const std::shared_ptr<IInputer> &inputer)
136     : userId_(userId), innerInputer_(inputer)
137 {}
138 
~IAMInputer()139 IAMInputer::~IAMInputer()
140 {}
141 
OnGetData(int32_t authSubType,std::shared_ptr<IInputerData> inputerData)142 void IAMInputer::OnGetData(int32_t authSubType, std::shared_ptr<IInputerData> inputerData)
143 {
144     if (inputerData == nullptr) {
145         ACCOUNT_LOGE("inputerData is nullptr");
146         return;
147     }
148     IAMState state = AccountIAMClient::GetInstance().GetAccountState(userId_);
149     if (authSubType == 0) {
150         authSubType = AccountIAMClient::GetInstance().GetAuthSubType(userId_);
151     }
152     if (state < AFTER_ADD_CRED) {
153         if (innerInputer_ == nullptr) {
154             ACCOUNT_LOGE("innerInputer_ is nullptr");
155             return;
156         }
157         auto iamInputerData = std::make_shared<IAMInputerData>(userId_, inputerData);
158         innerInputer_->OnGetData(authSubType, iamInputerData);
159         return;
160     }
161     CredentialItem credItem;
162     AccountIAMClient::GetInstance().GetCredential(userId_, credItem);
163     if (state == ROLL_BACK_UPDATE_CRED) {
164         inputerData->OnSetData(authSubType, credItem.oldCredential);
165     } else {
166         inputerData->OnSetData(authSubType, credItem.credential);
167     }
168 }
169 
ResetInnerInputer(const std::shared_ptr<IInputer> & inputer)170 void IAMInputer::ResetInnerInputer(const std::shared_ptr<IInputer> &inputer)
171 {
172     innerInputer_ = inputer;
173 }
174 }  // namespace AccountSA
175 }  // namespace OHOS
176