1 /*
2 * Copyright (c) 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 "bundle_sandbox_app_helper.h"
17
18 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
19 #include "bundle_sandbox_installer.h"
20 #endif
21
22 namespace OHOS {
23 namespace AppExecFwk {
SaveSandboxAppInfo(const InnerBundleInfo & info,const int32_t & appIndex)24 void BundleSandboxAppHelper::SaveSandboxAppInfo(const InnerBundleInfo &info, const int32_t &appIndex)
25 {
26 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
27 APP_LOGD("enter SaveSandboxAppInfo");
28 if (sandboxDataMgr_ == nullptr) {
29 APP_LOGE("sandboxDataMgr_ is nullptr");
30 return;
31 }
32 sandboxDataMgr_->SaveSandboxAppInfo(info, appIndex);
33 #else
34 APP_LOGD("sandbox app not supported");
35 #endif
36 }
37
DeleteSandboxAppInfo(const std::string & bundleName,const int32_t & appIndex)38 void BundleSandboxAppHelper::DeleteSandboxAppInfo(const std::string &bundleName, const int32_t &appIndex)
39 {
40 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
41 APP_LOGD("enter DeleteSandboxAppInfo");
42 if (sandboxDataMgr_ == nullptr) {
43 APP_LOGE("sandboxDataMgr_ is nullptr");
44 return;
45 }
46 sandboxDataMgr_->DeleteSandboxAppInfo(bundleName, appIndex);
47 #else
48 APP_LOGD("sandbox app not supported");
49 #endif
50 }
51
GetSandboxAppBundleInfo(const std::string & bundleName,const int32_t & appIndex,const int32_t & userId,BundleInfo & info) const52 ErrCode BundleSandboxAppHelper::GetSandboxAppBundleInfo(
53 const std::string &bundleName, const int32_t &appIndex, const int32_t &userId, BundleInfo &info) const
54 {
55 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
56 APP_LOGD("enter GetSandboxAppBundleInfo");
57 if (sandboxDataMgr_ == nullptr) {
58 APP_LOGE("sandboxDataMgr_ is nullptr");
59 return ERR_APPEXECFWK_SANDBOX_INSTALL_INTERNAL_ERROR;
60 }
61 return sandboxDataMgr_->GetSandboxAppBundleInfo(bundleName, appIndex, userId, info);
62 #else
63 APP_LOGD("sandbox app not supported");
64 return ERR_APPEXECFWK_SANDBOX_APP_NOT_SUPPORTED;
65 #endif
66 }
67
GenerateSandboxAppIndex(const std::string & bundleName)68 int32_t BundleSandboxAppHelper::GenerateSandboxAppIndex(const std::string &bundleName)
69 {
70 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
71 APP_LOGD("enter GenerateSandboxAppIndex");
72 if (sandboxDataMgr_ == nullptr) {
73 APP_LOGE("sandboxDataMgr_ is nullptr");
74 return Constants::INITIAL_SANDBOX_APP_INDEX;
75 }
76 return sandboxDataMgr_->GenerateSandboxAppIndex(bundleName);
77 #else
78 APP_LOGD("sandbox app not supported");
79 return Constants::INITIAL_SANDBOX_APP_INDEX;
80 #endif
81 }
82
DeleteSandboxAppIndex(const std::string & bundleName,int32_t appIndex)83 bool BundleSandboxAppHelper::DeleteSandboxAppIndex(const std::string &bundleName, int32_t appIndex)
84 {
85 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
86 APP_LOGD("enter DeleteSandboxAppIndex");
87 if (sandboxDataMgr_ == nullptr) {
88 APP_LOGE("sandboxDataMgr_ is nullptr");
89 return false;
90 }
91 return sandboxDataMgr_->DeleteSandboxAppIndex(bundleName, appIndex);
92 #else
93 APP_LOGD("sandbox app not supported");
94 return false;
95 #endif
96 }
97
GetSandboxAppInfoMap() const98 std::unordered_map<std::string, InnerBundleInfo> BundleSandboxAppHelper::GetSandboxAppInfoMap() const
99 {
100 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
101 APP_LOGD("enter GetSandboxAppInfoMap");
102 if (sandboxDataMgr_ == nullptr) {
103 APP_LOGE("sandboxDataMgr_ is nullptr");
104 std::unordered_map<std::string, InnerBundleInfo> innerBundleInfoMap;
105 return innerBundleInfoMap;
106 }
107 return sandboxDataMgr_->GetSandboxAppInfoMap();
108 #else
109 APP_LOGD("sandbox app not supported");
110 std::unordered_map<std::string, InnerBundleInfo> innerBundleInfoMap;
111 return innerBundleInfoMap;
112 #endif
113 }
114
GetSandboxAppInfo(const std::string & bundleName,const int32_t & appIndex,int32_t & userId,InnerBundleInfo & info) const115 ErrCode BundleSandboxAppHelper::GetSandboxAppInfo(
116 const std::string &bundleName, const int32_t &appIndex, int32_t &userId, InnerBundleInfo &info) const
117 {
118 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
119 APP_LOGD("enter GetSandboxAppInfo");
120 if (sandboxDataMgr_ == nullptr) {
121 APP_LOGE("sandboxDataMgr_ is nullptr");
122 return ERR_APPEXECFWK_SANDBOX_INSTALL_INTERNAL_ERROR;
123 }
124 return sandboxDataMgr_->GetSandboxAppInfo(bundleName, appIndex, userId, info);
125 #else
126 APP_LOGD("sandbox app not supported");
127 return ERR_APPEXECFWK_SANDBOX_APP_NOT_SUPPORTED;
128 #endif
129 }
130
GetSandboxHapModuleInfo(const AbilityInfo & abilityInfo,int32_t appIndex,int32_t userId,HapModuleInfo & hapModuleInfo) const131 ErrCode BundleSandboxAppHelper::GetSandboxHapModuleInfo(
132 const AbilityInfo &abilityInfo, int32_t appIndex, int32_t userId, HapModuleInfo &hapModuleInfo) const
133 {
134 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
135 APP_LOGD("enter GetSandboxHapModuleInfo");
136 if (sandboxDataMgr_ == nullptr) {
137 APP_LOGE("sandboxDataMgr_ is nullptr");
138 return ERR_APPEXECFWK_SANDBOX_INSTALL_INTERNAL_ERROR;
139 }
140 return sandboxDataMgr_->GetSandboxHapModuleInfo(abilityInfo, appIndex, userId, hapModuleInfo);
141 #else
142 APP_LOGD("sandbox app not supported");
143 return ERR_APPEXECFWK_SANDBOX_APP_NOT_SUPPORTED;
144 #endif
145 }
146
GetInnerBundleInfoByUid(const int32_t & uid,InnerBundleInfo & innerBundleInfo) const147 ErrCode BundleSandboxAppHelper::GetInnerBundleInfoByUid(const int32_t &uid, InnerBundleInfo &innerBundleInfo) const
148 {
149 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
150 APP_LOGD("enter GetInnerBundleInfoByUid");
151 if (sandboxDataMgr_ == nullptr) {
152 APP_LOGE("sandboxDataMgr_ is nullptr");
153 return ERR_APPEXECFWK_SANDBOX_INSTALL_INTERNAL_ERROR;
154 }
155 return sandboxDataMgr_->GetInnerBundleInfoByUid(uid, innerBundleInfo);
156 #else
157 APP_LOGD("sandbox app not supported");
158 return ERR_APPEXECFWK_SANDBOX_APP_NOT_SUPPORTED;
159 #endif
160 }
161
InstallSandboxApp(const std::string & bundleName,const int32_t & dlpType,const int32_t & userId,int32_t & appIndex)162 ErrCode BundleSandboxAppHelper::InstallSandboxApp(const std::string &bundleName, const int32_t &dlpType,
163 const int32_t &userId, int32_t &appIndex)
164 {
165 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
166 APP_LOGD("enter InstallSandboxApp");
167 std::shared_ptr<BundleSandboxInstaller> installer = std::make_shared<BundleSandboxInstaller>();
168 return installer->InstallSandboxApp(bundleName, dlpType, userId, appIndex);
169 #else
170 APP_LOGD("sandbox app not supported");
171 return ERR_APPEXECFWK_SANDBOX_APP_NOT_SUPPORTED;
172 #endif
173 }
174
UninstallSandboxApp(const std::string & bundleName,const int32_t & appIndex,const int32_t & userId)175 ErrCode BundleSandboxAppHelper::UninstallSandboxApp(
176 const std::string &bundleName, const int32_t &appIndex, const int32_t &userId)
177 {
178 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
179 APP_LOGD("enter UninstallSandboxApp");
180 std::shared_ptr<BundleSandboxInstaller> installer = std::make_shared<BundleSandboxInstaller>();
181 return installer->UninstallSandboxApp(bundleName, appIndex, userId);
182 #else
183 APP_LOGD("sandbox app not supported");
184 return ERR_APPEXECFWK_SANDBOX_APP_NOT_SUPPORTED;
185 #endif
186 }
187
UninstallAllSandboxApps(const std::string & bundleName,int32_t userId)188 ErrCode BundleSandboxAppHelper::UninstallAllSandboxApps(const std::string &bundleName, int32_t userId)
189 {
190 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
191 APP_LOGD("enter UninstallAllSandboxApps");
192 std::shared_ptr<BundleSandboxInstaller> installer = std::make_shared<BundleSandboxInstaller>();
193 return installer->UninstallAllSandboxApps(bundleName, userId);
194 #else
195 APP_LOGD("sandbox app not supported");
196 return ERR_APPEXECFWK_SANDBOX_APP_NOT_SUPPORTED;
197 #endif
198 }
199
RestoreSandboxUidAndGid(std::map<int32_t,std::string> & bundleIdMap)200 void BundleSandboxAppHelper::RestoreSandboxUidAndGid(std::map<int32_t, std::string> &bundleIdMap)
201 {
202 #ifdef BUNDLE_FRAMEWORK_SANDBOX_APP
203 APP_LOGD("enter RestoreSandboxUidAndGid");
204 if (sandboxDataMgr_ == nullptr) {
205 APP_LOGE("sandboxDataMgr_ is nullptr");
206 return;
207 }
208 sandboxDataMgr_->RestoreSandboxUidAndGid(bundleIdMap);
209 #else
210 APP_LOGD("sandbox app not supported");
211 #endif
212 }
213 } // AppExecFwk
214 } // OHOS
215