1 /* 2 * Copyright (c) 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 #include "osaccount_manager_impl.h" 17 #include "os_account_manager.h" 18 #include "account_error_no.h" 19 #include "os_account_info.h" 20 #include "account_log_wrapper.h" 21 22 namespace OHOS::AccountJsKit { 23 using namespace OHOS::AccountSA; 24 IsOsAccountConstraintEnabled(char * constraint,int32_t * errCode)25 bool OsAccountManagerImpl::IsOsAccountConstraintEnabled(char *constraint, int32_t *errCode) 26 { 27 int32_t id = 0; 28 bool isConsEnable = false; 29 std::vector<int32_t> ids; 30 *errCode = OsAccountManager::QueryActiveOsAccountIds(ids); 31 if (*errCode != ERR_OK) { 32 ACCOUNT_LOGE("isOsAccountConstraintEnabled Get id failed"); 33 return false; 34 } 35 if (ids.empty()) { 36 *errCode = ERR_ACCOUNT_COMMON_INVALID_PARAMETER; 37 ACCOUNT_LOGE("isOsAccountConstraintEnabled No Active OsAccount Ids"); 38 return false; 39 } 40 id = ids[0]; 41 *errCode = ConvertToJSErrCode(OsAccountManager::CheckOsAccountConstraintEnabled(id, constraint, isConsEnable)); 42 return isConsEnable; 43 } 44 GetOsAccountType(int32_t * errCode)45 int32_t OsAccountManagerImpl::GetOsAccountType(int32_t *errCode) 46 { 47 OsAccountType type; 48 *errCode = ConvertToJSErrCode(OsAccountManager::GetOsAccountTypeFromProcess(type)); 49 return type; 50 } 51 CheckMultiOsAccountEnabled(int32_t * errCode)52 bool OsAccountManagerImpl::CheckMultiOsAccountEnabled(int32_t *errCode) 53 { 54 bool isMultiOAEnable = false; 55 *errCode = ConvertToJSErrCode(OsAccountManager::IsMultiOsAccountEnable(isMultiOAEnable)); 56 return isMultiOAEnable; 57 } 58 GetOsAccountLocalId(int32_t * errCode)59 int32_t OsAccountManagerImpl::GetOsAccountLocalId(int32_t *errCode) 60 { 61 int32_t id = 0; 62 *errCode = ConvertToJSErrCode(OsAccountManager::GetOsAccountLocalIdFromProcess(id)); 63 return id; 64 } 65 GetActivatedOsAccountLocalIds(std::vector<int32_t> & osAccountIds)66 int32_t OsAccountManagerImpl::GetActivatedOsAccountLocalIds(std::vector<int32_t> &osAccountIds) 67 { 68 return ConvertToJSErrCode(OsAccountManager::QueryActiveOsAccountIds(osAccountIds)); 69 } 70 GetOsAccountCount(int32_t * errCode)71 uint32_t OsAccountManagerImpl::GetOsAccountCount(int32_t *errCode) 72 { 73 uint32_t osAccountCount = 0; 74 *errCode = ConvertToJSErrCode(OsAccountManager::GetCreatedOsAccountsCount(osAccountCount)); 75 return osAccountCount; 76 } 77 QueryDistributedVirtualDeviceId(int32_t * errCode)78 char *OsAccountManagerImpl::QueryDistributedVirtualDeviceId(int32_t *errCode) 79 { 80 std::string deviceId; 81 *errCode = ConvertToJSErrCode(OsAccountManager::GetDistributedVirtualDeviceId(deviceId)); 82 return MallocCString(deviceId); 83 } 84 GetSerialNumberForOsAccountLocalId(uint32_t localId,int32_t * errCode)85 int64_t OsAccountManagerImpl::GetSerialNumberForOsAccountLocalId(uint32_t localId, int32_t *errCode) 86 { 87 int64_t serialNum; 88 *errCode = ConvertToJSErrCode(OsAccountManager::GetSerialNumberByOsAccountLocalId(localId, serialNum)); 89 return serialNum; 90 } 91 GetOsAccountLocalIdForSerialNumber(int64_t serialNumber,int32_t * errCode)92 int32_t OsAccountManagerImpl::GetOsAccountLocalIdForSerialNumber(int64_t serialNumber, int32_t *errCode) 93 { 94 int32_t id = 0; 95 *errCode = ConvertToJSErrCode(OsAccountManager::GetOsAccountLocalIdBySerialNumber(serialNumber, id)); 96 return id; 97 } 98 GetOsAccountLocalIdForDomain(char * domain,char * accountName,int32_t * errCode)99 int32_t OsAccountManagerImpl::GetOsAccountLocalIdForDomain(char *domain, char *accountName, int32_t *errCode) 100 { 101 int32_t id = 0; 102 DomainAccountInfo domainInfo; 103 domainInfo.accountId_ = domain; 104 domainInfo.accountName_ = accountName; 105 *errCode = ConvertToJSErrCode(OsAccountManager::GetOsAccountLocalIdFromDomain(domainInfo, id)); 106 return id; 107 } 108 GetOsAccountLocalIdForUid(int32_t uid,int32_t * errCode)109 int32_t OsAccountManagerImpl::GetOsAccountLocalIdForUid(int32_t uid, int32_t *errCode) 110 { 111 int32_t id = 0; 112 *errCode = ConvertToJSErrCode(OsAccountManager::GetOsAccountLocalIdFromUid(uid, id)); 113 return id; 114 } 115 GetOsAccountName(int32_t * errCode)116 char *OsAccountManagerImpl::GetOsAccountName(int32_t *errCode) 117 { 118 std::string name; 119 *errCode = ConvertToJSErrCode(OsAccountManager::GetOsAccountName(name)); 120 return MallocCString(name); 121 } 122 IsOsAccountUnlocked(int32_t * errCode)123 bool OsAccountManagerImpl::IsOsAccountUnlocked(int32_t *errCode) 124 { 125 bool isVerified = false; 126 *errCode = ConvertToJSErrCode(OsAccountManager::IsCurrentOsAccountVerified(isVerified)); 127 return isVerified; 128 } 129 MallocCString(const std::string & origin)130 char *OsAccountManagerImpl::MallocCString(const std::string &origin) 131 { 132 if (origin.empty()) { 133 return nullptr; 134 } 135 auto len = origin.length() + 1; 136 char *res = static_cast<char *>(malloc(sizeof(char) * len)); 137 if (res == nullptr) { 138 return nullptr; 139 } 140 return std::char_traits<char>::copy(res, origin.c_str(), len); 141 } 142 }