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