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 std::optional<std::vector<std::string>> allowedHapList = std::nullopt; 82 OsAccountInfo osAccountInfos; 83 bool hasShortName = false; 84 }; 85 86 struct CreateOAForDomainAsyncContext : public CommonAsyncContext { 87 OsAccountType type; 88 DomainAccountInfo domainInfo; 89 OsAccountInfo osAccountInfos; 90 CreateOsAccountForDomainOptions domainOptions; 91 ThreadLockInfo *lockInfo; 92 }; 93 94 struct GetOACountAsyncContext : public CommonAsyncContext { 95 unsigned int osAccountsCount = 0; 96 }; 97 98 struct DbDeviceIdAsyncContext : public CommonAsyncContext { 99 std::string deviceId; 100 }; 101 102 struct GetAllConsAsyncContext : public CommonAsyncContext { 103 int id = 0; 104 std::vector<std::string> constraints; 105 }; 106 107 struct GetIdAsyncContext : public CommonAsyncContext { 108 int id = 0; 109 }; 110 111 struct QueryCreateOAAsyncContext : public CommonAsyncContext { 112 std::vector<OsAccountInfo> osAccountInfos; 113 }; 114 115 struct QueryOAConstraintSrcTypeContext : public CommonAsyncContext { 116 int32_t id = 0; 117 std::string constraint; 118 std::vector<ConstraintSourceTypeInfo> constraintSourceTypeInfos; 119 }; 120 121 struct QueryActiveIdsAsyncContext : public CommonAsyncContext { 122 std::vector<int> osAccountIds; 123 }; 124 125 struct GetForegroundOALocalIdAsyncContext : public CommonAsyncContext { 126 int id = 0; 127 }; 128 129 struct GetOAPhotoAsyncContext : public CommonAsyncContext { 130 int id = 0; 131 std::string photo; 132 }; 133 134 struct GetOsAccountNameContext : public CommonAsyncContext { 135 std::string name; 136 }; 137 138 struct CurrentOAAsyncContext : public CommonAsyncContext { 139 OsAccountInfo osAccountInfos; 140 }; 141 142 struct GetIdByUidAsyncContext : public CommonAsyncContext { 143 int id = 0; 144 int uid = 0; 145 }; 146 147 struct GetIdByDomainAsyncContext : public CommonAsyncContext { 148 int id = 0; 149 DomainAccountInfo domainInfo; 150 }; 151 152 struct SetOAPhotoAsyncContext : public CommonAsyncContext { 153 int id = 0; 154 std::string photo; 155 }; 156 157 struct QueryMaxNumAsyncContext : public CommonAsyncContext { 158 uint32_t maxOsAccountNumber = 0; 159 uint32_t maxLoggedInNumber = 0; 160 }; 161 162 struct IsActivedAsyncContext : public CommonAsyncContext { 163 int id = -1; 164 bool isOsAccountActived = false; 165 }; 166 167 struct IsConEnableAsyncContext : public CommonAsyncContext { 168 int id = 0; 169 std::string constraint; 170 bool isConsEnable = false; 171 }; 172 173 struct GetTypeAsyncContext : public CommonAsyncContext { 174 int id = -1; 175 bool withId = false; 176 OsAccountType type; 177 }; 178 179 struct IsMultiEnAsyncContext : public CommonAsyncContext { 180 bool isMultiOAEnable = false; 181 }; 182 183 struct IsVerifiedAsyncContext : public CommonAsyncContext { 184 int id = -1; 185 bool hasAccountId = false; 186 bool IsVerified = false; 187 }; 188 189 struct GetSerialNumIdCBInfo : public CommonAsyncContext { 190 int id = 0; 191 int64_t serialNumber; 192 }; 193 194 struct GetSerialNumForOAInfo : public CommonAsyncContext { 195 int id = 0; 196 int64_t serialNum; 197 }; 198 199 struct IsTestOAInfo : public CommonAsyncContext { 200 bool isTestOsAccount = false; 201 }; 202 203 struct IsMainOAInfo : public CommonAsyncContext { 204 bool isMainOsAccount = false; 205 }; 206 207 struct SubscribeCBInfo : public CommonAsyncContext { SubscribeCBInfoSubscribeCBInfo208 SubscribeCBInfo(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 209 OS_ACCOUNT_SUBSCRIBE_TYPE osSubscribeType = OS_ACCOUNT_SUBSCRIBE_TYPE::INVALID_TYPE; 210 std::string name; 211 OsAccountManager *osManager = nullptr; 212 std::shared_ptr<SubscriberPtr> subscriber = nullptr; 213 }; 214 215 struct SubscriberOAWorker : public CommonAsyncContext { 216 int oldId = 0; 217 int newId = 0; 218 napi_ref ref = nullptr; 219 SubscriberPtr *subscriber = nullptr; 220 }; 221 222 struct UnsubscribeCBInfo : public CommonAsyncContext { UnsubscribeCBInfoUnsubscribeCBInfo223 UnsubscribeCBInfo(napi_env napiEnv) : CommonAsyncContext(napiEnv){}; 224 OS_ACCOUNT_SUBSCRIBE_TYPE osSubscribeType = OS_ACCOUNT_SUBSCRIBE_TYPE::INVALID_TYPE; 225 std::string name; 226 OsAccountManager *osManager = nullptr; 227 std::vector<std::shared_ptr<SubscriberPtr>> subscribers; 228 }; 229 230 struct GetOsAccountDomainInfoAsyncContext : public CommonAsyncContext { 231 int32_t id = 0; 232 DomainAccountInfo domainInfo; 233 }; 234 235 struct BindDomainAccountAsyncContext : public CommonAsyncContext { 236 int32_t localID = -1; 237 DomainAccountInfo domainInfo; 238 }; 239 240 napi_value OsAccountInit(napi_env env, napi_value exports); 241 242 napi_value GetAccountManager(napi_env env, napi_callback_info cbInfo); 243 244 napi_value OsAccountJsConstructor(napi_env env, napi_callback_info cbinfo); 245 246 napi_value QueryOsAccountById(napi_env env, napi_callback_info cbInfo); 247 248 napi_value RemoveOsAccount(napi_env env, napi_callback_info cbInfo); 249 250 napi_value SetOsAccountName(napi_env env, napi_callback_info cbInfo); 251 252 napi_value SetOsAccountConstraints(napi_env env, napi_callback_info cbInfo); 253 254 napi_value ActivateOsAccount(napi_env env, napi_callback_info cbInfo); 255 256 napi_value DeactivateOsAccount(napi_env env, napi_callback_info cbInfo); 257 258 napi_value CreateOsAccount(napi_env env, napi_callback_info cbInfo); 259 260 napi_value CreateOsAccountForDomain(napi_env env, napi_callback_info cbInfo); 261 262 napi_value GetOsAccountCount(napi_env env, napi_callback_info cbInfo); 263 264 napi_value GetCreatedOsAccountsCount(napi_env env, napi_callback_info cbInfo); 265 266 napi_value GetCreatedOsAccountsCountInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 267 268 napi_value QueryDistributedVirtualDeviceId(napi_env env, napi_callback_info cbInfo); 269 270 napi_value GetDistributedVirtualDeviceId(napi_env env, napi_callback_info cbInfo); 271 272 napi_value GetDistributedVirtualDeviceIdInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 273 274 napi_value GetOsAccountConstraints(napi_env env, napi_callback_info cbInfo); 275 276 napi_value GetOsAccountAllConstraints(napi_env env, napi_callback_info cbInfo); 277 278 napi_value GetOsAccountAllConstraintsInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 279 280 napi_value QueryOsAccountLocalIdFromProcess(napi_env env, napi_callback_info cbInfo); 281 282 napi_value GetOsAccountLocalIdFromProcess(napi_env env, napi_callback_info cbInfo); 283 284 napi_value GetOsAccountLocalIdFromProcessInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 285 286 napi_value QueryAllCreatedOsAccounts(napi_env env, napi_callback_info cbInfo); 287 288 napi_value GetActivatedOsAccountIds(napi_env env, napi_callback_info cbInfo); 289 290 napi_value GetForegroundOsAccountLocalId(napi_env env, napi_callback_info cbInfo); 291 292 napi_value QueryActivatedOsAccountIds(napi_env env, napi_callback_info cbInfo); 293 294 napi_value QueryActivatedOsAccountIdsInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 295 296 napi_value GetOsAccountProfilePhoto(napi_env env, napi_callback_info cbInfo); 297 298 napi_value GetOsAccountName(napi_env env, napi_callback_info cbInfo); 299 300 napi_value GetCurrentOsAccount(napi_env env, napi_callback_info cbInfo); 301 302 napi_value QueryCurrentOsAccount(napi_env env, napi_callback_info cbInfo); 303 304 napi_value QueryCurrentOsAccountInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 305 306 napi_value GetOsAccountLocalIdFromUid(napi_env env, napi_callback_info cbInfo); 307 308 napi_value GetOsAccountLocalIdForUid(napi_env env, napi_callback_info cbInfo); 309 310 napi_value GetOsAccountLocalIdForUidSync(napi_env env, napi_callback_info cbInfo); 311 312 napi_value GetOsAccountLocalIdFromUidInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 313 314 napi_value GetBundleIdFromUid(napi_env env, napi_callback_info cbInfo); 315 316 napi_value GetBundleIdForUidSync(napi_env env, napi_callback_info cbInfo); 317 318 napi_value GetOsAccountLocalIdFromDomain(napi_env env, napi_callback_info cbInfo); 319 320 napi_value QueryOsAccountLocalIdFromDomain(napi_env env, napi_callback_info cbInfo); 321 322 napi_value GetOsAccountLocalIdFromDomainInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 323 324 napi_value SetOsAccountProfilePhoto(napi_env env, napi_callback_info cbInfo); 325 326 napi_value QueryMaxOsAccountNumber(napi_env env, napi_callback_info cbInfo); 327 328 napi_value QueryMaxLoggedInOsAccountNumber(napi_env env, napi_callback_info cbInfo); 329 330 napi_value QueryOsAccountConstraintSourceTypes(napi_env env, napi_callback_info cbInfo); 331 332 napi_value IsOsAccountActived(napi_env env, napi_callback_info cbInfo); 333 334 napi_value CheckOsAccountActivated(napi_env env, napi_callback_info cbInfo); 335 336 napi_value IsOsAccountConstraintEnable(napi_env env, napi_callback_info cbInfo); 337 338 napi_value CheckConstraintEnabled(napi_env env, napi_callback_info cbInfo); 339 340 napi_value GetOsAccountType(napi_env env, napi_callback_info cbInfo); 341 342 napi_value GetOsAccountTypeFromProcess(napi_env env, napi_callback_info cbInfo); 343 344 napi_value GetOsAccountTypeFromProcessInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 345 346 napi_value IsMultiOsAccountEnable(napi_env env, napi_callback_info cbInfo); 347 348 napi_value CheckMultiOsAccountEnabled(napi_env env, napi_callback_info cbInfo); 349 350 napi_value InnerIsMultiOsAccountEnable(napi_env env, napi_callback_info cbInfo, bool throwErr); 351 352 napi_value IsOsAccountVerified(napi_env env, napi_callback_info cbInfo); 353 354 napi_value CheckOsAccountVerified(napi_env env, napi_callback_info cbInfo); 355 356 napi_value GetApplicationConstraints(napi_env env, napi_callback_info cbInfo); 357 358 napi_value QueryOsAccountLocalIdBySerialNumber(napi_env env, napi_callback_info cbInfo); 359 360 napi_value GetOsAccountLocalIdBySerialNumber(napi_env env, napi_callback_info cbInfo); 361 362 napi_value GetOsAccountLocalIdBySerialNumberInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 363 364 napi_value QuerySerialNumberByOsAccountLocalId(napi_env env, napi_callback_info cbInfo); 365 366 napi_value GetSerialNumberByOsAccountLocalId(napi_env env, napi_callback_info cbInfo); 367 368 napi_value GetSerialNumberByOsAccountLocalIdInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 369 370 napi_value IsTestOsAccount(napi_env env, napi_callback_info cbInfo); 371 372 napi_value CheckOsAccountTestable(napi_env env, napi_callback_info cbInfo); 373 374 napi_value InnerIsTestOsAccount(napi_env env, napi_callback_info cbInfo, bool throwErr); 375 376 napi_value IsMainOsAccount(napi_env env, napi_callback_info cbInfo); 377 378 napi_value Subscribe(napi_env env, napi_callback_info cbInfo); 379 380 napi_value Unsubscribe(napi_env env, napi_callback_info cbInfo); 381 382 std::function<void()> OnAccountsSubNotifyTask(const std::shared_ptr<SubscriberOAWorker> &subscriberOAWorkerData); 383 384 void UnsubscribeSync(napi_env env, UnsubscribeCBInfo *unsubscribeCBInfo); 385 386 void SetEnumProperty(napi_env env, napi_value dstObj, const int objValue, const char *propName); 387 388 napi_value IsOsAccountActivated(napi_env env, napi_callback_info cbInfo); 389 390 napi_value IsOsAccountConstraintEnabled(napi_env env, napi_callback_info cbInfo); 391 392 napi_value IsOsAccountUnlocked(napi_env env, napi_callback_info cbInfo); 393 394 napi_value GetEnabledOsAccountConstraints(napi_env env, napi_callback_info cbInfo); 395 396 napi_value QueryOsAccount(napi_env env, napi_callback_info cbInfo); 397 398 napi_value GetOsAccountDomainInfo(napi_env env, napi_callback_info cbInfo); 399 400 napi_value BindDomainAccount(napi_env env, napi_callback_info cbInfo); 401 } // namespace AccountJsKit 402 } // namespace OHOS 403 404 #endif // OS_ACCOUNT_INTERFACES_KITS_NAPI_OSACCOUNT_INCLUDE_NAPI_OS_ACCOUNT_H 405