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 struct GetOsAccountDomainInfoAsyncContext : public CommonAsyncContext { 230 int32_t id = 0; 231 DomainAccountInfo domainInfo; 232 }; 233 234 napi_value OsAccountInit(napi_env env, napi_value exports); 235 236 napi_value GetAccountManager(napi_env env, napi_callback_info cbInfo); 237 238 napi_value OsAccountJsConstructor(napi_env env, napi_callback_info cbinfo); 239 240 napi_value QueryOsAccountById(napi_env env, napi_callback_info cbInfo); 241 242 napi_value RemoveOsAccount(napi_env env, napi_callback_info cbInfo); 243 244 napi_value SetOsAccountName(napi_env env, napi_callback_info cbInfo); 245 246 napi_value SetOsAccountConstraints(napi_env env, napi_callback_info cbInfo); 247 248 napi_value ActivateOsAccount(napi_env env, napi_callback_info cbInfo); 249 250 napi_value DeactivateOsAccount(napi_env env, napi_callback_info cbInfo); 251 252 napi_value CreateOsAccount(napi_env env, napi_callback_info cbInfo); 253 254 napi_value CreateOsAccountForDomain(napi_env env, napi_callback_info cbInfo); 255 256 napi_value GetOsAccountCount(napi_env env, napi_callback_info cbInfo); 257 258 napi_value GetCreatedOsAccountsCount(napi_env env, napi_callback_info cbInfo); 259 260 napi_value GetCreatedOsAccountsCountInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 261 262 napi_value QueryDistributedVirtualDeviceId(napi_env env, napi_callback_info cbInfo); 263 264 napi_value GetDistributedVirtualDeviceId(napi_env env, napi_callback_info cbInfo); 265 266 napi_value GetDistributedVirtualDeviceIdInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 267 268 napi_value GetOsAccountConstraints(napi_env env, napi_callback_info cbInfo); 269 270 napi_value GetOsAccountAllConstraints(napi_env env, napi_callback_info cbInfo); 271 272 napi_value GetOsAccountAllConstraintsInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 273 274 napi_value QueryOsAccountLocalIdFromProcess(napi_env env, napi_callback_info cbInfo); 275 276 napi_value GetOsAccountLocalIdFromProcess(napi_env env, napi_callback_info cbInfo); 277 278 napi_value GetOsAccountLocalIdFromProcessInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 279 280 napi_value QueryAllCreatedOsAccounts(napi_env env, napi_callback_info cbInfo); 281 282 napi_value GetActivatedOsAccountIds(napi_env env, napi_callback_info cbInfo); 283 284 napi_value GetForegroundOsAccountLocalId(napi_env env, napi_callback_info cbInfo); 285 286 napi_value QueryActivatedOsAccountIds(napi_env env, napi_callback_info cbInfo); 287 288 napi_value QueryActivatedOsAccountIdsInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 289 290 napi_value GetOsAccountProfilePhoto(napi_env env, napi_callback_info cbInfo); 291 292 napi_value GetOsAccountName(napi_env env, napi_callback_info cbInfo); 293 294 napi_value GetCurrentOsAccount(napi_env env, napi_callback_info cbInfo); 295 296 napi_value QueryCurrentOsAccount(napi_env env, napi_callback_info cbInfo); 297 298 napi_value QueryCurrentOsAccountInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 299 300 napi_value GetOsAccountLocalIdFromUid(napi_env env, napi_callback_info cbInfo); 301 302 napi_value GetOsAccountLocalIdForUid(napi_env env, napi_callback_info cbInfo); 303 304 napi_value GetOsAccountLocalIdForUidSync(napi_env env, napi_callback_info cbInfo); 305 306 napi_value GetOsAccountLocalIdFromUidInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 307 308 napi_value GetBundleIdFromUid(napi_env env, napi_callback_info cbInfo); 309 310 napi_value GetBundleIdForUidSync(napi_env env, napi_callback_info cbInfo); 311 312 napi_value GetOsAccountLocalIdFromDomain(napi_env env, napi_callback_info cbInfo); 313 314 napi_value QueryOsAccountLocalIdFromDomain(napi_env env, napi_callback_info cbInfo); 315 316 napi_value GetOsAccountLocalIdFromDomainInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 317 318 napi_value SetOsAccountProfilePhoto(napi_env env, napi_callback_info cbInfo); 319 320 napi_value QueryMaxOsAccountNumber(napi_env env, napi_callback_info cbInfo); 321 322 napi_value QueryMaxLoggedInOsAccountNumber(napi_env env, napi_callback_info cbInfo); 323 324 napi_value QueryOsAccountConstraintSourceTypes(napi_env env, napi_callback_info cbInfo); 325 326 napi_value IsOsAccountActived(napi_env env, napi_callback_info cbInfo); 327 328 napi_value CheckOsAccountActivated(napi_env env, napi_callback_info cbInfo); 329 330 napi_value IsOsAccountConstraintEnable(napi_env env, napi_callback_info cbInfo); 331 332 napi_value CheckConstraintEnabled(napi_env env, napi_callback_info cbInfo); 333 334 napi_value GetOsAccountType(napi_env env, napi_callback_info cbInfo); 335 336 napi_value GetOsAccountTypeFromProcess(napi_env env, napi_callback_info cbInfo); 337 338 napi_value GetOsAccountTypeFromProcessInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 339 340 napi_value IsMultiOsAccountEnable(napi_env env, napi_callback_info cbInfo); 341 342 napi_value CheckMultiOsAccountEnabled(napi_env env, napi_callback_info cbInfo); 343 344 napi_value InnerIsMultiOsAccountEnable(napi_env env, napi_callback_info cbInfo, bool throwErr); 345 346 napi_value IsOsAccountVerified(napi_env env, napi_callback_info cbInfo); 347 348 napi_value CheckOsAccountVerified(napi_env env, napi_callback_info cbInfo); 349 350 napi_value GetApplicationConstraints(napi_env env, napi_callback_info cbInfo); 351 352 napi_value QueryOsAccountLocalIdBySerialNumber(napi_env env, napi_callback_info cbInfo); 353 354 napi_value GetOsAccountLocalIdBySerialNumber(napi_env env, napi_callback_info cbInfo); 355 356 napi_value GetOsAccountLocalIdBySerialNumberInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 357 358 napi_value QuerySerialNumberByOsAccountLocalId(napi_env env, napi_callback_info cbInfo); 359 360 napi_value GetSerialNumberByOsAccountLocalId(napi_env env, napi_callback_info cbInfo); 361 362 napi_value GetSerialNumberByOsAccountLocalIdInner(napi_env env, napi_callback_info cbInfo, bool throwErr); 363 364 napi_value IsTestOsAccount(napi_env env, napi_callback_info cbInfo); 365 366 napi_value CheckOsAccountTestable(napi_env env, napi_callback_info cbInfo); 367 368 napi_value InnerIsTestOsAccount(napi_env env, napi_callback_info cbInfo, bool throwErr); 369 370 napi_value IsMainOsAccount(napi_env env, napi_callback_info cbInfo); 371 372 napi_value Subscribe(napi_env env, napi_callback_info cbInfo); 373 374 napi_value Unsubscribe(napi_env env, napi_callback_info cbInfo); 375 376 std::function<void()> OnAccountsSubNotifyTask(const std::shared_ptr<SubscriberOAWorker> &subscriberOAWorkerData); 377 378 void UnsubscribeSync(napi_env env, UnsubscribeCBInfo *unsubscribeCBInfo); 379 380 void SetEnumProperty(napi_env env, napi_value dstObj, const int objValue, const char *propName); 381 382 napi_value IsOsAccountActivated(napi_env env, napi_callback_info cbInfo); 383 384 napi_value IsOsAccountConstraintEnabled(napi_env env, napi_callback_info cbInfo); 385 386 napi_value IsOsAccountUnlocked(napi_env env, napi_callback_info cbInfo); 387 388 napi_value GetEnabledOsAccountConstraints(napi_env env, napi_callback_info cbInfo); 389 390 napi_value QueryOsAccount(napi_env env, napi_callback_info cbInfo); 391 392 napi_value GetOsAccountDomainInfo(napi_env env, napi_callback_info cbInfo); 393 } // namespace AccountJsKit 394 } // namespace OHOS 395 396 #endif // OS_ACCOUNT_INTERFACES_KITS_NAPI_OSACCOUNT_INCLUDE_NAPI_OS_ACCOUNT_H 397