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 "account_log_wrapper.h"
17 #include "os_account_constants.h"
18
19 #include "os_account_file_operator.h"
20 namespace OHOS {
21 namespace AccountSA {
OsAccountFileOperator()22 OsAccountFileOperator::OsAccountFileOperator()
23 {
24 accountFileOperator_ = std::make_shared<AccountFileOperator>();
25 isAlreadyInit_ = false;
26 constratinsList_.clear();
27 }
~OsAccountFileOperator()28 OsAccountFileOperator::~OsAccountFileOperator()
29 {}
Init()30 void OsAccountFileOperator::Init()
31 {
32 std::string constraintsConfigStr;
33 if (accountFileOperator_->IsExistFile(Constants::OSACCOUNT_CONSTRAINTS_JSON_PATH)) {
34 accountFileOperator_->GetFileContentByPath(Constants::OSACCOUNT_CONSTRAINTS_JSON_PATH, constraintsConfigStr);
35 constraintsConfig_ = Json::parse(constraintsConfigStr, nullptr, false);
36 isAlreadyInit_ = true;
37 } else {
38 isAlreadyInit_ = false;
39 }
40 std::string constratinsListColloctingStr;
41 if (accountFileOperator_->IsExistFile(Constants::CONSTRAINTS_LIST_JSON_PATH)) {
42 accountFileOperator_->GetFileContentByPath(Constants::CONSTRAINTS_LIST_JSON_PATH, constratinsListColloctingStr);
43 Json constratinsListCollocting = Json::parse(constratinsListColloctingStr, nullptr, false);
44 OHOS::AccountSA::GetDataByType<std::vector<std::string>>(constratinsListCollocting,
45 constratinsListCollocting.end(),
46 Constants::CONSTANS_LITE,
47 constratinsList_,
48 OHOS::AccountSA::JsonType::ARRAY);
49 }
50 }
51
GetConstraintsByType(const int type,std::vector<std::string> & constratins)52 ErrCode OsAccountFileOperator::GetConstraintsByType(const int type, std::vector<std::string> &constratins)
53 {
54 ACCOUNT_LOGI("OsAccountFileOperator GetConstraintsByType Start");
55 if (!isAlreadyInit_) {
56 return ERR_OSACCOUNT_SERVICE_OS_FILE_GET_CONFIG_ERROR;
57 }
58 std::vector<std::string> typeList;
59 OHOS::AccountSA::GetDataByType<std::vector<std::string>>(
60 constraintsConfig_, constraintsConfig_.end(), Constants::TYPE_LIST, typeList, OHOS::AccountSA::JsonType::ARRAY);
61 if (std::find(typeList.begin(), typeList.end(), std::to_string(type)) == typeList.end()) {
62 ACCOUNT_LOGE("GetConstraintsByType get type error");
63 return ERR_OSACCOUNT_SERVICE_CONTROL_GET_TYPE_ERROR;
64 }
65 Json typeJson;
66 OHOS::AccountSA::GetDataByType<Json>(constraintsConfig_,
67 constraintsConfig_.end(),
68 Constants::USER_CONSTRATINTS_TEMPLATE,
69 typeJson,
70 OHOS::AccountSA::JsonType::OBJECT);
71 constratins.clear();
72 OHOS::AccountSA::GetDataByType<std::vector<std::string>>(
73 typeJson, typeJson.end(), std::to_string(type), constratins, OHOS::AccountSA::JsonType::ARRAY);
74 ACCOUNT_LOGI("OsAccountFileOperator GetConstraintsByType End");
75 return ERR_OK;
76 }
77
GetIsMultiOsAccountEnable(bool & isMultiOsAccountEnable)78 ErrCode OsAccountFileOperator::GetIsMultiOsAccountEnable(bool &isMultiOsAccountEnable)
79 {
80 if (!isAlreadyInit_) {
81 ACCOUNT_LOGE("GetIsMultiOsAccountEnable not init error");
82 return ERR_OSACCOUNT_SERVICE_OS_FILE_GET_CONFIG_ERROR;
83 }
84 OHOS::AccountSA::GetDataByType<Json>(constraintsConfig_,
85 constraintsConfig_.end(),
86 Constants::IS_MULTI_OS_ACCOUNT_ENABLE,
87 isMultiOsAccountEnable,
88 OHOS::AccountSA::JsonType::BOOLEAN);
89 return ERR_OK;
90 }
91
IsAllowedCreateAdmin(bool & isAllowedCreateAdmin)92 ErrCode OsAccountFileOperator::IsAllowedCreateAdmin(bool &isAllowedCreateAdmin)
93 {
94 if (!isAlreadyInit_) {
95 ACCOUNT_LOGE("IsAllowedCreateAdmin not init error");
96 return ERR_OSACCOUNT_SERVICE_OS_FILE_GET_CONFIG_ERROR;
97 }
98 OHOS::AccountSA::GetDataByType<Json>(constraintsConfig_,
99 constraintsConfig_.end(),
100 Constants::IS_ALLOWED_CREATE_ADMIN,
101 isAllowedCreateAdmin,
102 OHOS::AccountSA::JsonType::BOOLEAN);
103 return ERR_OK;
104 }
105
IsConstrarionsInTypeList(const std::vector<std::string> & constrains,bool & isExists)106 ErrCode OsAccountFileOperator::IsConstrarionsInTypeList(const std::vector<std::string> &constrains, bool &isExists)
107 {
108 if (constratinsList_.size() == 0) {
109 ACCOUNT_LOGE("IsConstrarionsInTypeList constratinsList_ zero error");
110 return ERR_OSACCOUNT_SERVICE_OS_FILE_GET_CONSTRATIONS_LITS_ERROR;
111 }
112 isExists = true;
113 for (auto it = constrains.begin(); it != constrains.end(); it++) {
114 if (std::find(constratinsList_.begin(), constratinsList_.end(), *it) == constratinsList_.end()) {
115 isExists = false;
116 }
117 }
118 return ERR_OK;
119 }
120 } // namespace AccountSA
121 } // namespace OHOS