1 /*
2  * Copyright (c) 2021-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_INTERFACES_KITS_NAPI_OSACCOUNT_INCLUDE_NAPI_OS_ACCOUNT_H
17 #define OS_ACCOUNT_INTERFACES_KITS_NAPI_OSACCOUNT_INCLUDE_NAPI_OS_ACCOUNT_H
18 
19 #include <uv.h>
20 #include <map>
21 #include <mutex>
22 #include <vector>
23 #include "os_account_info.h"
24 #include "os_account_manager.h"
25 #include "account_log_wrapper.h"
26 #include "napi/native_api.h"
27 #include "napi/native_node_api.h"
28 #include "napi_account_common.h"
29 
30 namespace OHOS {
31 namespace AccountJsKit {
32 using namespace OHOS::AccountSA;
33 struct SubscribeCBInfo;
34 
35 class SubscriberPtr : public OsAccountSubscriber {
36 public:
37     explicit SubscriberPtr(const OsAccountSubscribeInfo &subscribeInfo);
38     ~SubscriberPtr() override;
39 
40     void OnAccountsChanged(const int &id) override;
41     void OnAccountsSwitch(const int &newId, const int &oldId) override;
42 
43     void SetEnv(const napi_env &env);
44     void SetCallbackRef(const napi_ref &ref);
45 
46 private:
47     void OnAccountsSubNotify(const int &newId, const int &oldId);
48     napi_env env_ = nullptr;
49     napi_ref ref_ = nullptr;
50 };
51 
52 struct QueryOAByIdAsyncContext : public CommonAsyncContext {
53     int id = -1;
54     OsAccountInfo osAccountInfos;
55 };
56 
57 struct RemoveOAAsyncContext : public CommonAsyncContext {
58     int id = 0;
59 };
60 
61 struct SetOANameAsyncContext : public CommonAsyncContext {
62     int id = 0;
63     std::string name;
64 };
65 
66 struct SetOAConsAsyncContext : public CommonAsyncContext {
67     int id = 0;
68     bool enable = false;
69     std::vector<std::string> constraints;
70 };
71 
72 struct ActivateOAAsyncContext : public CommonAsyncContext {
73     int id = -1;
74 };
75 
76 struct CreateOAAsyncContext : public CommonAsyncContext {
77     OsAccountType type;
78     std::string name;
79     std::string shortName;
80     std::vector<std::string> disallowedHapList;
81     OsAccountInfo osAccountInfos;
82     bool hasShortName = false;
83 };
84 
85 struct CreateOAForDomainAsyncContext : public CommonAsyncContext {
86     OsAccountType type;
87     DomainAccountInfo domainInfo;
88     OsAccountInfo osAccountInfos;
89     CreateOsAccountForDomainOptions domainOptions;
90     ThreadLockInfo *lockInfo;
91 };
92 
93 struct GetOACountAsyncContext : public CommonAsyncContext {
94     unsigned int osAccountsCount = 0;
95 };
96 
97 struct DbDeviceIdAsyncContext : public CommonAsyncContext {
98     std::string deviceId;
99 };
100 
101 struct GetAllConsAsyncContext : public CommonAsyncContext {
102     int id = 0;
103     std::vector<std::string> constraints;
104 };
105 
106 struct GetIdAsyncContext : public CommonAsyncContext {
107     int id = 0;
108 };
109 
110 struct QueryCreateOAAsyncContext : public CommonAsyncContext {
111     std::vector<OsAccountInfo> osAccountInfos;
112 };
113 
114 struct QueryOAConstraintSrcTypeContext : public CommonAsyncContext {
115     int32_t id = 0;
116     std::string constraint;
117     std::vector<ConstraintSourceTypeInfo> constraintSourceTypeInfos;
118 };
119 
120 struct QueryActiveIdsAsyncContext : public CommonAsyncContext {
121     std::vector<int> osAccountIds;
122 };
123 
124 struct GetForegroundOALocalIdAsyncContext : public CommonAsyncContext {
125     int id = 0;
126 };
127 
128 struct GetOAPhotoAsyncContext : public CommonAsyncContext {
129     int id = 0;
130     std::string photo;
131 };
132 
133 struct GetOsAccountNameContext : public CommonAsyncContext {
134     std::string name;
135 };
136 
137 struct CurrentOAAsyncContext : public CommonAsyncContext {
138     OsAccountInfo osAccountInfos;
139 };
140 
141 struct GetIdByUidAsyncContext : public CommonAsyncContext {
142     int id = 0;
143     int uid = 0;
144 };
145 
146 struct GetIdByDomainAsyncContext : public CommonAsyncContext {
147     int id = 0;
148     DomainAccountInfo domainInfo;
149 };
150 
151 struct SetOAPhotoAsyncContext : public CommonAsyncContext {
152     int id = 0;
153     std::string photo;
154 };
155 
156 struct QueryMaxNumAsyncContext : public CommonAsyncContext {
157     uint32_t maxOsAccountNumber = 0;
158     uint32_t maxLoggedInNumber = 0;
159 };
160 
161 struct IsActivedAsyncContext : public CommonAsyncContext {
162     int id = -1;
163     bool isOsAccountActived = false;
164 };
165 
166 struct IsConEnableAsyncContext : public CommonAsyncContext {
167     int id = 0;
168     std::string constraint;
169     bool isConsEnable = false;
170 };
171 
172 struct GetTypeAsyncContext : public CommonAsyncContext {
173     int id = -1;
174     bool withId = false;
175     OsAccountType type;
176 };
177 
178 struct IsMultiEnAsyncContext : public CommonAsyncContext {
179     bool isMultiOAEnable = false;
180 };
181 
182 struct IsVerifiedAsyncContext : public CommonAsyncContext {
183     int id = -1;
184     bool hasAccountId = false;
185     bool IsVerified = false;
186 };
187 
188 struct GetSerialNumIdCBInfo : public CommonAsyncContext {
189     int id = 0;
190     int64_t serialNumber;
191 };
192 
193 struct GetSerialNumForOAInfo : public CommonAsyncContext {
194     int id = 0;
195     int64_t serialNum;
196 };
197 
198 struct IsTestOAInfo : public CommonAsyncContext {
199     bool isTestOsAccount = false;
200 };
201 
202 struct IsMainOAInfo : public CommonAsyncContext {
203     bool isMainOsAccount = false;
204 };
205 
206 struct SubscribeCBInfo : public CommonAsyncContext {
SubscribeCBInfoSubscribeCBInfo207     SubscribeCBInfo(napi_env napiEnv) : CommonAsyncContext(napiEnv) {};
208     OS_ACCOUNT_SUBSCRIBE_TYPE osSubscribeType = OS_ACCOUNT_SUBSCRIBE_TYPE::INVALID_TYPE;
209     std::string name;
210     OsAccountManager *osManager = nullptr;
211     std::shared_ptr<SubscriberPtr> subscriber = nullptr;
212 };
213 
214 struct SubscriberOAWorker : public CommonAsyncContext {
215     int oldId = 0;
216     int newId = 0;
217     napi_ref ref = nullptr;
218     SubscriberPtr *subscriber = nullptr;
219 };
220 
221 struct UnsubscribeCBInfo : public CommonAsyncContext {
UnsubscribeCBInfoUnsubscribeCBInfo222     UnsubscribeCBInfo(napi_env napiEnv) : CommonAsyncContext(napiEnv){};
223     OS_ACCOUNT_SUBSCRIBE_TYPE osSubscribeType = OS_ACCOUNT_SUBSCRIBE_TYPE::INVALID_TYPE;
224     std::string name;
225     OsAccountManager *osManager = nullptr;
226     std::vector<std::shared_ptr<SubscriberPtr>> subscribers;
227 };
228 
229 napi_value OsAccountInit(napi_env env, napi_value exports);
230 
231 napi_value GetAccountManager(napi_env env, napi_callback_info cbInfo);
232 
233 napi_value OsAccountJsConstructor(napi_env env, napi_callback_info cbinfo);
234 
235 napi_value QueryOsAccountById(napi_env env, napi_callback_info cbInfo);
236 
237 napi_value RemoveOsAccount(napi_env env, napi_callback_info cbInfo);
238 
239 napi_value SetOsAccountName(napi_env env, napi_callback_info cbInfo);
240 
241 napi_value SetOsAccountConstraints(napi_env env, napi_callback_info cbInfo);
242 
243 napi_value ActivateOsAccount(napi_env env, napi_callback_info cbInfo);
244 
245 napi_value DeactivateOsAccount(napi_env env, napi_callback_info cbInfo);
246 
247 napi_value CreateOsAccount(napi_env env, napi_callback_info cbInfo);
248 
249 napi_value CreateOsAccountForDomain(napi_env env, napi_callback_info cbInfo);
250 
251 napi_value GetOsAccountCount(napi_env env, napi_callback_info cbInfo);
252 
253 napi_value GetCreatedOsAccountsCount(napi_env env, napi_callback_info cbInfo);
254 
255 napi_value GetCreatedOsAccountsCountInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
256 
257 napi_value QueryDistributedVirtualDeviceId(napi_env env, napi_callback_info cbInfo);
258 
259 napi_value GetDistributedVirtualDeviceId(napi_env env, napi_callback_info cbInfo);
260 
261 napi_value GetDistributedVirtualDeviceIdInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
262 
263 napi_value GetOsAccountConstraints(napi_env env, napi_callback_info cbInfo);
264 
265 napi_value GetOsAccountAllConstraints(napi_env env, napi_callback_info cbInfo);
266 
267 napi_value GetOsAccountAllConstraintsInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
268 
269 napi_value QueryOsAccountLocalIdFromProcess(napi_env env, napi_callback_info cbInfo);
270 
271 napi_value GetOsAccountLocalIdFromProcess(napi_env env, napi_callback_info cbInfo);
272 
273 napi_value GetOsAccountLocalIdFromProcessInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
274 
275 napi_value QueryAllCreatedOsAccounts(napi_env env, napi_callback_info cbInfo);
276 
277 napi_value GetActivatedOsAccountIds(napi_env env, napi_callback_info cbInfo);
278 
279 napi_value GetForegroundOsAccountLocalId(napi_env env, napi_callback_info cbInfo);
280 
281 napi_value QueryActivatedOsAccountIds(napi_env env, napi_callback_info cbInfo);
282 
283 napi_value QueryActivatedOsAccountIdsInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
284 
285 napi_value GetOsAccountProfilePhoto(napi_env env, napi_callback_info cbInfo);
286 
287 napi_value GetOsAccountName(napi_env env, napi_callback_info cbInfo);
288 
289 napi_value GetCurrentOsAccount(napi_env env, napi_callback_info cbInfo);
290 
291 napi_value QueryCurrentOsAccount(napi_env env, napi_callback_info cbInfo);
292 
293 napi_value QueryCurrentOsAccountInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
294 
295 napi_value GetOsAccountLocalIdFromUid(napi_env env, napi_callback_info cbInfo);
296 
297 napi_value GetOsAccountLocalIdForUid(napi_env env, napi_callback_info cbInfo);
298 
299 napi_value GetOsAccountLocalIdForUidSync(napi_env env, napi_callback_info cbInfo);
300 
301 napi_value GetOsAccountLocalIdFromUidInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
302 
303 napi_value GetBundleIdFromUid(napi_env env, napi_callback_info cbInfo);
304 
305 napi_value GetBundleIdForUidSync(napi_env env, napi_callback_info cbInfo);
306 
307 napi_value GetOsAccountLocalIdFromDomain(napi_env env, napi_callback_info cbInfo);
308 
309 napi_value QueryOsAccountLocalIdFromDomain(napi_env env, napi_callback_info cbInfo);
310 
311 napi_value GetOsAccountLocalIdFromDomainInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
312 
313 napi_value SetOsAccountProfilePhoto(napi_env env, napi_callback_info cbInfo);
314 
315 napi_value QueryMaxOsAccountNumber(napi_env env, napi_callback_info cbInfo);
316 
317 napi_value QueryMaxLoggedInOsAccountNumber(napi_env env, napi_callback_info cbInfo);
318 
319 napi_value QueryOsAccountConstraintSourceTypes(napi_env env, napi_callback_info cbInfo);
320 
321 napi_value IsOsAccountActived(napi_env env, napi_callback_info cbInfo);
322 
323 napi_value CheckOsAccountActivated(napi_env env, napi_callback_info cbInfo);
324 
325 napi_value IsOsAccountConstraintEnable(napi_env env, napi_callback_info cbInfo);
326 
327 napi_value CheckConstraintEnabled(napi_env env, napi_callback_info cbInfo);
328 
329 napi_value GetOsAccountType(napi_env env, napi_callback_info cbInfo);
330 
331 napi_value GetOsAccountTypeFromProcess(napi_env env, napi_callback_info cbInfo);
332 
333 napi_value GetOsAccountTypeFromProcessInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
334 
335 napi_value IsMultiOsAccountEnable(napi_env env, napi_callback_info cbInfo);
336 
337 napi_value CheckMultiOsAccountEnabled(napi_env env, napi_callback_info cbInfo);
338 
339 napi_value InnerIsMultiOsAccountEnable(napi_env env, napi_callback_info cbInfo, bool throwErr);
340 
341 napi_value IsOsAccountVerified(napi_env env, napi_callback_info cbInfo);
342 
343 napi_value CheckOsAccountVerified(napi_env env, napi_callback_info cbInfo);
344 
345 napi_value GetApplicationConstraints(napi_env env, napi_callback_info cbInfo);
346 
347 napi_value QueryOsAccountLocalIdBySerialNumber(napi_env env, napi_callback_info cbInfo);
348 
349 napi_value GetOsAccountLocalIdBySerialNumber(napi_env env, napi_callback_info cbInfo);
350 
351 napi_value GetOsAccountLocalIdBySerialNumberInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
352 
353 napi_value QuerySerialNumberByOsAccountLocalId(napi_env env, napi_callback_info cbInfo);
354 
355 napi_value GetSerialNumberByOsAccountLocalId(napi_env env, napi_callback_info cbInfo);
356 
357 napi_value GetSerialNumberByOsAccountLocalIdInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
358 
359 napi_value IsTestOsAccount(napi_env env, napi_callback_info cbInfo);
360 
361 napi_value CheckOsAccountTestable(napi_env env, napi_callback_info cbInfo);
362 
363 napi_value InnerIsTestOsAccount(napi_env env, napi_callback_info cbInfo, bool throwErr);
364 
365 napi_value IsMainOsAccount(napi_env env, napi_callback_info cbInfo);
366 
367 napi_value Subscribe(napi_env env, napi_callback_info cbInfo);
368 
369 napi_value Unsubscribe(napi_env env, napi_callback_info cbInfo);
370 
371 std::function<void()> OnAccountsSubNotifyTask(const std::shared_ptr<SubscriberOAWorker> &subscriberOAWorkerData);
372 
373 void UnsubscribeSync(napi_env env, UnsubscribeCBInfo *unsubscribeCBInfo);
374 
375 void SetEnumProperty(napi_env env, napi_value dstObj, const int objValue, const char *propName);
376 
377 napi_value IsOsAccountActivated(napi_env env, napi_callback_info cbInfo);
378 
379 napi_value IsOsAccountConstraintEnabled(napi_env env, napi_callback_info cbInfo);
380 
381 napi_value IsOsAccountUnlocked(napi_env env, napi_callback_info cbInfo);
382 
383 napi_value GetEnabledOsAccountConstraints(napi_env env, napi_callback_info cbInfo);
384 
385 napi_value QueryOsAccount(napi_env env, napi_callback_info cbInfo);
386 }  // namespace AccountJsKit
387 }  // namespace OHOS
388 
389 #endif  // OS_ACCOUNT_INTERFACES_KITS_NAPI_OSACCOUNT_INCLUDE_NAPI_OS_ACCOUNT_H
390