• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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 const std::string OS_ACCOUNT_CLASS_NAME = "AccountManager";
36 static thread_local napi_ref osAccountRef_ = nullptr;
37 
38 class SubscriberPtr : public OsAccountSubscriber {
39 public:
40     explicit SubscriberPtr(const OsAccountSubscribeInfo &subscribeInfo);
41     ~SubscriberPtr();
42 
43     void OnAccountsChanged(const int &id) override;
44 
45     void SetEnv(const napi_env &env);
46     void SetCallbackRef(const napi_ref &ref);
47 
48 private:
49     napi_env env_ = nullptr;
50     napi_ref ref_ = nullptr;
51 };
52 
53 struct QueryOAByIdAsyncContext : public CommonAsyncContext {
54     int id = -1;
55     OsAccountInfo osAccountInfos;
56 };
57 
58 struct RemoveOAAsyncContext : public CommonAsyncContext {
59     int id = 0;
60 };
61 
62 struct SetOANameAsyncContext : public CommonAsyncContext {
63     int id = 0;
64     std::string name;
65 };
66 
67 struct SetOAConsAsyncContext : public CommonAsyncContext {
68     int id = 0;
69     bool enable = false;
70     std::vector<std::string> constraints;
71 };
72 
73 struct ActivateOAAsyncContext : public CommonAsyncContext {
74     int id = -1;
75 };
76 
77 struct CreateOAAsyncContext : public CommonAsyncContext {
78     OsAccountType type;
79     std::string name;
80     OsAccountInfo osAccountInfos;
81 };
82 
83 struct CreateOAForDomainAsyncContext : public CommonAsyncContext {
84     OsAccountType type;
85     DomainAccountInfo domainInfo;
86     OsAccountInfo osAccountInfos;
87 };
88 
89 struct GetOACountAsyncContext : public CommonAsyncContext {
90     unsigned int osAccountsCount = 0;
91 };
92 
93 struct DbDeviceIdAsyncContext : public CommonAsyncContext {
94     std::string deviceId;
95 };
96 
97 struct GetAllConsAsyncContext : public CommonAsyncContext {
98     int id = 0;
99     std::vector<std::string> constraints;
100 };
101 
102 struct GetIdAsyncContext : public CommonAsyncContext {
103     int id = 0;
104 };
105 
106 struct QueryCreateOAAsyncContext : public CommonAsyncContext {
107     std::vector<OsAccountInfo> osAccountInfos;
108 };
109 
110 struct QueryOAConstraintSrcTypeContext : public CommonAsyncContext {
111     int32_t id = 0;
112     std::string constraint;
113     std::vector<ConstraintSourceTypeInfo> constraintSourceTypeInfos;
114 };
115 
116 struct QueryActiveIdsAsyncContext : public CommonAsyncContext {
117     std::vector<int> osAccountIds;
118 };
119 
120 struct GetOAPhotoAsyncContext : public CommonAsyncContext {
121     int id = 0;
122     std::string photo;
123 };
124 
125 struct CurrentOAAsyncContext : public CommonAsyncContext {
126     OsAccountInfo osAccountInfos;
127 };
128 
129 struct GetIdByUidAsyncContext : public CommonAsyncContext {
130     int id = 0;
131     int uid = 0;
132 };
133 
134 struct GetIdByDomainAsyncContext : public CommonAsyncContext {
135     int id = 0;
136     DomainAccountInfo domainInfo;
137 };
138 
139 struct SetOAPhotoAsyncContext : public CommonAsyncContext {
140     int id = 0;
141     std::string photo;
142 };
143 
144 struct QueryMaxNumAsyncContext : public CommonAsyncContext {
145     int maxOsAccountNumber = 0;
146 };
147 
148 struct IsActivedAsyncContext : public CommonAsyncContext {
149     int id = -1;
150     bool isOsAccountActived = false;
151 };
152 
153 struct IsConEnableAsyncContext : public CommonAsyncContext {
154     int id = 0;
155     std::string constraint;
156     bool isConsEnable = false;
157 };
158 
159 struct GetTypeAsyncContext : public CommonAsyncContext {
160     OsAccountType type;
161 };
162 
163 struct IsMultiEnAsyncContext : public CommonAsyncContext {
164     bool isMultiOAEnable = false;
165 };
166 
167 struct IsVerifiedAsyncContext : public CommonAsyncContext {
168     int id = -1;
169     bool isTestOA = false;
170 };
171 
172 struct GetSerialNumIdCBInfo : public CommonAsyncContext {
173     int id = 0;
174     int64_t serialNumber;
175 };
176 
177 struct GetSerialNumForOAInfo : public CommonAsyncContext {
178     int id = 0;
179     int64_t serialNum;
180 };
181 
182 struct IsTestOAInfo : public CommonAsyncContext {
183     bool isTestOsAccount = false;
184 };
185 
186 struct IsMainOAInfo : public CommonAsyncContext {
187     bool isMainOsAccount = false;
188 };
189 
190 struct SubscribeCBInfo : public CommonAsyncContext {
191     OS_ACCOUNT_SUBSCRIBE_TYPE osSubscribeType;
192     std::string name;
193     OsAccountManager *osManager = nullptr;
194     std::shared_ptr<SubscriberPtr> subscriber = nullptr;
195 };
196 
197 struct SubscriberOAWorker {
198     int id = 0;
199     napi_env env = nullptr;
200     napi_ref ref = nullptr;
201     SubscriberPtr *subscriber = nullptr;
202 };
203 
204 struct UnsubscribeCBInfo : public CommonAsyncContext {
205     OS_ACCOUNT_SUBSCRIBE_TYPE osSubscribeType;
206     std::string name;
207     OsAccountManager *osManager = nullptr;
208     std::vector<std::shared_ptr<SubscriberPtr>> subscribers;
209 };
210 
211 napi_value OsAccountInit(napi_env env, napi_value exports);
212 
213 napi_value GetAccountManager(napi_env env, napi_callback_info cbInfo);
214 
215 napi_value OsAccountJsConstructor(napi_env env, napi_callback_info cbinfo);
216 
217 napi_value QueryOsAccountById(napi_env env, napi_callback_info cbInfo);
218 
219 napi_value RemoveOsAccount(napi_env env, napi_callback_info cbInfo);
220 
221 napi_value SetOsAccountName(napi_env env, napi_callback_info cbInfo);
222 
223 napi_value SetOsAccountConstraints(napi_env env, napi_callback_info cbInfo);
224 
225 napi_value ActivateOsAccount(napi_env env, napi_callback_info cbInfo);
226 
227 napi_value CreateOsAccount(napi_env env, napi_callback_info cbInfo);
228 
229 napi_value CreateOsAccountForDomain(napi_env env, napi_callback_info cbInfo);
230 
231 napi_value GetOsAccountCount(napi_env env, napi_callback_info cbInfo);
232 
233 napi_value GetCreatedOsAccountsCount(napi_env env, napi_callback_info cbInfo);
234 
235 napi_value GetCreatedOsAccountsCountInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
236 
237 napi_value QueryDistributedVirtualDeviceId(napi_env env, napi_callback_info cbInfo);
238 
239 napi_value GetDistributedVirtualDeviceId(napi_env env, napi_callback_info cbInfo);
240 
241 napi_value GetDistributedVirtualDeviceIdInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
242 
243 napi_value GetOsAccountConstraints(napi_env env, napi_callback_info cbInfo);
244 
245 napi_value GetOsAccountAllConstraints(napi_env env, napi_callback_info cbInfo);
246 
247 napi_value GetOsAccountAllConstraintsInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
248 
249 napi_value QueryOsAccountLocalIdFromProcess(napi_env env, napi_callback_info cbInfo);
250 
251 napi_value GetOsAccountLocalIdFromProcess(napi_env env, napi_callback_info cbInfo);
252 
253 napi_value GetOsAccountLocalIdFromProcessInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
254 
255 napi_value QueryAllCreatedOsAccounts(napi_env env, napi_callback_info cbInfo);
256 
257 napi_value GetActivatedOsAccountIds(napi_env env, napi_callback_info cbInfo);
258 
259 napi_value QueryActivatedOsAccountIds(napi_env env, napi_callback_info cbInfo);
260 
261 napi_value QueryActivatedOsAccountIdsInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
262 
263 napi_value GetOsAccountProfilePhoto(napi_env env, napi_callback_info cbInfo);
264 
265 napi_value GetCurrentOsAccount(napi_env env, napi_callback_info cbInfo);
266 
267 napi_value QueryCurrentOsAccount(napi_env env, napi_callback_info cbInfo);
268 
269 napi_value QueryCurrentOsAccountInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
270 
271 napi_value QueryOsAccountLocalIdFromUid(napi_env env, napi_callback_info cbInfo);
272 
273 napi_value GetOsAccountLocalIdFromUid(napi_env env, napi_callback_info cbInfo);
274 
275 napi_value GetOsAccountLocalIdFromUidInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
276 
277 napi_value GetBundleIdFromUid(napi_env env, napi_callback_info cbInfo);
278 
279 napi_value GetOsAccountLocalIdFromDomain(napi_env env, napi_callback_info cbInfo);
280 
281 napi_value QueryOsAccountLocalIdFromDomain(napi_env env, napi_callback_info cbInfo);
282 
283 napi_value GetOsAccountLocalIdFromDomainInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
284 
285 napi_value SetOsAccountProfilePhoto(napi_env env, napi_callback_info cbInfo);
286 
287 napi_value QueryMaxOsAccountNumber(napi_env env, napi_callback_info cbInfo);
288 
289 napi_value QueryOsAccountConstraintSourceTypes(napi_env env, napi_callback_info cbInfo);
290 
291 napi_value IsOsAccountActived(napi_env env, napi_callback_info cbInfo);
292 
293 napi_value CheckOsAccountActivated(napi_env env, napi_callback_info cbInfo);
294 
295 napi_value IsOsAccountConstraintEnable(napi_env env, napi_callback_info cbInfo);
296 
297 napi_value CheckConstraintEnabled(napi_env env, napi_callback_info cbInfo);
298 
299 napi_value GetOsAccountType(napi_env env, napi_callback_info cbInfo);
300 
301 napi_value GetOsAccountTypeFromProcess(napi_env env, napi_callback_info cbInfo);
302 
303 napi_value GetOsAccountTypeFromProcessInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
304 
305 napi_value IsMultiOsAccountEnable(napi_env env, napi_callback_info cbInfo);
306 
307 napi_value CheckMultiOsAccountEnabled(napi_env env, napi_callback_info cbInfo);
308 
309 napi_value InnerIsMultiOsAccountEnable(napi_env env, napi_callback_info cbInfo, bool throwErr);
310 
311 napi_value IsOsAccountVerified(napi_env env, napi_callback_info cbInfo);
312 
313 napi_value CheckOsAccountVerified(napi_env env, napi_callback_info cbInfo);
314 
315 napi_value GetApplicationConstraints(napi_env env, napi_callback_info cbInfo);
316 
317 napi_value QueryOsAccountLocalIdBySerialNumber(napi_env env, napi_callback_info cbInfo);
318 
319 napi_value GetOsAccountLocalIdBySerialNumber(napi_env env, napi_callback_info cbInfo);
320 
321 napi_value GetOsAccountLocalIdBySerialNumberInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
322 
323 napi_value QuerySerialNumberByOsAccountLocalId(napi_env env, napi_callback_info cbInfo);
324 
325 napi_value GetSerialNumberByOsAccountLocalId(napi_env env, napi_callback_info cbInfo);
326 
327 napi_value GetSerialNumberByOsAccountLocalIdInner(napi_env env, napi_callback_info cbInfo, bool throwErr);
328 
329 napi_value IsTestOsAccount(napi_env env, napi_callback_info cbInfo);
330 
331 napi_value CheckOsAccountTestable(napi_env env, napi_callback_info cbInfo);
332 
333 napi_value InnerIsTestOsAccount(napi_env env, napi_callback_info cbInfo, bool throwErr);
334 
335 napi_value IsMainOsAccount(napi_env env, napi_callback_info cbInfo);
336 
337 napi_value Subscribe(napi_env env, napi_callback_info cbInfo);
338 
339 napi_value Unsubscribe(napi_env env, napi_callback_info cbInfo);
340 
341 void UvQueueWorkOnAccountsChanged(uv_work_t *work, int status);
342 
343 void FindSubscriberInMap(
344     std::vector<std::shared_ptr<SubscriberPtr>> &subscribers, UnsubscribeCBInfo *unsubscribeCBInfo, bool &isFind);
345 
346 void UnsubscribeExecuteCB(napi_env env, void *data);
347 
348 void UnsubscribeCallbackCompletedCB(napi_env env, napi_status status, void *data);
349 
350 void SetEnumProperty(napi_env env, napi_value dstObj, const int objValue, const char *propName);
351 }  // namespace AccountJsKit
352 }  // namespace OHOS
353 
354 #endif  // OS_ACCOUNT_INTERFACES_KITS_NAPI_OSACCOUNT_INCLUDE_NAPI_OS_ACCOUNT_H
355