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