From 8bf69c74bac2aca617b25419f1f5979dbaa3d179 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 25 Dec 2023 10:45:12 +0800 Subject: [PATCH] 123 Signed-off-by: Anonymous --- .../file_access/src/file_access_helper.cpp | 130 ++++++++++-------- 1 file changed, 74 insertions(+), 56 deletions(-) diff --git a/interfaces/inner_api/file_access/src/file_access_helper.cpp b/interfaces/inner_api/file_access/src/file_access_helper.cpp index cfd22d1d..3bb605bc 100644 --- a/interfaces/inner_api/file_access/src/file_access_helper.cpp +++ b/interfaces/inner_api/file_access/src/file_access_helper.cpp @@ -174,19 +174,48 @@ static bool IsSystemApp() return OHOS::Security::AccessToken::TokenIdKit::IsSystemAppByFullTokenID(accessTokenIDEx); } +std::pair, int> CreateFileAccessExtConnection(const AppExecFwk::ExtensionAbilityInfo& extInfo, const std::shared_ptr& context) { + AAFwk::Want want; + want.SetElementName(extInfo.bundleName, extInfo.name); + sptr fileAccessExtConnection(new(std::nothrow) FileAccessExtConnection()); + if (fileAccessExtConnection == nullptr) { + HILOG_ERROR("new fileAccessExtConnection fail"); + return {nullptr, E_GETRESULT}; + } + if (!fileAccessExtConnection->IsExtAbilityConnected()) { + fileAccessExtConnection->ConnectFileExtAbility(want, context->GetToken()); + } + sptr fileExtProxy = fileAccessExtConnection->GetFileExtProxy(); + if (fileExtProxy == nullptr) { + HILOG_ERROR("get invalid fileExtProxy"); + return {nullptr, E_CONNECT}; + } + std::shared_ptr connectInfo = std::make_shared(); + if (!connectInfo) { + HILOG_ERROR("connectInfo == nullptr"); + return {nullptr, E_GETRESULT}; + } + connectInfo->want = want; + connectInfo->fileAccessExtConnection = fileAccessExtConnection; + return {connectInfo, ERR_OK}; +} + std::pair, int> FileAccessHelper::Creator( const std::shared_ptr &context) { UserAccessTracer trace; trace.Start("Creator"); + if (context == nullptr) { HILOG_ERROR("FileAccessHelper::Creator failed, context == nullptr"); return {nullptr, EINVAL}; } + if (!IsSystemApp()) { HILOG_ERROR("FileAccessHelper::Creator check IsSystemAppByFullTokenID failed"); return {nullptr, E_PERMISSION_SYS}; } + sptr bm = FileAccessHelper::GetBundleMgrProxy(); FileAccessHelper::wants_.clear(); std::unordered_map> cMap; @@ -198,64 +227,58 @@ std::pair, int> FileAccessHelper::Creator( return {nullptr, E_GETINFO}; } for (size_t i = 0; i < extensionInfos.size(); i++) { - AAFwk::Want wantTem; - wantTem.SetElementName(extensionInfos[i].bundleName, extensionInfos[i].name); - sptr fileAccessExtConnection(new(std::nothrow) FileAccessExtConnection()); - if (fileAccessExtConnection == nullptr) { - HILOG_ERROR("new fileAccessExtConnection fail"); - return {nullptr, E_GETRESULT}; - } - if (!fileAccessExtConnection->IsExtAbilityConnected()) { - fileAccessExtConnection->ConnectFileExtAbility(wantTem, context->GetToken()); - } - sptr fileExtProxy = fileAccessExtConnection->GetFileExtProxy(); - if (fileExtProxy == nullptr) { - HILOG_ERROR("Creator get invalid fileExtProxy"); - return {nullptr, E_CONNECT}; - } - std::shared_ptr connectInfo = std::make_shared(); - if (!connectInfo) { - HILOG_ERROR("Creator, connectInfo == nullptr"); - return {nullptr, E_GETRESULT}; + auto [connectInfo, errCode] = CreateFileAccessExtConnection(extensionInfos[i], context); + if (connectInfo == nullptr) { + HILOG_ERROR("CreateFileAccessExtConnection failed"); + return {nullptr, errCode}; } - FileAccessHelper::wants_.push_back(wantTem); - connectInfo->want = wantTem; - connectInfo->fileAccessExtConnection = fileAccessExtConnection; + + FileAccessHelper::wants_.push_back(connectInfo->want); cMap.emplace(extensionInfos[i].bundleName, connectInfo); } + FileAccessHelper *ptrFileAccessHelper = new (std::nothrow) FileAccessHelper(context, cMap); if (ptrFileAccessHelper == nullptr) { HILOG_ERROR("FileAccessHelper::Creator failed, create FileAccessHelper failed"); return {nullptr, E_GETRESULT}; } + return {std::shared_ptr(ptrFileAccessHelper), ERR_OK}; } -std::pair, int> FileAccessHelper::Creator( - const std::shared_ptr &context, const std::vector &wants) +int CheckCreatorConditions( + const std::shared_ptr& context, + const std::vector& wants) { - UserAccessTracer trace; - trace.Start("Creator"); if (context == nullptr) { - HILOG_ERROR("FileAccessHelper::Creator failed, context == nullptr"); - return {nullptr, EINVAL}; + HILOG_ERROR("FileAccessHelper::Creator failed, context is nullptr"); + return EINVAL; } - - if (wants.size() == 0) { + if (wants.empty()) { HILOG_ERROR("FileAccessHelper::Creator failed, wants is empty"); - return {nullptr, EINVAL}; + return EINVAL; } - if (!IsSystemApp()) { HILOG_ERROR("FileAccessHelper::Creator check IsSystemAppByFullTokenID failed"); - return {nullptr, E_PERMISSION_SYS}; + return E_PERMISSION_SYS; } + return ERR_OK; +} + +std::pair, int> FileAccessHelper::Creator( + const std::shared_ptr &context, const std::vector &wants) +{ + UserAccessTracer trace; + trace.Start("Creator"); + int checkResult = CheckCreatorConditions(context, wants); + if (checkResult != ERR_OK) { + return {nullptr, checkResult}; + } if (GetRegisteredFileAccessExtAbilityInfo(FileAccessHelper::wants_) != ERR_OK) { HILOG_ERROR("GetRegisteredFileAccessExtAbilityInfo failed"); return {nullptr, E_GETINFO}; } - std::unordered_map> cMap; for (size_t i = 0; i < wants.size(); i++) { sptr fileAccessExtConnection(new(std::nothrow) FileAccessExtConnection()); @@ -263,23 +286,19 @@ std::pair, int> FileAccessHelper::Creator( HILOG_ERROR("new fileAccessExtConnection fail"); return {nullptr, E_GETRESULT}; } - if (!fileAccessExtConnection->IsExtAbilityConnected()) { fileAccessExtConnection->ConnectFileExtAbility(wants[i], context->GetToken()); } - sptr fileExtProxy = fileAccessExtConnection->GetFileExtProxy(); if (fileExtProxy == nullptr) { HILOG_ERROR("Creator get invalid fileExtProxy"); return {nullptr, E_CONNECT}; } - std::shared_ptr connectInfo = std::make_shared(); if (connectInfo == nullptr) { HILOG_ERROR("Creator, connectInfo == nullptr"); return {nullptr, E_GETRESULT}; } - connectInfo->want = wants[i]; connectInfo->fileAccessExtConnection = fileAccessExtConnection; string bundleName = FileAccessHelper::GetKeyOfWants(wants[i]); @@ -294,35 +313,39 @@ std::pair, int> FileAccessHelper::Creator( HILOG_ERROR("Creator failed, create FileAccessHelper failed"); return {nullptr, E_GETRESULT}; } - return {std::shared_ptr(ptrFileAccessHelper), ERR_OK}; } -std::shared_ptr FileAccessHelper::Creator(const sptr &token, - const std::vector &wants) +int CheckCreatorConditionsForToken(const sptr& token, const std::vector& wants) { - UserAccessTracer trace; - trace.Start("Creator"); if (token == nullptr) { - HILOG_ERROR("FileAccessHelper::Creator failed, token == nullptr"); - return nullptr; + HILOG_ERROR("FileAccessHelper::Creator failed, token is nullptr"); + return EINVAL; } - - if (wants.size() == 0) { + if (wants.empty()) { HILOG_ERROR("FileAccessHelper::Creator failed, wants is empty"); - return nullptr; + return EINVAL; } - if (!IsSystemApp()) { HILOG_ERROR("FileAccessHelper::Creator check IsSystemAppByFullTokenID failed"); - return nullptr; + return E_PERMISSION_SYS; } + return ERR_OK; +} +std::shared_ptr FileAccessHelper::Creator(const sptr &token, + const std::vector &wants) +{ + UserAccessTracer trace; + trace.Start("Creator"); + int checkResult = CheckCreatorConditionsForToken(token, wants); + if (checkResult != ERR_OK) { + return nullptr; + } if (GetRegisteredFileAccessExtAbilityInfo(FileAccessHelper::wants_) != ERR_OK) { HILOG_ERROR("GetRegisteredFileAccessExtAbilityInfo failed"); return nullptr; } - std::unordered_map> cMap; for (size_t i = 0; i < wants.size(); i++) { sptr fileAccessExtConnection(new(std::nothrow) FileAccessExtConnection()); @@ -330,23 +353,19 @@ std::shared_ptr FileAccessHelper::Creator(const sptrIsExtAbilityConnected()) { fileAccessExtConnection->ConnectFileExtAbility(wants[i], token); } - sptr fileExtProxy = fileAccessExtConnection->GetFileExtProxy(); if (fileExtProxy == nullptr) { HILOG_ERROR("Creator get invalid fileExtProxy"); return nullptr; } - std::shared_ptr connectInfo = std::make_shared(); if (!connectInfo) { HILOG_ERROR("Creator, connectInfo == nullptr"); return nullptr; } - connectInfo->want = wants[i]; connectInfo->fileAccessExtConnection = fileAccessExtConnection; string bundleName = FileAccessHelper::GetKeyOfWants(wants[i]); @@ -361,7 +380,6 @@ std::shared_ptr FileAccessHelper::Creator(const sptr(ptrFileAccessHelper); } -- Gitee