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