• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }