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