diff --git a/interfaces/kits/taihe/fileshare/BUILD.gn b/interfaces/kits/taihe/fileshare/BUILD.gn index 1fce46dad001425d16ba649b84f0fb163ee252e6..f718dc78b1fe6f3cfbb5eccb3e14afd9389b531d 100644 --- a/interfaces/kits/taihe/fileshare/BUILD.gn +++ b/interfaces/kits/taihe/fileshare/BUILD.gn @@ -21,15 +21,18 @@ subsystem_name = "filemanagement" taihe_generated_file_path = "$taihe_file_path/out/$subsystem_name/$part_name/fileshare" copy_taihe_idl("copy_taihe") { - sources = [ "${app_file_service_path}/interfaces/kits/taihe/fileshare/idl/ohos.fileshare.taihe" ] + sources = [ + "${app_file_service_path}/interfaces/kits/taihe/fileshare/idl/ohos.fileshare.fileShare.taihe", + "${app_file_service_path}/interfaces/kits/taihe/fileshare/idl/ohos.fileshare.taihe", + ] } ohos_taihe("run_taihe") { taihe_generated_file_path = "$taihe_generated_file_path" deps = [ ":copy_taihe" ] outputs = [ - "$taihe_generated_file_path/src/ohos.fileshare.ani.cpp", - "$taihe_generated_file_path/src/ohos.fileshare.abi.c", + "$taihe_generated_file_path/src/ohos.fileshare.fileShare.ani.cpp", + "$taihe_generated_file_path/src/ohos.fileshare.fileShare.abi.c", ] } @@ -57,7 +60,7 @@ taihe_shared_library("file_share_taihe") { sources = get_target_outputs(":run_taihe") sources += [ "src/ani_constructor.cpp", - "src/grant_permissons.cpp" + "src/fileshare_taihe.cpp" ] deps = [ @@ -68,6 +71,19 @@ taihe_shared_library("file_share_taihe") { external_deps = [ "hilog:libhilog", "hitrace:hitrace_meter", + "ability_base:want", + "ability_base:zuri", + "ipc:ipc_core", + "access_token:libaccesstoken_sdk", + "access_token:libtokenid_sdk", + "bundle_framework:appexecfwk_base", + "c_utils:utils", + "ability_runtime:abilitykit_native", + "ability_runtime:extensionkit_native", + "ability_runtime:uri_permission_mgr", + "data_share:datashare_common", + "data_share:datashare_consumer", + "file_api:remote_uri_native", ] } @@ -77,7 +93,6 @@ generate_static_abc("file_share_taihe_abc") { is_boot_abc = "True" device_dst_file = "/system/framework/file_share_taihe_abc.abc" dependencies = [ ":run_taihe" ] - } ohos_prebuilt_etc("file_share_etc") { diff --git a/interfaces/kits/taihe/fileshare/idl/ohos.fileshare.fileShare.taihe b/interfaces/kits/taihe/fileshare/idl/ohos.fileshare.fileShare.taihe new file mode 100644 index 0000000000000000000000000000000000000000..3d8d7a4b4682e1d0150d6ffe8605b9fd037e6af8 --- /dev/null +++ b/interfaces/kits/taihe/fileshare/idl/ohos.fileshare.fileShare.taihe @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2025 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. +*/ + +@!namespace("@ohos.fileshare","fileShare") + +@!sts_inject(""" +static { loadLibrary("file_share_taihe.z"); } +""") + +enum OperationMode: i32 { + READ_MODE = 1, + WRITE_MODE = 2, +} + +struct PolicyInfo { + uri: String; + operationMode: i32; +} + +function MakePolicyInfo(uri: String, operationMode: i32): PolicyInfo; + +@gen_promise("activatePermission") +function ActivatePermissionSync( + policies: Array +): void; + +@gen_promise("deactivatePermission") +function DeactivatePermissionSync( + policies: Array +): void; + +@gen_async("grantUriPermission") +@gen_promise("grantUriPermission") +function GrantUriPermissionSync( + uri:String, + bundleName:String, + flag: @sts_type("wantConstant.Flags") Opaque, +): void; diff --git a/interfaces/kits/taihe/fileshare/idl/ohos.fileshare.taihe b/interfaces/kits/taihe/fileshare/idl/ohos.fileshare.taihe index 79ad429bafae3c4516701b295f62bacc10cc3393..203801bc87935d2ece12d56fea43e2dee3b6538d 100644 --- a/interfaces/kits/taihe/fileshare/idl/ohos.fileshare.taihe +++ b/interfaces/kits/taihe/fileshare/idl/ohos.fileshare.taihe @@ -13,29 +13,8 @@ * limitations under the License. */ -@!namespace("@ohos.fileshare","fileShare") +@!namespace("@ohos.fileshare") @!sts_inject(""" -static { loadLibrary("file_share_taihe.z"); } +import type wantConstant from '@ohos.app.ability.wantConstant'; """) - -enum OperationMode: i32 { - READ_MODE = 1, - WRITE_MODE = 2, -} - -struct PolicyInfo { - uri: String; - operationMode: i32; -} -function makePolicyInfo(uri: String, operationMode: i32): PolicyInfo; - -@gen_promise("activatePermission") -function activatePermissionSync( - policies: Array -): void; - -@gen_promise("deactivatePermission") -function deactivatePermissionSync( - policies: Array -): void; diff --git a/interfaces/kits/taihe/fileshare/include/grant_permissons.h b/interfaces/kits/taihe/fileshare/include/fileshare_taihe.h similarity index 52% rename from interfaces/kits/taihe/fileshare/include/grant_permissons.h rename to interfaces/kits/taihe/fileshare/include/fileshare_taihe.h index 4472ee5a1bac7d6f23f2307c76f467d61709db51..532480067698cb54540701d5369c47d89e9fe641 100644 --- a/interfaces/kits/taihe/fileshare/include/grant_permissons.h +++ b/interfaces/kits/taihe/fileshare/include/fileshare_taihe.h @@ -16,16 +16,18 @@ #ifndef FILEMANAGEMENT_APP_FILE_SERVICE_INTERFACES_FILE_SHARE_TAIHE_GRANT_PERMISSONS_H #define FILEMANAGEMENT_APP_FILE_SERVICE_INTERFACES_FILE_SHARE_TAIHE_GRANT_PERMISSONS_H -#include "ohos.fileshare.proj.hpp" -#include "ohos.fileshare.impl.hpp" +#include "ohos.fileshare.fileShare.proj.hpp" +#include "ohos.fileshare.fileShare.impl.hpp" #include "taihe/runtime.hpp" #include "file_permission.h" +#include "iremote_broker.h" namespace ANI::FileShare { - ohos::fileshare::PolicyInfo makePolicyInfo(taihe::string_view uri, int32_t operationMode); - void activatePermissionSync(taihe::array_view policies); - void deactivatePermissionSync(taihe::array_view policies); + ohos::fileshare::fileShare::PolicyInfo MakePolicyInfo(taihe::string_view uri, int32_t operationMode); + void ActivatePermissionSync(taihe::array_view policies); + void DeactivatePermissionSync(taihe::array_view policies); + void GrantUriPermissionSync(taihe::string_view uri, taihe::string_view bundleName, uintptr_t flag); struct PolicyErrorArgs { std::deque errorResults; @@ -33,6 +35,26 @@ namespace ANI::FileShare { ~PolicyErrorArgs() = default; }; + struct UriPermissionInfo { + unsigned int flag; + std::string mode; + std::string bundleName; + std::string uri; + }; + + enum MediaFileTable { + FILE_TABLE = 0, + PHOTO_TABLE = 1, + AUDIO_TABLE = 2, + }; + +class FileShareGrantToken : public OHOS::IRemoteBroker { +public: + DECLARE_INTERFACE_DESCRIPTOR(u"ohos.fileshare.grantUriPermission"); + + FileShareGrantToken() = default; + virtual ~FileShareGrantToken() noexcept = default; +}; } //namespace ANI::FileShare #endif // FILEMANAGEMENT_APP_FILE_SERVICE_INTERFACES_FILE_SHARE_TAIHE_GRANT_PERMISSONS_H diff --git a/interfaces/kits/taihe/fileshare/src/ani_constructor.cpp b/interfaces/kits/taihe/fileshare/src/ani_constructor.cpp index 605757338cc9479a66b90fea9d7f69865786d888..7731485989086d55547d6cc85983e2354a6ee8b8 100644 --- a/interfaces/kits/taihe/fileshare/src/ani_constructor.cpp +++ b/interfaces/kits/taihe/fileshare/src/ani_constructor.cpp @@ -15,6 +15,8 @@ #ifndef FILEMANAGEMENT_APP_FILE_SERVICE_INTERFACES_FILE_SHARE_TAIHE_ANI_CONSTRUCTOR_H #define FILEMANAGEMENT_APP_FILE_SERVICE_INTERFACES_FILE_SHARE_TAIHE_ANI_CONSTRUCTOR_H +#include "taihe/runtime.hpp" +#include "ohos.fileshare.fileShare.ani.hpp" #include "ohos.fileshare.ani.hpp" ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) @@ -23,8 +25,8 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) if (ANI_OK != vm->GetEnv(ANI_VERSION_1, &env)) { return ANI_ERROR; } - if (ANI_OK != ohos::fileshare::ANIRegister(env)) { - std::cerr << "Error from ohos::fileshare::ANIRegister" << std::endl; + if (ANI_OK != ohos::fileshare::fileShare::ANIRegister(env)) { + std::cerr << "Error from ohos::fileshare::fileShare::ANIRegister" << std::endl; return ANI_ERROR; } *result = ANI_VERSION_1; diff --git a/interfaces/kits/taihe/fileshare/src/fileshare_taihe.cpp b/interfaces/kits/taihe/fileshare/src/fileshare_taihe.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9460fc89b687462b3d3f72dda0abb45651d0ab06 --- /dev/null +++ b/interfaces/kits/taihe/fileshare/src/fileshare_taihe.cpp @@ -0,0 +1,304 @@ +/* +* Copyright (c) 2025 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 "fileshare_taihe.h" +#include +#include "ability.h" +#include "ani.h" +#include "datashare_helper.h" +#include "datashare_values_bucket.h" +#include "ipc_skeleton.h" +#include "log.h" +#include "oh_file_share.h" +#include "remote_uri.h" +#include "tokenid_kit.h" +#include "uri_permission_manager_client.h" +#include "want.h" + +namespace ANI::FileShare { +constexpr int32_t E_PERMISSION_SYS = 202; +constexpr int32_t E_PERMISSION_DENIED = -1; +const std::string MEDIA_FILE_URI_PHOTO_PREFEX = "file://media/Photo/"; +const std::string MEDIA_FILE_URI_AUDIO_PREFEX = "file://media/Audio/"; +const std::string MEDIA_FILE_URI_VIDEO_PREFEX = "file://media/video/"; +const std::string MEDIA_FILE_URI_IMAGE_PREFEX = "file://media/image/"; +const std::string MEDIA_FILE_URI_FILE_PREFEX = "file://media/file/"; +const std::string MEDIA_FILE_URI_AUDIO_LOW_PREFEX = "file://media/audio/"; +const std::string PERMISSION_BUNDLE_NAME = "bundle_name"; +const std::string PERMISSION_FILE_ID = "file_id"; +const std::string PERMISSION_MODE = "mode"; +const std::string PERMISSION_TABLE_TYPE = "table_type"; +const std::string MEDIALIBRARY_DATA_URI = "datashare:///media"; +const std::string MEDIA_GRANT_URI_PERMISSION = + "datashare:///media/bundle_permission_insert_operation/bundle_permission_insert_operation"; +const std::string MEDIA_API_VERSION_10 = "?api_version=10"; +const std::string MEDIA_AUTHORITY = "media"; +const std::string FILE_SCHEME = "file"; +const std::string FILE_MANAGER_AUTHORITY = "docs"; +const std::string FILE_NOPS = ""; +const std::string FILE_READ = "r"; +const std::string FILE_WRITE = "w"; + +ohos::fileshare::fileShare::PolicyInfo MakePolicyInfo(taihe::string_view uri, int32_t operationMode) +{ + return {uri, operationMode}; +} + +static int32_t GetUriPoliciesArg(taihe::array_view policies, + std::vector &uriPolicies) +{ + uint32_t count = policies.size(); + if (count > OHOS::AppFileService::MAX_ARRAY_SIZE) { + LOGE("The length of the array is extra-long"); + return E_PARAMS; + } + for (uint32_t i = 0; i < count; i++) { + OHOS::AppFileService::UriPolicyInfo uriPolicy; + uriPolicy.uri = policies[i].uri; + uriPolicy.mode = policies[i].operationMode; + if (uriPolicy.uri == FILE_NOPS) { + LOGE("URI is empty"); + return E_PARAMS; + } + if (uriPolicy.mode != READ_MODE && + uriPolicy.mode != (READ_MODE | WRITE_MODE)) { + LOGE("Invalid operation mode"); + return E_PARAMS; + } + uriPolicies.emplace_back(uriPolicy); + } + return E_NO_ERROR; +} + +void ActivatePermissionSync(taihe::array_view policies) +{ + std::vector uriPolicies; + if (GetUriPoliciesArg(policies, uriPolicies)) { + LOGE("Failed to get URI policies"); + taihe::set_business_error(E_PARAMS, "Failed to get URI policies"); + return; + } + + std::shared_ptr arg = std::make_shared(); + if (arg == nullptr) { + LOGE("PolicyErrorArgs make make_shared failed"); + taihe::set_business_error(E_UNKNOWN_ERROR, "PolicyErrorArgs make make_shared failed"); + return; + } + + arg->errNo = OHOS::AppFileService::FilePermission::ActivatePermission(uriPolicies, arg->errorResults); + if (arg->errNo) { + LOGE("Activation failed"); + taihe::set_business_error(arg->errNo, "Activation failed"); + } +} + +void DeactivatePermissionSync(taihe::array_view policies) +{ + std::vector uriPolicies; + if (GetUriPoliciesArg(policies, uriPolicies)) { + LOGE("Failed to get URI policies"); + taihe::set_business_error(E_PARAMS, "Failed to get URI policies"); + return; + } + + std::shared_ptr arg = std::make_shared(); + if (arg == nullptr) { + LOGE("PolicyErrorArgs make make_shared failed"); + taihe::set_business_error(E_UNKNOWN_ERROR, "PolicyErrorArgs make make_shared failed"); + return; + } + + arg->errNo = OHOS::AppFileService::FilePermission::DeactivatePermission(uriPolicies, arg->errorResults); + if (arg->errNo) { + LOGE("Deactivation failed"); + taihe::set_business_error(arg->errNo, "Deactivation failed"); + return; + } +} + +static bool IsSystemApp() +{ + uint64_t fullTokenId = OHOS::IPCSkeleton::GetCallingFullTokenID(); + return OHOS::Security::AccessToken::TokenIdKit::IsSystemAppByFullTokenID(fullTokenId); +} + +static int32_t GetIdFromUri(std::string uri) +{ + std::replace(uri.begin(), uri.end(), '/', ' '); + std::stringstream ss(uri); + std::string tmp; + int32_t fileId = E_PERMISSION_DENIED; + ss >> tmp >> tmp >> tmp >> fileId; + return fileId; +} + +static std::string GetModeFromFlag(uint32_t flag) +{ + std::string mode = FILE_NOPS; + if (flag & OHOS::AAFwk::Want::FLAG_AUTH_READ_URI_PERMISSION) { + mode += FILE_READ; + } + if (flag & OHOS::AAFwk::Want::FLAG_AUTH_WRITE_URI_PERMISSION) { + mode += FILE_WRITE; + } + return mode; +} + +static int32_t GetMediaTypeAndApiFromUri(const std::string &uri, bool &isApi10) +{ + if (uri.find(MEDIA_FILE_URI_PHOTO_PREFEX) == 0) { + isApi10 = true; + return MediaFileTable::PHOTO_TABLE; + } else if (uri.find(MEDIA_FILE_URI_VIDEO_PREFEX) == 0 || + uri.find(MEDIA_FILE_URI_IMAGE_PREFEX) == 0) { + return MediaFileTable::PHOTO_TABLE; + } else if (uri.find(MEDIA_FILE_URI_AUDIO_PREFEX) == 0) { + isApi10 = true; + return MediaFileTable::AUDIO_TABLE; + } else if (uri.find(MEDIA_FILE_URI_AUDIO_LOW_PREFEX) == 0) { + return MediaFileTable::AUDIO_TABLE; + } else if (uri.find(MEDIA_FILE_URI_FILE_PREFEX) == 0) { + return MediaFileTable::FILE_TABLE; + } + + return MediaFileTable::FILE_TABLE; +} + +static int32_t InitValuesBucket(const UriPermissionInfo &uriPermInfo, Uri &uri, bool &isApi10, + OHOS::DataShare::DataShareValuesBucket &valuesBucket) +{ + int32_t fileId = GetIdFromUri(uriPermInfo.uri); + if (fileId == E_PERMISSION_DENIED) { + LOGE("FileShare::InitValuesBucket get fileId parameter failed!"); + return -EINVAL; + } + + int32_t filesType = GetMediaTypeAndApiFromUri(uri.ToString(), isApi10); + valuesBucket.Put(PERMISSION_FILE_ID, fileId); + valuesBucket.Put(PERMISSION_BUNDLE_NAME, uriPermInfo.bundleName); + valuesBucket.Put(PERMISSION_MODE, uriPermInfo.mode); + valuesBucket.Put(PERMISSION_TABLE_TYPE, filesType); + return E_NO_ERROR; +} + +static int32_t InsertByDatashare(const OHOS::DataShare::DataShareValuesBucket &valuesBucket, bool isApi10) +{ + int32_t ret = E_PERMISSION_DENIED; + std::shared_ptr dataShareHelper = nullptr; + OHOS::sptr remote = new OHOS::IRemoteStub(); + if (remote == nullptr) { + LOGE("FileShare::InsertByDatashare get remoteObject failed!"); + return -ENOMEM; + } + + dataShareHelper = OHOS::DataShare::DataShareHelper::Creator(remote->AsObject(), MEDIALIBRARY_DATA_URI); + if (!dataShareHelper) { + LOGE("FileShare::InsertByDatashare connect to datashare failed!"); + return -E_PERMISSION; + } + std::string uriStr = MEDIA_GRANT_URI_PERMISSION; + if (isApi10) { + uriStr += MEDIA_API_VERSION_10; + } + + OHOS::Uri uri(uriStr); + ret = dataShareHelper->Insert(uri, valuesBucket); + if (ret < 0) { + LOGE("FileShare::InsertByDatashare insert failed with error code %{public}d!", ret); + return ret; + } + return ret; +} + +static int32_t GrantInMediaLibrary(const UriPermissionInfo &uriPermInfo, Uri &uri) +{ + bool isApi10 = false; + OHOS::DataShare::DataShareValuesBucket valuesBucket; + int32_t ret = InitValuesBucket(uriPermInfo, uri, isApi10, valuesBucket); + if (ret < 0) { + return ret; + } + + ret = InsertByDatashare(valuesBucket, isApi10); + if (ret < 0) { + return ret; + } + return E_NO_ERROR; +} + +static int32_t DoGrantUriPermission(const UriPermissionInfo &uriPermInfo) +{ + Uri uri(uriPermInfo.uri); + std::string authority = uri.GetAuthority(); + std::string path = uri.GetPath(); + if (authority == MEDIA_AUTHORITY && path.find(".") == std::string::npos) { + return GrantInMediaLibrary(uriPermInfo, uri); + } else { + auto& uriPermissionClient = OHOS::AAFwk::UriPermissionManagerClient::GetInstance(); + int32_t ret = uriPermissionClient.GrantUriPermission(uri, uriPermInfo.flag, + uriPermInfo.bundleName); + if (ret != E_NO_ERROR) { + LOGD("uriPermissionClient.GrantUriPermission by uri permission client failed!"); + return GrantInMediaLibrary(uriPermInfo, uri); + } + } + return E_NO_ERROR; +} + +void GrantUriPermissionSync(taihe::string_view uri, taihe::string_view bundleName, uintptr_t flag) +{ + LOGD("fileShare::GrantUriPermission begin!"); + if (!IsSystemApp()) { + LOGE("fileShare::GrantUriPermission is not System App!"); + taihe::set_business_error(E_PERMISSION_SYS, "fileShare::GrantUriPermission is not System App!"); + } + + std::string uri_ = std::string(uri); + OHOS::Uri inputUri(uri_); + std::string scheme = inputUri.GetScheme(); + if (scheme != FILE_SCHEME) { + return; + } + std::string authority = inputUri.GetAuthority(); + if (authority != MEDIA_AUTHORITY && authority != FILE_MANAGER_AUTHORITY) { + return; + } + + ani_env *env = taihe::get_env(); + ani_enum_item enumItem = reinterpret_cast(flag); + ani_int result; + env->EnumItem_GetValue_Int(enumItem, &result); + + UriPermissionInfo uriPermInfo; + uriPermInfo.uri = uri; + uriPermInfo.bundleName = bundleName; + uriPermInfo.flag = result; + uriPermInfo.mode = GetModeFromFlag((int32_t)result); + + int ret = DoGrantUriPermission(uriPermInfo); + if (ret < 0) { + LOGE("fileShare::GrantUriPermission DoGrantUriPermission failed with %{public}d", ret); + taihe::set_business_error(-ret, "fileShare::GrantUriPermission failed"); + } +} +} // namespace + +// NOLINTBEGIN +TH_EXPORT_CPP_API_MakePolicyInfo(ANI::FileShare::MakePolicyInfo); +TH_EXPORT_CPP_API_ActivatePermissionSync(ANI::FileShare::ActivatePermissionSync); +TH_EXPORT_CPP_API_DeactivatePermissionSync(ANI::FileShare::DeactivatePermissionSync); +TH_EXPORT_CPP_API_GrantUriPermissionSync(ANI::FileShare::GrantUriPermissionSync); + // NOLINTEND diff --git a/interfaces/kits/taihe/fileshare/src/grant_permissons.cpp b/interfaces/kits/taihe/fileshare/src/grant_permissons.cpp deleted file mode 100644 index 47477fb714b43c1ee7b34babea037e167cd65979..0000000000000000000000000000000000000000 --- a/interfaces/kits/taihe/fileshare/src/grant_permissons.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* -* Copyright (c) 2025 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 "grant_permissons.h" -#include "log.h" -#include "oh_file_share.h" -#include - -namespace ANI::FileShare { - -ohos::fileshare::PolicyInfo makePolicyInfo(taihe::string_view uri, int32_t operationMode) -{ - return {uri, operationMode}; -} - -int32_t getUriPoliciesArg(taihe::array_view policies, - std::vector &uriPolicies) -{ - uint32_t count = policies.size(); - if (count > OHOS::AppFileService::MAX_ARRAY_SIZE) { - LOGE("The length of the array is extra-long"); - return E_PARAMS; - } - for (uint32_t i = 0; i < count; i++) { - OHOS::AppFileService::UriPolicyInfo uriPolicy; - uriPolicy.uri = policies[i].uri; - uriPolicy.mode = policies[i].operationMode; - if (uriPolicy.uri == "") { - LOGE("URI is empty"); - return E_PARAMS; - } - if (uriPolicy.mode != READ_MODE && - uriPolicy.mode != (READ_MODE | WRITE_MODE)) { - LOGE("Invalid operation mode"); - return E_PARAMS; - } - uriPolicies.emplace_back(uriPolicy); - } - return E_NO_ERROR; -} - -void activatePermissionSync(taihe::array_view policies) -{ - std::vector uriPolicies; - if (getUriPoliciesArg(policies, uriPolicies)) { - LOGE("Failed to get URI policies"); - taihe::set_business_error(E_PARAMS, "Failed to get URI policies"); - return ; - } - - std::shared_ptr arg = std::make_shared(); - if (arg == nullptr) { - LOGE("PolicyErrorArgs make make_shared failed"); - taihe::set_business_error(E_UNKNOWN_ERROR, "PolicyErrorArgs make make_shared failed"); - return ; - } - - arg->errNo = OHOS::AppFileService::FilePermission::ActivatePermission(uriPolicies, arg->errorResults); - if (arg->errNo) { - LOGE("Activation failed"); - taihe::set_business_error(arg->errNo, "Activation failed"); - } -} - -void deactivatePermissionSync(taihe::array_view policies) -{ - std::vector uriPolicies; - if (getUriPoliciesArg(policies, uriPolicies)) { - LOGE("Failed to get URI policies"); - taihe::set_business_error(E_PARAMS, "Failed to get URI policies"); - return ; - } - - std::shared_ptr arg = std::make_shared(); - if (arg == nullptr) { - LOGE("PolicyErrorArgs make make_shared failed"); - taihe::set_business_error(E_UNKNOWN_ERROR, "PolicyErrorArgs make make_shared failed"); - return ; - } - - arg->errNo = OHOS::AppFileService::FilePermission::DeactivatePermission(uriPolicies, arg->errorResults); - if (arg->errNo) { - LOGE("Deactivation failed"); - taihe::set_business_error(arg->errNo, "Deactivation failed"); - return ; - } -} -} // namespace ANI::FileShare - -// NOLINTBEGIN -TH_EXPORT_CPP_API_makePolicyInfo(ANI::FileShare::makePolicyInfo); -TH_EXPORT_CPP_API_activatePermissionSync(ANI::FileShare::activatePermissionSync); -TH_EXPORT_CPP_API_deactivatePermissionSync(ANI::FileShare::deactivatePermissionSync); - // NOLINTEND diff --git a/interfaces/kits/taihe/fileuri/include/fileuri_taihe.h b/interfaces/kits/taihe/fileuri/include/fileuri_taihe.h index 07658dc5371c17b37541a87b609bc5fe1aab1712..559582c6b697a7c392bfac361ace8fa724ab5c3e 100644 --- a/interfaces/kits/taihe/fileuri/include/fileuri_taihe.h +++ b/interfaces/kits/taihe/fileuri/include/fileuri_taihe.h @@ -39,7 +39,6 @@ private: ohos::file::fileuri::FileUri makeFileUri(taihe::string_view name); std::string getUriFromPath(taihe::string_view path); - -} +} // ANI::FileUri #endif // INTERFACES_KITS_TAIHE_INCLUDE_FILEURI_TAIHE_H diff --git a/interfaces/kits/taihe/fileuri/src/fileuri_taihe.cpp b/interfaces/kits/taihe/fileuri/src/fileuri_taihe.cpp index ac9cedf5a0b7e244ac358419fca17009fc002e97..4206dde12769a84ebda304a3aad62e92e0fc66ca 100644 --- a/interfaces/kits/taihe/fileuri/src/fileuri_taihe.cpp +++ b/interfaces/kits/taihe/fileuri/src/fileuri_taihe.cpp @@ -42,7 +42,6 @@ std::string FileUriImpl::getName() return sandboxPath.substr(posLast + 1); } - ohos::file::fileuri::FileUri makeFileUri(taihe::string_view name) { return taihe::make_holder(name);