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