1 /*
2 * Copyright (c) 2023-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 "extension_config.h"
17
18 #include <fstream>
19
20 #include "config_policy_utils.h"
21 #include "hilog_tag_wrapper.h"
22 #include "json_utils.h"
23 #include "status_singleton.h"
24 namespace OHOS {
25 namespace AAFwk {
26 namespace {
27 constexpr const char* EXTENSION_CONFIG_DEFAULT_PATH = "/system/etc/extension_config.json";
28 constexpr const char* EXTENSION_CONFIG_FILE_PATH = "/etc/extension_config.json";
29
30 constexpr const char* EXTENSION_CONFIG_NAME = "extension_config";
31 constexpr const char* EXTENSION_TYPE_NAME = "extension_type_name";
32 constexpr const char* EXTENSION_AUTO_DISCONNECT_TIME = "auto_disconnect_time";
33
34 // old access flag, deprecated
35 constexpr const char* EXTENSION_THIRD_PARTY_APP_BLOCKED_FLAG_NAME = "third_party_app_blocked_flag";
36 constexpr const char* EXTENSION_SERVICE_BLOCKED_LIST_NAME = "service_blocked_list";
37 constexpr const char* EXTENSION_SERVICE_STARTUP_ENABLE_FLAG = "service_startup_enable_flag";
38
39 // new access flag
40 constexpr const char* ABILITY_ACCESS = "ability_access";
41 constexpr const char* THIRD_PARTY_APP_ACCESS_FLAG = "third_party_app_access_flag";
42 constexpr const char* SERVICE_ACCESS_FLAG = "service_access_flag";
43 constexpr const char* DEFAULT_ACCESS_FLAG = "default_access_flag";
44 constexpr const char* BLOCK_LIST = "blocklist";
45 constexpr const char* ALLOW_LIST = "allowlist";
46 constexpr const char* NETWORK_ACCESS_ENABLE_FLAG = "network_access_enable_flag";
47 constexpr const char* SA_ACCESS_ENABLE_FLAG = "sa_access_enable_flag";
48 }
49
GetExtensionConfigPath() const50 std::string ExtensionConfig::GetExtensionConfigPath() const
51 {
52 std::string configPath = "/etc/extension_config.json";
53 return configPath;
54 }
55
LoadExtensionConfiguration()56 void ExtensionConfig::LoadExtensionConfiguration()
57 {
58 return;
59 }
60
GetExtensionAutoDisconnectTime(const std::string & extensionTypeName)61 int32_t ExtensionConfig::GetExtensionAutoDisconnectTime(const std::string &extensionTypeName)
62 {
63 return DEFAULT_EXTENSION_AUTO_DISCONNECT_TIME;
64 }
65
IsExtensionStartThirdPartyAppEnable(const std::string & extensionTypeName)66 bool ExtensionConfig::IsExtensionStartThirdPartyAppEnable(const std::string &extensionTypeName)
67 {
68 TAG_LOGE(AAFwkTag::ABILITYMGR, "testcase IsExtensionStartThirdPartyAppEnable");
69 return StatusSingleton::GetInstance().isExtensionStartThirdPartyAppEnable_;
70 }
71
IsExtensionStartServiceEnable(const std::string & extensionTypeName,const std::string & targetUri)72 bool ExtensionConfig::IsExtensionStartServiceEnable(const std::string &extensionTypeName, const std::string &targetUri)
73 {
74 return StatusSingleton::GetInstance().isExtensionStartServiceEnable_;
75 }
76
LoadExtensionConfig(const nlohmann::json & object)77 void ExtensionConfig::LoadExtensionConfig(const nlohmann::json &object)
78 {
79 return;
80 }
81
LoadExtensionAutoDisconnectTime(const nlohmann::json & object,const std::string & extensionTypeName)82 void ExtensionConfig::LoadExtensionAutoDisconnectTime(const nlohmann::json &object,
83 const std::string &extensionTypeName)
84 {
85 return;
86 }
87
LoadExtensionThirdPartyAppBlockedList(const nlohmann::json & object,std::string extensionTypeName)88 void ExtensionConfig::LoadExtensionThirdPartyAppBlockedList(const nlohmann::json &object,
89 std::string extensionTypeName)
90 {
91 return;
92 }
93
LoadExtensionServiceBlockedList(const nlohmann::json & object,std::string extensionTypeName)94 void ExtensionConfig::LoadExtensionServiceBlockedList(const nlohmann::json &object, std::string extensionTypeName)
95 {
96 return;
97 }
98
LoadExtensionAbilityAccess(const nlohmann::json & object,const std::string & extensionTypeName)99 bool ExtensionConfig::LoadExtensionAbilityAccess(const nlohmann::json &object, const std::string &extensionTypeName)
100 {
101 return true;
102 }
103
FormatAccessFlag(const std::optional<bool> & flag)104 std::string ExtensionConfig::FormatAccessFlag(const std::optional<bool> &flag)
105 {
106 if (!flag.has_value()) {
107 return "null";
108 }
109 return flag.value() ? "true" : "false";
110 }
111
LoadExtensionAllowOrBlockedList(const nlohmann::json & object,const std::string & key,std::unordered_set<std::string> & list)112 void ExtensionConfig::LoadExtensionAllowOrBlockedList(const nlohmann::json &object, const std::string &key,
113 std::unordered_set<std::string> &list)
114 {
115 return;
116 }
117
LoadExtensionNetworkEnable(const nlohmann::json & object,const std::string & extensionTypeName)118 void ExtensionConfig::LoadExtensionNetworkEnable(const nlohmann::json &object,
119 const std::string &extensionTypeName)
120 {
121 return;
122 }
123
LoadExtensionSAEnable(const nlohmann::json & object,const std::string & extensionTypeName)124 void ExtensionConfig::LoadExtensionSAEnable(const nlohmann::json &object,
125 const std::string &extensionTypeName)
126 {
127 return;
128 }
129
HasAbilityAccess(const std::string & extensionTypeName)130 bool ExtensionConfig::HasAbilityAccess(const std::string &extensionTypeName)
131 {
132 return StatusSingleton::GetInstance().hasAbilityAccess_;
133 }
134
HasThridPartyAppAccessFlag(const std::string & extensionTypeName)135 bool ExtensionConfig::HasThridPartyAppAccessFlag(const std::string &extensionTypeName)
136 {
137 return StatusSingleton::GetInstance().hasThridPartyAppAccessFlag_;
138 }
139
HasServiceAccessFlag(const std::string & extensionTypeName)140 bool ExtensionConfig::HasServiceAccessFlag(const std::string &extensionTypeName)
141 {
142 return StatusSingleton::GetInstance().hasServiceAccessFlag_;
143 }
144
HasDefaultAccessFlag(const std::string & extensionTypeName)145 bool ExtensionConfig::HasDefaultAccessFlag(const std::string &extensionTypeName)
146 {
147 return StatusSingleton::GetInstance().hasDefaultAccessFlag_;
148 }
149
GetSingleAccessFlag(const std::string & extensionTypeName,std::function<std::optional<bool> (const AbilityAccessItem &)> getAccessFlag)150 std::optional<bool> ExtensionConfig::GetSingleAccessFlag(const std::string &extensionTypeName,
151 std::function<std::optional<bool>(const AbilityAccessItem&)> getAccessFlag)
152 {
153 return std::nullopt;
154 }
155
IsExtensionStartThirdPartyAppEnableNew(const std::string & extensionTypeName,const std::string & targetUri)156 bool ExtensionConfig::IsExtensionStartThirdPartyAppEnableNew(const std::string &extensionTypeName,
157 const std::string &targetUri)
158 {
159 return StatusSingleton::GetInstance().isExtensionStartThirdPartyAppEnableNew_;
160 }
161
IsExtensionStartServiceEnableNew(const std::string & extensionTypeName,const std::string & targetUri)162 bool ExtensionConfig::IsExtensionStartServiceEnableNew(const std::string &extensionTypeName,
163 const std::string &targetUri)
164 {
165 return StatusSingleton::GetInstance().isExtensionStartServiceEnableNew_;
166 }
167
IsExtensionStartDefaultEnable(const std::string & extensionTypeName,const std::string & targetUri)168 bool ExtensionConfig::IsExtensionStartDefaultEnable(const std::string &extensionTypeName,
169 const std::string &targetUri)
170 {
171 return StatusSingleton::GetInstance().isExtensionStartDefaultEnable_;
172 }
173
IsExtensionAbilityAccessEnable(const std::string & extensionTypeName,const std::string & targetUri,std::function<std::optional<bool> (const AbilityAccessItem &)> getAccessFlag)174 bool ExtensionConfig::IsExtensionAbilityAccessEnable(const std::string &extensionTypeName,
175 const std::string &targetUri,
176 std::function<std::optional<bool>(const AbilityAccessItem&)> getAccessFlag)
177 {
178 return true;
179 }
180
FindTargetUriInList(const AppExecFwk::ElementName & targetElementName,std::unordered_set<std::string> & list)181 bool ExtensionConfig::FindTargetUriInList(const AppExecFwk::ElementName &targetElementName,
182 std::unordered_set<std::string> &list)
183 {
184 return true;
185 }
186
IsExtensionNetworkEnable(const std::string & extensionTypeName)187 bool ExtensionConfig::IsExtensionNetworkEnable(const std::string &extensionTypeName)
188 {
189 return EXTENSION_NETWORK_ENABLE_FLAG_DEFAULT;
190 }
191
IsExtensionSAEnable(const std::string & extensionTypeName)192 bool ExtensionConfig::IsExtensionSAEnable(const std::string &extensionTypeName)
193 {
194 return EXTENSION_SA_ENABLE_FLAG_DEFAULT;
195 }
196
ReadFileInfoJson(const std::string & filePath,nlohmann::json & jsonBuf)197 bool ExtensionConfig::ReadFileInfoJson(const std::string &filePath, nlohmann::json &jsonBuf)
198 {
199 return true;
200 }
201
CheckExtensionUriValid(const std::string & uri)202 bool ExtensionConfig::CheckExtensionUriValid(const std::string &uri)
203 {
204 return true;
205 }
206 }
207 }