• 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 #ifndef OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_ACCOUNT_IAM_CALLBACK_H
17 #define OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_ACCOUNT_IAM_CALLBACK_H
18 
19 #include <condition_variable>
20 #include <map>
21 #include <vector>
22 #include "access_token.h"
23 #include "account_file_operator.h"
24 #include "account_iam_info.h"
25 #include "domain_account_callback.h"
26 #include "iaccount_iam_callback.h"
27 #include "iremote_object.h"
28 #include "iremote_stub.h"
29 
30 namespace OHOS {
31 namespace AccountSA {
32 class AuthCallbackDeathRecipient : public IRemoteObject::DeathRecipient {
33 public:
34     AuthCallbackDeathRecipient() = default;
35     ~AuthCallbackDeathRecipient() override = default;
36 
37     void SetContextId(uint16_t context);
38     void OnRemoteDied(const wptr<IRemoteObject> &remote) override;
39 
40 private:
41     uint64_t contextId_ = 0;
42 };
43 
44 class AuthCallback : public AuthenticationCallback {
45 public:
46     AuthCallback(uint32_t userId, AuthType authType, AuthIntent authIntent, const sptr<IIDMCallback> &callback);
47     AuthCallback(uint32_t userId, AuthType authType, AuthIntent authIntent,
48         bool isRemoteAuth, const sptr<IIDMCallback> &callback);
49     virtual ~AuthCallback() = default;
50 
51     void SetDeathRecipient(const sptr<AuthCallbackDeathRecipient> &deathRecipient);
52     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override;
53     void OnResult(int32_t result, const Attributes &extraInfo) override;
54 
55 private:
56     ErrCode UnlockAccount(int32_t accountId, const std::vector<uint8_t> &token,
57         const std::vector<uint8_t> &secret, bool &isUpdateVerifiedStatus);
58     ErrCode HandleAuthResult(const Attributes &extraInfo, int32_t accountId, bool &isUpdateVerifiedStatus);
59     void HandleReEnroll(const Attributes &extraInfo, int32_t accountId, const std::vector<uint8_t> &token);
60     ErrCode InnerHandleReEnroll(const std::vector<uint8_t> &token);
61     ErrCode UnlockUserScreen(int32_t accountId, const std::vector<uint8_t> &token,
62         const std::vector<uint8_t> &secret, bool &isUpdateVerifiedStatus);
63 
64 private:
65     uint32_t userId_;
66     uint32_t callerTokenId_ = 0;
67     AuthType authType_;
68     AuthIntent authIntent_;
69     bool isRemoteAuth_ = false;
70     sptr<IIDMCallback> innerCallback_ = nullptr;
71     sptr<AuthCallbackDeathRecipient> deathRecipient_ = nullptr;
72 };
73 
74 class IDMCallbackDeathRecipient : public IRemoteObject::DeathRecipient {
75 public:
76     IDMCallbackDeathRecipient(uint32_t userId);
77     void OnRemoteDied(const wptr<IRemoteObject> &remote) override;
78 
79 private:
80     uint32_t userId_ = 0;
81 };
82 
83 class AddCredCallback : public UserIdmClientCallback {
84 public:
85     AddCredCallback(uint32_t userId, const CredentialParameters &credInfo,
86         const sptr<IIDMCallback> &callback);
87     virtual ~AddCredCallback() = default;
88 
89     void SetDeathRecipient(const sptr<IDMCallbackDeathRecipient> &deathRecipient);
90     void OnResult(int32_t result, const Attributes &extraInfo) override;
91     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override;
92 
93 public:
94     std::mutex mutex_;
95     bool isCalled_ = false;
96     std::condition_variable onResultCondition_;
97 
98 private:
99     std::uint32_t userId_;
100     CredentialParameters credInfo_;
101     sptr<IDMCallbackDeathRecipient> deathRecipient_ = nullptr;
102     sptr<IIDMCallback> innerCallback_ = nullptr;
103 };
104 
105 class UpdateCredCallback : public UserIdmClientCallback {
106 public:
107     UpdateCredCallback(uint32_t userId, const CredentialParameters &credInfo,
108         const sptr<IIDMCallback> &callback);
109     virtual ~UpdateCredCallback() = default;
110 
111     void SetDeathRecipient(const sptr<IDMCallbackDeathRecipient> &deathRecipient);
112     void OnResult(int32_t result, const Attributes &extraInfo) override;
113     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override;
114 
115 private:
116     void InnerOnResult(int32_t result, const Attributes &extraInfo);
117 
118 public:
119     std::mutex mutex_;
120     bool isCalled_ = false;
121     std::condition_variable onResultCondition_;
122 
123 private:
124     std::uint32_t userId_;
125     CredentialParameters credInfo_;
126     sptr<IDMCallbackDeathRecipient> deathRecipient_ = nullptr;
127     const sptr<IIDMCallback> innerCallback_ = nullptr;
128 };
129 
130 #ifdef HAS_PIN_AUTH_PART
131 class DelUserInputer : public IInputer {
132 public:
133     DelUserInputer() = default;
134     virtual ~DelUserInputer() = default;
135 
136     void OnGetData(int32_t authSubType, std::vector<uint8_t> challenge,
137         std::shared_ptr<IInputerData> inputerData) override;
138 };
139 
140 class DelUserCallback : public UserIdmClientCallback {
141 public:
142     DelUserCallback(uint32_t userId, const std::vector<uint8_t> &token, const sptr<IIDMCallback> &callback);
143     virtual ~DelUserCallback();
144 
145     void OnResult(int32_t result, const Attributes &extraInfo) override;
OnAcquireInfo(int32_t module,uint32_t acquireInfo,const Attributes & extraInfo)146     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override {};
147 
148 private:
149     void InnerOnResult(int32_t result, const Attributes &extraInfo);
150 
151 public:
152     std::mutex mutex_;
153     bool isCalled_ = false;
154     std::condition_variable onResultCondition_;
155 
156 private:
157     std::uint32_t userId_;
158     std::vector<uint8_t> token_;
159     const sptr<IIDMCallback> innerCallback_ = nullptr;
160 };
161 #endif // HAS_PIN_AUTH_PART
162 
163 class VerifyTokenCallbackWrapper : public VerifyTokenCallback {
164 public:
165     VerifyTokenCallbackWrapper(uint32_t userId, const std::vector<uint8_t> &token,
166         Security::AccessToken::AccessTokenID callerTokenId, const sptr<IIDMCallback> &callback);
167     virtual ~VerifyTokenCallbackWrapper() = default;
168     void OnResult(int32_t result, const Attributes &extraInfo) override;
169 
170 private:
171     void InnerOnResult(int32_t result, const Attributes &extraInfo);
172 
173 public:
174     std::mutex mutex_;
175     bool isCalled_ = false;
176     std::condition_variable onResultCondition_;
177 
178 private:
179     std::uint32_t userId_;
180     std::vector<uint8_t> token_;
181     Security::AccessToken::AccessTokenID callerTokenId_;
182     const sptr<IIDMCallback> innerCallback_ = nullptr;
183 };
184 
185 class CommitDelCredCallback : public UserIdmClientCallback {
186 public:
187     CommitDelCredCallback(uint32_t userId, const sptr<IIDMCallback> callback);
188     virtual ~CommitDelCredCallback() = default;
189 
190     void OnResult(int32_t result, const UserIam::UserAuth::Attributes &extraInfo) override;
191     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const UserIam::UserAuth::Attributes &extraInfo) override;
192 
193 public:
194     bool isCalled_ = false;
195     std::mutex mutex_;
196     std::condition_variable onResultCondition_;
197 
198 private:
199     std::uint32_t userId_;
200     const sptr<IIDMCallback> innerCallback_ = nullptr;
201 };
202 
203 struct UpdateCredInfo {
204     uint64_t credentialId = 0;
205     uint64_t secureUid = 0;
206     std::vector<uint8_t> token;
207     std::vector<uint8_t> newSecret;
208     std::vector<uint8_t> oldSecret;
209 
210     UpdateCredInfo() = default;
211     UpdateCredInfo(const Attributes &extraInfo);
212 };
213 
214 class CommitCredUpdateCallback : public UserIdmClientCallback {
215 public:
216     CommitCredUpdateCallback(int32_t userId, const UpdateCredInfo &extraUpdateInfo, const sptr<IIDMCallback> &callback);
217     virtual ~CommitCredUpdateCallback() = default;
218 
219     void OnResult(int32_t result, const Attributes &extraInfo) override;
220     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override;
221 
222 private:
223     void InnerOnResult(int32_t result, const Attributes &extraInfo);
224 
225 public:
226     std::mutex mutex_;
227     bool isCalled_ = false;
228     std::condition_variable onResultCondition_;
229 
230 private:
231     int32_t userId_;
232     UpdateCredInfo extraUpdateInfo_;
233     sptr<IIDMCallback> innerCallback_ = nullptr;
234 };
235 
236 class DelCredCallback : public UserIdmClientCallback {
237 public:
238     DelCredCallback(int32_t userId, bool isPIN, std::vector<uint8_t> token, const sptr<IIDMCallback> &callback);
239     virtual ~DelCredCallback() = default;
240 
241     void OnResult(int32_t result, const Attributes &extraInfo) override;
242     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override;
243 
244 private:
245     int32_t userId_;
246     bool isPIN_;
247     std::vector<uint8_t> token_;
248     sptr<IIDMCallback> innerCallback_ = nullptr;
249 };
250 
251 class GetCredInfoCallbackWrapper : public GetCredentialInfoCallback {
252 public:
253     GetCredInfoCallbackWrapper(int32_t userId, int32_t authType, const sptr<IGetCredInfoCallback> &callback);
254     virtual ~GetCredInfoCallbackWrapper() = default;
255 
256     void OnCredentialInfo(int32_t result, const std::vector<CredentialInfo> &infoList) override;
257 
258 private:
259     int32_t userId_;
260     int32_t authType_;
261     sptr<IGetCredInfoCallback> innerCallback_ = nullptr;
262 };
263 
264 class GetPropCallbackWrapper : public GetPropCallback {
265 public:
266     GetPropCallbackWrapper(int32_t userId, const sptr<IGetSetPropCallback> &callback);
267     virtual ~GetPropCallbackWrapper() = default;
268 
269     void OnResult(int32_t result, const Attributes &extraInfo) override;
270 
271 private:
272     int32_t userId_;
273     sptr<IGetSetPropCallback> innerCallback_;
274 };
275 
276 class SetPropCallbackWrapper : public SetPropCallback {
277 public:
278     SetPropCallbackWrapper(int32_t userId, const sptr<IGetSetPropCallback> &callback);
279     virtual ~SetPropCallbackWrapper() = default;
280 
281     void OnResult(int32_t result, const Attributes &extraInfo) override;
282 
283 private:
284     int32_t userId_;
285     sptr<IGetSetPropCallback> innerCallback_;
286 };
287 
288 class GetSecUserInfoCallbackWrapper : public GetSecUserInfoCallback {
289 public:
290     GetSecUserInfoCallbackWrapper(int32_t userId, AuthType authType, const sptr<IGetEnrolledIdCallback> &callback);
291     virtual ~GetSecUserInfoCallbackWrapper() = default;
292 
293     void OnSecUserInfo(int32_t result, const SecUserInfo &info) override;
294 
295 private:
296     int32_t userId_;
297     AuthType authType_;
298     sptr<IGetEnrolledIdCallback> innerCallback_;
299 };
300 
301 class GetSecureUidCallback final : public GetSecUserInfoCallback {
302 public:
303     GetSecureUidCallback(int32_t userId);
304 
305     void OnSecUserInfo(int32_t result, const SecUserInfo &info) override;
306 
307 public:
308     int32_t userId_;
309     uint64_t secureUid_ = 0;
310     bool isCalled_ = false;
311     std::mutex secureMtx_;
312     std::condition_variable secureCv_;
313 };
314 
315 class PrepareRemoteAuthCallbackWrapper : public PrepareRemoteAuthCallback {
316 public:
317     PrepareRemoteAuthCallbackWrapper(const sptr<IPreRemoteAuthCallback> &callback);
318     virtual ~PrepareRemoteAuthCallbackWrapper() = default;
319 
320     void OnResult(int32_t result) override;
321 
322 private:
323     sptr<IPreRemoteAuthCallback> innerCallback_;
324 };
325 
326 #ifdef SUPPORT_DOMAIN_ACCOUNTS
327 class GetDomainAuthStatusInfoCallback final : public DomainAccountCallback {
328 public:
329     GetDomainAuthStatusInfoCallback(const GetPropertyRequest &request, const sptr<IGetSetPropCallback> &callback);
330 
331     void OnResult(int32_t result, Parcel &parcel) override;
332 
333 private:
334     GetPropertyRequest request_;
335     sptr<IGetSetPropCallback> innerCallback_;
336 };
337 #endif // SUPPORT_DOMAIN_ACCOUNTS
338 
339 class ReEnrollCallback final : public IRemoteStub<IIDMCallback> {
340 public:
341     bool isCalled_ = false;
342     ErrCode result_ = ERR_ACCOUNT_COMMON_NOT_INIT_ERROR;
343     std::mutex mutex_;
344     std::condition_variable onResultCondition_;
345 
346     ReEnrollCallback(const sptr<IIDMCallback> &innerCallback);
347     void OnResult(int32_t result, const Attributes &extraInfo) override;
348     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override;
349 private:
350     sptr<IIDMCallback> innerCallback_;
351 };
352 }  // namespace AccountSA
353 }  // namespace OHOS
354 #endif  // OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_ACCOUNT_IAM_CALLBACK_H
355