• 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 <map>
20 #include <vector>
21 #include "account_file_operator.h"
22 #include "account_iam_info.h"
23 #include "domain_account_callback.h"
24 #include "iaccount_iam_callback.h"
25 #include "iremote_object.h"
26 
27 namespace OHOS {
28 namespace AccountSA {
29 class AuthCallbackDeathRecipient : public IRemoteObject::DeathRecipient {
30 public:
31     AuthCallbackDeathRecipient() = default;
32     ~AuthCallbackDeathRecipient() override = default;
33 
34     void SetContextId(uint16_t context);
35     void OnRemoteDied(const wptr<IRemoteObject> &remote) override;
36 
37 private:
38     uint64_t contextId_ = 0;
39 };
40 
41 class AuthCallback : public AuthenticationCallback {
42 public:
43     AuthCallback(uint32_t userId, AuthType authType, AuthIntent authIntent, const sptr<IIDMCallback> &callback);
44     AuthCallback(uint32_t userId, AuthType authType, AuthIntent authIntent,
45         bool isRemoteAuth, const sptr<IIDMCallback> &callback);
46     virtual ~AuthCallback() = default;
47 
48     void SetDeathRecipient(const sptr<AuthCallbackDeathRecipient> &deathRecipient);
49     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override;
50     void OnResult(int32_t result, const Attributes &extraInfo) override;
51 
52 private:
53     ErrCode UnlockAccount(int32_t accountId, const std::vector<uint8_t> &token,
54         const std::vector<uint8_t> &secret, bool &isUpdateVerifiedStatus);
55     ErrCode HandleAuthResult(const Attributes &extraInfo, int32_t accountId, bool &isUpdateVerifiedStatus);
56     ErrCode UnlockUserScreen(int32_t accountId, const std::vector<uint8_t> &token,
57         const std::vector<uint8_t> &secret, bool &isUpdateVerifiedStatus);
58 
59 private:
60     uint32_t userId_;
61     AuthType authType_;
62     AuthIntent authIntent_;
63     bool isRemoteAuth_ = false;
64     sptr<IIDMCallback> innerCallback_ = nullptr;
65     sptr<AuthCallbackDeathRecipient> deathRecipient_ = nullptr;
66 };
67 
68 class IDMCallbackDeathRecipient : public IRemoteObject::DeathRecipient {
69 public:
70     IDMCallbackDeathRecipient(uint32_t userId);
71     void OnRemoteDied(const wptr<IRemoteObject> &remote) override;
72 
73 private:
74     uint32_t userId_ = 0;
75 };
76 
77 class AddCredCallback : public UserIdmClientCallback {
78 public:
79     AddCredCallback(uint32_t userId, const CredentialParameters &credInfo,
80         const sptr<IIDMCallback> &callback);
81     virtual ~AddCredCallback() = default;
82 
83     void SetDeathRecipient(const sptr<IDMCallbackDeathRecipient> &deathRecipient);
84     void OnResult(int32_t result, const Attributes &extraInfo) override;
85     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override;
86 
87 private:
88     std::uint32_t userId_;
89     CredentialParameters credInfo_;
90     sptr<IDMCallbackDeathRecipient> deathRecipient_ = nullptr;
91     sptr<IIDMCallback> innerCallback_ = nullptr;
92 };
93 
94 class UpdateCredCallback : public UserIdmClientCallback {
95 public:
96     UpdateCredCallback(uint32_t userId, const CredentialParameters &credInfo,
97         const sptr<IIDMCallback> &callback);
98     virtual ~UpdateCredCallback() = default;
99 
100     void SetDeathRecipient(const sptr<IDMCallbackDeathRecipient> &deathRecipient);
101     void OnResult(int32_t result, const Attributes &extraInfo) override;
102     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override;
103 
104 private:
105     std::uint32_t userId_;
106     CredentialParameters credInfo_;
107     sptr<IDMCallbackDeathRecipient> deathRecipient_ = nullptr;
108     const sptr<IIDMCallback> innerCallback_ = nullptr;
109 };
110 
111 #ifdef HAS_PIN_AUTH_PART
112 class DelUserInputer : public IInputer {
113 public:
114     DelUserInputer() = default;
115     virtual ~DelUserInputer() = default;
116 
117     void OnGetData(int32_t authSubType, std::vector<uint8_t> challenge,
118         std::shared_ptr<IInputerData> inputerData) override;
119 };
120 
121 class CommitDelCredCallback : public UserIdmClientCallback {
122 public:
CommitDelCredCallback()123     CommitDelCredCallback() {}
~CommitDelCredCallback()124     virtual ~CommitDelCredCallback() {}
125 
126     void OnResult(int32_t result, const UserIam::UserAuth::Attributes &extraInfo) override;
127     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const UserIam::UserAuth::Attributes &extraInfo) override;
128 
129 public:
130     bool isCalled_ = false;
131     int32_t resultCode_ = -1;
132     std::mutex mutex_;
133     std::condition_variable onResultCondition_;
134 };
135 
136 class DelUserCallback : public UserIdmClientCallback {
137 public:
138     DelUserCallback(uint32_t userId, const std::vector<uint8_t> &token, const sptr<IIDMCallback> &callback);
139     virtual ~DelUserCallback();
140 
141     void OnResult(int32_t result, const Attributes &extraInfo) override;
OnAcquireInfo(int32_t module,uint32_t acquireInfo,const Attributes & extraInfo)142     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override {};
143 
144 private:
145     std::uint32_t userId_;
146     std::vector<uint8_t> token_;
147     const sptr<IIDMCallback> innerCallback_ = nullptr;
148 };
149 #endif // HAS_PIN_AUTH_PART
150 
151 struct UpdateCredInfo {
152     uint64_t credentialId = 0;
153     uint64_t secureUid = 0;
154     std::vector<uint8_t> token;
155     std::vector<uint8_t> newSecret;
156 };
157 
158 class CommitCredUpdateCallback : public UserIdmClientCallback {
159 public:
160     CommitCredUpdateCallback(int32_t userId, const UpdateCredInfo &extraUpdateInfo, const sptr<IIDMCallback> &callback);
161     virtual ~CommitCredUpdateCallback() = default;
162 
163     void OnResult(int32_t result, const Attributes &extraInfo) override;
164     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override;
165 
166 private:
167     int32_t userId_;
168     UpdateCredInfo extraUpdateInfo_;
169     sptr<IIDMCallback> innerCallback_ = nullptr;
170 };
171 
172 class DelCredCallback : public UserIdmClientCallback {
173 public:
174     DelCredCallback(int32_t userId, bool isPIN, std::vector<uint8_t> token, const sptr<IIDMCallback> &callback);
175     virtual ~DelCredCallback() = default;
176 
177     void OnResult(int32_t result, const Attributes &extraInfo) override;
178     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override;
179 
180 private:
181     int32_t userId_;
182     bool isPIN_;
183     std::vector<uint8_t> token_;
184     sptr<IIDMCallback> innerCallback_ = nullptr;
185 };
186 
187 class GetCredInfoCallbackWrapper : public GetCredentialInfoCallback {
188 public:
189     GetCredInfoCallbackWrapper(int32_t userId, int32_t authType, const sptr<IGetCredInfoCallback> &callback);
190     virtual ~GetCredInfoCallbackWrapper() = default;
191 
192     void OnCredentialInfo(const std::vector<CredentialInfo> &infoList) override;
193 
194 private:
195     int32_t userId_;
196     int32_t authType_;
197     sptr<IGetCredInfoCallback> innerCallback_ = nullptr;
198 };
199 
200 class GetPropCallbackWrapper : public GetPropCallback {
201 public:
202     GetPropCallbackWrapper(int32_t userId, const sptr<IGetSetPropCallback> &callback);
203     virtual ~GetPropCallbackWrapper() = default;
204 
205     void OnResult(int32_t result, const Attributes &extraInfo) override;
206 
207 private:
208     int32_t userId_;
209     sptr<IGetSetPropCallback> innerCallback_;
210 };
211 
212 class SetPropCallbackWrapper : public SetPropCallback {
213 public:
214     SetPropCallbackWrapper(int32_t userId, const sptr<IGetSetPropCallback> &callback);
215     virtual ~SetPropCallbackWrapper() = default;
216 
217     void OnResult(int32_t result, const Attributes &extraInfo) override;
218 
219 private:
220     int32_t userId_;
221     sptr<IGetSetPropCallback> innerCallback_;
222 };
223 
224 class GetSecUserInfoCallbackWrapper : public GetSecUserInfoCallback {
225 public:
226     GetSecUserInfoCallbackWrapper(AuthType authType, const sptr<IGetEnrolledIdCallback> &callback);
227     virtual ~GetSecUserInfoCallbackWrapper() = default;
228 
229     void OnSecUserInfo(const SecUserInfo &info) override;
230 
231 private:
232     AuthType authType_;
233     sptr<IGetEnrolledIdCallback> innerCallback_;
234 };
235 
236 class GetSecureUidCallback final : public GetSecUserInfoCallback {
237 public:
238     GetSecureUidCallback(int32_t userId);
239 
240     void OnSecUserInfo(const SecUserInfo &info) override;
241 
242 public:
243     int32_t userId_;
244     uint64_t secureUid_ = 0;
245     std::mutex secureMtx_;
246     std::condition_variable secureCv_;
247 };
248 
249 class PrepareRemoteAuthCallbackWrapper : public PrepareRemoteAuthCallback {
250 public:
251     PrepareRemoteAuthCallbackWrapper(const sptr<IPreRemoteAuthCallback> &callback);
252     virtual ~PrepareRemoteAuthCallbackWrapper() = default;
253 
254     void OnResult(int32_t result) override;
255 
256 private:
257     sptr<IPreRemoteAuthCallback> innerCallback_;
258 };
259 
260 class GetDomainAuthStatusInfoCallback final : public DomainAccountCallback {
261 public:
262     GetDomainAuthStatusInfoCallback(const GetPropertyRequest &request, const sptr<IGetSetPropCallback> &callback);
263 
264     void OnResult(int32_t result, Parcel &parcel) override;
265 
266 private:
267     GetPropertyRequest request_;
268     sptr<IGetSetPropCallback> innerCallback_;
269 };
270 }  // namespace AccountSA
271 }  // namespace OHOS
272 #endif  // OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_ACCOUNT_IAM_CALLBACK_H
273