From 78c1f80d57d101917479a59411c9ad0d80854c1c Mon Sep 17 00:00:00 2001 From: zhangkaixiang Date: Tue, 8 Aug 2023 20:50:31 +0800 Subject: [PATCH] fixed 3b85265 from https://gitee.com/zkx48/filemanagement_app_file_service/pulls/246 grant uri for all Signed-off-by: zhangkaixiang Change-Id: If63073e29e05f9d36fa0f478cbf2613a0bb5a92f --- .../native/file_uri/src/file_uri.cpp | 10 +++++- .../js/file_share/grant_uri_permission.cpp | 36 ++++++------------- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/interfaces/innerkits/native/file_uri/src/file_uri.cpp b/interfaces/innerkits/native/file_uri/src/file_uri.cpp index b0463308b..abef75608 100644 --- a/interfaces/innerkits/native/file_uri/src/file_uri.cpp +++ b/interfaces/innerkits/native/file_uri/src/file_uri.cpp @@ -32,6 +32,7 @@ const std::string MODE_RW = "/rw/"; const std::string MODE_R = "/r/"; const std::string FILE_SCHEME_PREFIX = "file://"; const std::string FILE_MANAGER_AUTHORITY = "docs"; +const std::string MEDIA_AUTHORITY = "media"; string FileUri::GetName() { string sandboxPath = uri_.GetPath(); @@ -49,7 +50,14 @@ string FileUri::GetName() string FileUri::GetPath() { - return SandboxHelper::Decode(uri_.GetPath()); + string sandboxPath = SandboxHelper::Decode(uri_.GetPath()); + string bundleName = uri_.GetAuthority(); + if (bundleName == MEDIA_AUTHORITY && sandboxPath.find(".") != string::npos) { + size_t pos = sandboxPath.rfind("/"); + return sandboxPath.substr(0, pos); + } + + return sandboxPath; } string FileUri::GetRealPath() diff --git a/interfaces/kits/js/file_share/grant_uri_permission.cpp b/interfaces/kits/js/file_share/grant_uri_permission.cpp index 6f4d50ad6..e967e5322 100644 --- a/interfaces/kits/js/file_share/grant_uri_permission.cpp +++ b/interfaces/kits/js/file_share/grant_uri_permission.cpp @@ -44,33 +44,20 @@ namespace ModuleFileShare { string uri; }; - static bool IsAllDigits(string idStr) - { - for (size_t i = 0; i < idStr.size(); i++) { - if (!isdigit(idStr[i])) { - return false; - } - } - return true; - } - static bool IsSystemApp() { uint64_t fullTokenId = OHOS::IPCSkeleton::GetCallingFullTokenID(); return Security::AccessToken::TokenIdKit::IsSystemAppByFullTokenID(fullTokenId); } - static string GetIdFromUri(string uri) + static int32_t GetIdFromUri(string uri) { - string rowNum = ""; - size_t pos = uri.rfind('/'); - if (pos != string::npos) { - rowNum = uri.substr(pos + 1); - if (!IsAllDigits(rowNum)) { - rowNum = ""; - } - } - return rowNum; + std::replace(uri.begin(), uri.end(), '/', ' '); + stringstream ss(uri); + string tmp; + int fileId = -1; + ss >> tmp >> tmp >> tmp >> fileId; + return fileId; } static string GetModeFromFlag(unsigned int flag) @@ -146,13 +133,12 @@ namespace ModuleFileShare { static int InitValuesBucket(const UriPermissionInfo &uriPermInfo, Uri &uri, bool &isApi10, DataShareValuesBucket &valuesBucket) { - string idStr = GetIdFromUri(uriPermInfo.uri); - if (idStr == "") { + int32_t fileId = GetIdFromUri(uriPermInfo.uri); + if (fileId == -1) { LOGE("FileShare::InitValuesBucket get fileId parameter failed!"); return -EINVAL; } - int32_t fileId = stoi(idStr); int32_t filesType = GetMediaTypeAndApiFromUri(uri.GetPath(), isApi10); valuesBucket.Put(PERMISSION_FILE_ID, fileId); valuesBucket.Put(PERMISSION_BUNDLE_NAME, uriPermInfo.bundleName); @@ -189,8 +175,8 @@ namespace ModuleFileShare { int ret = uriPermissionClient.GrantUriPermission(uri, uriPermInfo.flag, uriPermInfo.bundleName, 1); if (ret != 0) { - LOGE("uriPermissionClient.GrantUriPermission failed!"); - return -EINVAL; + LOGD("uriPermissionClient.GrantUriPermission by AMS failed!"); + return GrantInMediaLibrary(uriPermInfo, uri); } } -- Gitee