• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "os_account_file_operator.h"
17 
18 #include "account_log_wrapper.h"
19 #include "os_account_constants.h"
20 
21 namespace OHOS {
22 namespace AccountSA {
OsAccountFileOperator()23 OsAccountFileOperator::OsAccountFileOperator()
24 {
25     accountFileOperator_ = std::make_shared<AccountFileOperator>();
26     isAlreadyInit_ = false;
27     constraintsConfig_.clear();
28     baseOsAccountConstraintsConfig_.clear();
29     globalOsAccountConstraintsConfig_.clear();
30     specificOsAccountConstraintsConfig_.clear();
31     constraintList_.clear();
32 }
~OsAccountFileOperator()33 OsAccountFileOperator::~OsAccountFileOperator()
34 {}
Init()35 void OsAccountFileOperator::Init()
36 {
37     if (accountFileOperator_->IsExistFile(Constants::OSACCOUNT_CONSTRAINTS_JSON_PATH)) {
38         std::string constraintsConfigStr;
39         accountFileOperator_->GetFileContentByPath(Constants::OSACCOUNT_CONSTRAINTS_JSON_PATH, constraintsConfigStr);
40         constraintsConfig_ = Json::parse(constraintsConfigStr, nullptr, false);
41         isAlreadyInit_ = true;
42     }
43 
44     if (accountFileOperator_->IsExistFile(Constants::CONSTRAINTS_LIST_JSON_PATH)) {
45         std::string constraintListCollectingStr;
46         accountFileOperator_->GetFileContentByPath(Constants::CONSTRAINTS_LIST_JSON_PATH, constraintListCollectingStr);
47         Json constraintListCollecting = Json::parse(constraintListCollectingStr, nullptr, false);
48         OHOS::AccountSA::GetDataByType<std::vector<std::string>>(constraintListCollecting,
49             constraintListCollecting.end(),
50             Constants::CONSTRAINTS_LIST,
51             constraintList_,
52             OHOS::AccountSA::JsonType::ARRAY);
53     }
54 }
55 
GetConstraintsByType(const int type,std::vector<std::string> & constraints)56 ErrCode OsAccountFileOperator::GetConstraintsByType(const int type, std::vector<std::string> &constraints)
57 {
58     ACCOUNT_LOGD("start");
59     if (!isAlreadyInit_) {
60         return ERR_OSACCOUNT_SERVICE_OS_FILE_GET_CONFIG_ERROR;
61     }
62     std::vector<std::string> typeList;
63     OHOS::AccountSA::GetDataByType<std::vector<std::string>>(
64         constraintsConfig_, constraintsConfig_.end(), Constants::TYPE_LIST, typeList, OHOS::AccountSA::JsonType::ARRAY);
65     if (std::find(typeList.begin(), typeList.end(), std::to_string(type)) == typeList.end()) {
66         ACCOUNT_LOGE("GetConstraintsByType get type error");
67         return ERR_OSACCOUNT_SERVICE_CONTROL_GET_TYPE_ERROR;
68     }
69     Json typeJson;
70     OHOS::AccountSA::GetDataByType<Json>(constraintsConfig_,
71         constraintsConfig_.end(),
72         Constants::USER_CONSTRAINTS_TEMPLATE,
73         typeJson,
74         OHOS::AccountSA::JsonType::OBJECT);
75     constraints.clear();
76     OHOS::AccountSA::GetDataByType<std::vector<std::string>>(
77         typeJson, typeJson.end(), std::to_string(type), constraints, OHOS::AccountSA::JsonType::ARRAY);
78     ACCOUNT_LOGD("end");
79     return ERR_OK;
80 }
81 
GetBaseOAConstraintsList(const int id,std::vector<std::string> & constraints)82 ErrCode OsAccountFileOperator::GetBaseOAConstraintsList(const int id, std::vector<std::string> &constraints)
83 {
84     if (accountFileOperator_->IsExistFile(Constants::BASE_OSACCOUNT_CONSTRAINTS_JSON_PATH)) {
85         std::string baseUserConstraintsConfigStr;
86         accountFileOperator_->GetFileContentByPath(
87             Constants::BASE_OSACCOUNT_CONSTRAINTS_JSON_PATH, baseUserConstraintsConfigStr);
88         baseOsAccountConstraintsConfig_ = Json::parse(baseUserConstraintsConfigStr, nullptr, false);
89     }
90     if (baseOsAccountConstraintsConfig_.size() == 0) {
91         ACCOUNT_LOGE("baseOsAccountConstraints data is empty");
92         return ERR_OSACCOUNT_SERVICE_GET_DATA_FROM_BASE_CONSTRAINTS_FILE_EMPTY;
93     }
94     OHOS::AccountSA::GetDataByType<std::vector<std::string>>(baseOsAccountConstraintsConfig_,
95         baseOsAccountConstraintsConfig_.end(),
96         std::to_string(id),
97         constraints,
98         OHOS::AccountSA::JsonType::ARRAY);
99     return ERR_OK;
100 }
101 
GetGlobalOAConstraintsList(std::vector<std::string> & constraints)102 ErrCode OsAccountFileOperator::GetGlobalOAConstraintsList(std::vector<std::string> &constraints)
103 {
104     if (accountFileOperator_->IsExistFile(Constants::GLOBAL_OSACCOUNT_CONSTRAINTS_JSON_PATH)) {
105         std::string globalOsAccountConstraintsConfigStr;
106         accountFileOperator_->GetFileContentByPath(
107             Constants::GLOBAL_OSACCOUNT_CONSTRAINTS_JSON_PATH, globalOsAccountConstraintsConfigStr);
108         globalOsAccountConstraintsConfig_ = Json::parse(globalOsAccountConstraintsConfigStr, nullptr, false);
109     }
110 
111     if (globalOsAccountConstraintsConfig_.size() == 0) {
112         ACCOUNT_LOGE("globalOsAccountConstraints data is empty");
113         return ERR_OSACCOUNT_SERVICE_GET_DATA_FROM_GLOBAL_CONSTRAINTS_FILE_EMPTY;
114     }
115     OHOS::AccountSA::GetDataByType<std::vector<std::string>>(globalOsAccountConstraintsConfig_,
116         globalOsAccountConstraintsConfig_.end(),
117         Constants::ALL_GLOBAL_CONSTRAINTS,
118         constraints,
119         OHOS::AccountSA::JsonType::ARRAY);
120     return ERR_OK;
121 }
122 
GetSpecificOAConstraintsList(const int id,std::vector<std::string> & constraints)123 ErrCode OsAccountFileOperator::GetSpecificOAConstraintsList(const int id, std::vector<std::string> &constraints)
124 {
125     if (accountFileOperator_->IsExistFile(Constants::SPECIFIC_OSACCOUNT_CONSTRAINTS_JSON_PATH)) {
126         std::string specificOsAccountConstraintsConfigStr;
127         accountFileOperator_->GetFileContentByPath(
128             Constants::SPECIFIC_OSACCOUNT_CONSTRAINTS_JSON_PATH, specificOsAccountConstraintsConfigStr);
129         specificOsAccountConstraintsConfig_ = Json::parse(specificOsAccountConstraintsConfigStr, nullptr, false);
130     }
131 
132     if (specificOsAccountConstraintsConfig_.size() == 0) {
133         ACCOUNT_LOGE("globalOsAccountConstraints data is empty");
134         return ERR_OSACCOUNT_SERVICE_GET_DATA_FROM_SPECIFIC_CONSTRAINTS_FILE_EMPTY;
135     }
136     Json SpecificOAConstraintsData;
137     OHOS::AccountSA::GetDataByType<Json>(specificOsAccountConstraintsConfig_,
138         specificOsAccountConstraintsConfig_.end(),
139         std::to_string(id),
140         SpecificOAConstraintsData,
141         OHOS::AccountSA::JsonType::OBJECT);
142     OHOS::AccountSA::GetDataByType<std::vector<std::string>>(SpecificOAConstraintsData,
143         SpecificOAConstraintsData.end(),
144         Constants::ALL_SPECIFIC_CONSTRAINTS,
145         constraints,
146         OHOS::AccountSA::JsonType::ARRAY);
147     return ERR_OK;
148 }
149 
GetIsMultiOsAccountEnable(bool & isMultiOsAccountEnable)150 ErrCode OsAccountFileOperator::GetIsMultiOsAccountEnable(bool &isMultiOsAccountEnable)
151 {
152     if (!isAlreadyInit_) {
153         ACCOUNT_LOGE("GetIsMultiOsAccountEnable not init error");
154         return ERR_OSACCOUNT_SERVICE_OS_FILE_GET_CONFIG_ERROR;
155     }
156     OHOS::AccountSA::GetDataByType<Json>(constraintsConfig_,
157         constraintsConfig_.end(),
158         Constants::IS_MULTI_OS_ACCOUNT_ENABLE,
159         isMultiOsAccountEnable,
160         OHOS::AccountSA::JsonType::BOOLEAN);
161     return ERR_OK;
162 }
163 
IsAllowedCreateAdmin(bool & isAllowedCreateAdmin)164 ErrCode OsAccountFileOperator::IsAllowedCreateAdmin(bool &isAllowedCreateAdmin)
165 {
166     if (!isAlreadyInit_) {
167         ACCOUNT_LOGE("IsAllowedCreateAdmin not init error");
168         return ERR_OSACCOUNT_SERVICE_OS_FILE_GET_CONFIG_ERROR;
169     }
170     OHOS::AccountSA::GetDataByType<Json>(constraintsConfig_,
171         constraintsConfig_.end(),
172         Constants::IS_ALLOWED_CREATE_ADMIN,
173         isAllowedCreateAdmin,
174         OHOS::AccountSA::JsonType::BOOLEAN);
175     return ERR_OK;
176 }
177 
CheckConstraintsList(const std::vector<std::string> & constraints,bool & isExists,bool & isOverSize)178 ErrCode OsAccountFileOperator::CheckConstraintsList(const std::vector<std::string> &constraints,
179     bool &isExists, bool &isOverSize)
180 {
181     isOverSize = false;
182     isExists = true;
183     if (constraintList_.size() == 0) {
184         ACCOUNT_LOGE("constraintList_ zero error!");
185         return ERR_OSACCOUNT_SERVICE_OS_FILE_GET_CONSTRAINTS_LITS_ERROR;
186     }
187 
188     if (constraints.size() > constraintList_.size()) {
189         ACCOUNT_LOGE("input constraints list size %{public}zu is larger than %{public}zu.",
190             constraints.size(), constraintList_.size());
191         isOverSize = true;
192         return ERR_OK;
193     }
194 
195     for (auto it = constraints.begin(); it != constraints.end(); it++) {
196         if (std::find(constraintList_.begin(), constraintList_.end(), *it) == constraintList_.end()) {
197             isExists = false;
198             return ERR_OK;
199         }
200     }
201     return ERR_OK;
202 }
203 }  // namespace AccountSA
204 }  // namespace OHOS