1c7afe287Sopenharmony_ci/* 2c7afe287Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3c7afe287Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c7afe287Sopenharmony_ci * you may not use this file except in compliance with the License. 5c7afe287Sopenharmony_ci * You may obtain a copy of the License at 6c7afe287Sopenharmony_ci * 7c7afe287Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c7afe287Sopenharmony_ci * 9c7afe287Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c7afe287Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c7afe287Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c7afe287Sopenharmony_ci * See the License for the specific language governing permissions and 13c7afe287Sopenharmony_ci * limitations under the License. 14c7afe287Sopenharmony_ci */ 15c7afe287Sopenharmony_ci 16c7afe287Sopenharmony_ci#include "bundle_mgr_helper.h" 17c7afe287Sopenharmony_ci#include "oaid_common.h" 18c7afe287Sopenharmony_ci#include "bundle_constants.h" 19c7afe287Sopenharmony_ci#include "bundle_mgr_client.h" 20c7afe287Sopenharmony_ci#include "bundle_mgr_interface.h" 21c7afe287Sopenharmony_ci#include "bundle_mgr_proxy.h" 22c7afe287Sopenharmony_ci#include "iservice_registry.h" 23c7afe287Sopenharmony_ci#include "system_ability_definition.h" 24c7afe287Sopenharmony_ci 25c7afe287Sopenharmony_cinamespace OHOS { 26c7afe287Sopenharmony_cinamespace Cloud { 27c7afe287Sopenharmony_ciBundleMgrHelper::BundleMgrHelper() : bundleMgrProxy_(nullptr), oaidDeathRecipient_(nullptr) 28c7afe287Sopenharmony_ci{} 29c7afe287Sopenharmony_ci 30c7afe287Sopenharmony_ciBundleMgrHelper::~BundleMgrHelper() 31c7afe287Sopenharmony_ci{} 32c7afe287Sopenharmony_ci 33c7afe287Sopenharmony_cibool BundleMgrHelper::GetBundleMgrProxy() 34c7afe287Sopenharmony_ci{ 35c7afe287Sopenharmony_ci OAID_HILOGD(OAID_MODULE_SERVICE, "GetBundleMgrProxy"); 36c7afe287Sopenharmony_ci 37c7afe287Sopenharmony_ci if (!bundleMgrProxy_) { 38c7afe287Sopenharmony_ci sptr<ISystemAbilityManager> systemAbilityManager = 39c7afe287Sopenharmony_ci SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); 40c7afe287Sopenharmony_ci if (!systemAbilityManager) { 41c7afe287Sopenharmony_ci OAID_HILOGE(OAID_MODULE_SERVICE, "Failed to get system ability mgr."); 42c7afe287Sopenharmony_ci return false; 43c7afe287Sopenharmony_ci } 44c7afe287Sopenharmony_ci 45c7afe287Sopenharmony_ci sptr<IRemoteObject> remoteObject = 46c7afe287Sopenharmony_ci systemAbilityManager->GetSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); 47c7afe287Sopenharmony_ci if (!remoteObject) { 48c7afe287Sopenharmony_ci OAID_HILOGE(OAID_MODULE_SERVICE, "Failed to get bundle manager service."); 49c7afe287Sopenharmony_ci return false; 50c7afe287Sopenharmony_ci } 51c7afe287Sopenharmony_ci 52c7afe287Sopenharmony_ci bundleMgrProxy_ = iface_cast<IBundleMgr>(remoteObject); 53c7afe287Sopenharmony_ci if ((!bundleMgrProxy_) || (!bundleMgrProxy_->AsObject())) { 54c7afe287Sopenharmony_ci OAID_HILOGE(OAID_MODULE_SERVICE, "Failed to get system bundle manager services ability"); 55c7afe287Sopenharmony_ci return false; 56c7afe287Sopenharmony_ci } 57c7afe287Sopenharmony_ci 58c7afe287Sopenharmony_ci oaidDeathRecipient_ = new (std::nothrow) OAIDDeathRecipient(); 59c7afe287Sopenharmony_ci if (!oaidDeathRecipient_) { 60c7afe287Sopenharmony_ci OAID_HILOGE(OAID_MODULE_SERVICE, "Failed to create death Recipient ptr OAIDDeathRecipient"); 61c7afe287Sopenharmony_ci return false; 62c7afe287Sopenharmony_ci } 63c7afe287Sopenharmony_ci if (!bundleMgrProxy_->AsObject()->AddDeathRecipient(oaidDeathRecipient_)) { 64c7afe287Sopenharmony_ci OAID_HILOGW(OAID_MODULE_SERVICE, "Failed to add death recipient"); 65c7afe287Sopenharmony_ci } 66c7afe287Sopenharmony_ci } 67c7afe287Sopenharmony_ci 68c7afe287Sopenharmony_ci return true; 69c7afe287Sopenharmony_ci} 70c7afe287Sopenharmony_ci 71c7afe287Sopenharmony_cibool BundleMgrHelper::GetBundleInfosV9ByReqPermission(std::vector<AppExecFwk::BundleInfo> &bundleInfos, int32_t userId) 72c7afe287Sopenharmony_ci{ 73c7afe287Sopenharmony_ci OAID_HILOGI(OAID_MODULE_SERVICE, "GetBundleInfosV9ByReqPermission"); 74c7afe287Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 75c7afe287Sopenharmony_ci 76c7afe287Sopenharmony_ci if (!GetBundleMgrProxy()) { 77c7afe287Sopenharmony_ci OAID_HILOGE(OAID_MODULE_SERVICE, "get BundleMgr Proxy fail"); 78c7afe287Sopenharmony_ci return false; 79c7afe287Sopenharmony_ci } 80c7afe287Sopenharmony_ci 81c7afe287Sopenharmony_ci int32_t flag = static_cast<int32_t>(AppExecFwk::GetBundleInfoFlag::GET_BUNDLE_INFO_WITH_REQUESTED_PERMISSION); 82c7afe287Sopenharmony_ci ErrCode ret = bundleMgrProxy_->GetBundleInfosV9(flag, bundleInfos, userId); 83c7afe287Sopenharmony_ci if (ret != ERR_OK) { 84c7afe287Sopenharmony_ci OAID_HILOGE(OAID_MODULE_SERVICE, "Failed to getBundleInfos"); 85c7afe287Sopenharmony_ci return false; 86c7afe287Sopenharmony_ci } 87c7afe287Sopenharmony_ci 88c7afe287Sopenharmony_ci return true; 89c7afe287Sopenharmony_ci} 90c7afe287Sopenharmony_ci 91c7afe287Sopenharmony_cibool BundleMgrHelper::GetApplicationInfoV9WithPermission( 92c7afe287Sopenharmony_ci const std::string bundleName, int32_t userId, AppExecFwk::ApplicationInfo &applicationInfo) 93c7afe287Sopenharmony_ci{ 94c7afe287Sopenharmony_ci OAID_HILOGI(OAID_MODULE_SERVICE, "GetApplicationInfoV9ByReqPermission"); 95c7afe287Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 96c7afe287Sopenharmony_ci 97c7afe287Sopenharmony_ci if (!GetBundleMgrProxy()) { 98c7afe287Sopenharmony_ci OAID_HILOGE(OAID_MODULE_SERVICE, "get BundleMgr Proxy fail"); 99c7afe287Sopenharmony_ci return false; 100c7afe287Sopenharmony_ci } 101c7afe287Sopenharmony_ci 102c7afe287Sopenharmony_ci int32_t applicationFlag = 103c7afe287Sopenharmony_ci static_cast<int32_t>(AppExecFwk::GetApplicationFlag::GET_APPLICATION_INFO_WITH_PERMISSION); 104c7afe287Sopenharmony_ci ErrCode ret = bundleMgrProxy_->GetApplicationInfoV9(bundleName, applicationFlag, userId, applicationInfo); 105c7afe287Sopenharmony_ci if (ret != ERR_OK) { 106c7afe287Sopenharmony_ci OAID_HILOGE(OAID_MODULE_SERVICE, "Failed to GetApplicationInfoV9"); 107c7afe287Sopenharmony_ci return false; 108c7afe287Sopenharmony_ci } 109c7afe287Sopenharmony_ci 110c7afe287Sopenharmony_ci return true; 111c7afe287Sopenharmony_ci} 112c7afe287Sopenharmony_ci 113c7afe287Sopenharmony_civoid BundleMgrHelper::GetBundleNameByUid(const int uid, std::string &name) 114c7afe287Sopenharmony_ci{ 115c7afe287Sopenharmony_ci OAID_HILOGI(OAID_MODULE_SERVICE, "GetBundleNameByUid"); 116c7afe287Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 117c7afe287Sopenharmony_ci 118c7afe287Sopenharmony_ci if (!GetBundleMgrProxy()) { 119c7afe287Sopenharmony_ci OAID_HILOGE(OAID_MODULE_SERVICE, "get BundleMgr Proxy fail"); 120c7afe287Sopenharmony_ci return; 121c7afe287Sopenharmony_ci } 122c7afe287Sopenharmony_ci 123c7afe287Sopenharmony_ci ErrCode ret = bundleMgrProxy_->GetNameForUid(uid, name); 124c7afe287Sopenharmony_ci if (ret != ERR_OK) { 125c7afe287Sopenharmony_ci OAID_HILOGE(OAID_MODULE_SERVICE, "Failed to GetNameForUid"); 126c7afe287Sopenharmony_ci return; 127c7afe287Sopenharmony_ci } 128c7afe287Sopenharmony_ci OAID_HILOGI(OAID_MODULE_SERVICE, "GetBundleNameByUid success"); 129c7afe287Sopenharmony_ci return; 130c7afe287Sopenharmony_ci} 131c7afe287Sopenharmony_ci 132c7afe287Sopenharmony_civoid BundleMgrHelper::ClearBundleMgrHelper() 133c7afe287Sopenharmony_ci{ 134c7afe287Sopenharmony_ci OAID_HILOGI(OAID_MODULE_SERVICE, "ClearBundleMgrHelper"); 135c7afe287Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 136c7afe287Sopenharmony_ci 137c7afe287Sopenharmony_ci if ((bundleMgrProxy_ != nullptr) && (bundleMgrProxy_->AsObject() != nullptr)) { 138c7afe287Sopenharmony_ci bundleMgrProxy_->AsObject()->RemoveDeathRecipient(oaidDeathRecipient_); 139c7afe287Sopenharmony_ci } 140c7afe287Sopenharmony_ci bundleMgrProxy_ = nullptr; 141c7afe287Sopenharmony_ci} 142c7afe287Sopenharmony_ci} // namespace Cloud 143c7afe287Sopenharmony_ci} // namespace OHOS