/* * Copyright (c) 2023-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "utils/extension_permissions_util.h" #include "hilog_tag_wrapper.h" #include "hilog_wrapper.h" #include "permission_verification.h" namespace OHOS { namespace AAFwk { bool ExtensionPermissionsUtil::CheckSAPermission(const AppExecFwk::ExtensionAbilityType &extensionType) { auto checkRet = false; if (!PermissionVerification::GetInstance()->IsSACall()) { return true; } TAG_LOGD(AAFwkTag::ABILITYMGR, "CheckSAPermission, extensionType: %{public}d.", extensionType); if (extensionType == AppExecFwk::ExtensionAbilityType::FORM) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_FORM_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::WORK_SCHEDULER) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_WORK_SCHEDULER_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::INPUTMETHOD) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_INPUT_METHOD_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::ACCESSIBILITY) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_ACCESSIBILITY_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::STATICSUBSCRIBER) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_STATIC_SUBSCRIBER_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::WALLPAPER) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_WALLPAPER_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::BACKUP) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_BACKUP_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::ENTERPRISE_ADMIN) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_ENTERPRISE_ADMIN_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::PRINT) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_PRINT_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::VPN) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_VPN_EXTENSION"); } else { checkRet = CheckSAPermissionMore(extensionType); } if (!checkRet) { TAG_LOGE(AAFwkTag::ABILITYMGR, "SA connect permission verification failed."); return false; } return true; } bool ExtensionPermissionsUtil::CheckSAPermissionMore(const AppExecFwk::ExtensionAbilityType &extensionType) { auto checkRet = false; if (extensionType == AppExecFwk::ExtensionAbilityType::FILEACCESS_EXTENSION) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::REMOTE_NOTIFICATION) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_REMOTE_NOTIFICATION_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::REMOTE_LOCATION) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_REMOTE_LOCATION_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::PUSH) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_PUSH_EXTENSION"); } else if (extensionType == AppExecFwk::ExtensionAbilityType::VOIP) { checkRet = PermissionVerification::GetInstance()->VerifyCallingPermission( "ohos.permission.CONNECT_VOIP_EXTENSION"); } else { TAG_LOGI(AAFwkTag::ABILITYMGR, "No need connect permission for extension type %{public}d.", extensionType); return true; } return checkRet; } } // namespace AAFwk } // namespace OHOS