From 56464743e47752221a075d791355be38e6cd4086 Mon Sep 17 00:00:00 2001 From: lvyuanyuan Date: Mon, 7 Aug 2023 09:30:17 +0000 Subject: [PATCH 1/2] =?UTF-8?q?FileUri=E8=8E=B7=E5=8F=96=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E9=80=82=E9=85=8D=E5=85=AC=E5=85=B1=E7=9B=AE=E5=BD=95URI?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=80=82=E9=85=8Dxts=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lvyuanyuan Change-Id: I0cb1ed59de647ede97ab8931d2ea7ebb650cb233 --- .../js/file_share/grant_uri_permission.cpp | 47 ++++++++++++++----- .../kits/js/file_share/grant_uri_permission.h | 1 + 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/interfaces/kits/js/file_share/grant_uri_permission.cpp b/interfaces/kits/js/file_share/grant_uri_permission.cpp index e1c3de4c7..10e66b04c 100644 --- a/interfaces/kits/js/file_share/grant_uri_permission.cpp +++ b/interfaces/kits/js/file_share/grant_uri_permission.cpp @@ -155,7 +155,7 @@ namespace ModuleFileShare { int32_t fileId = stoi(idStr); int32_t filesType = GetMediaTypeAndApiFromUri(uri.GetPath(), isApi10); valuesBucket.Put(PERMISSION_FILE_ID, fileId); - valuesBucket.Put(PERMISSION_BUNDLE_NAME, uri.GetAuthority()); + valuesBucket.Put(PERMISSION_BUNDLE_NAME, uriPermInfo.bundleName); valuesBucket.Put(PERMISSION_MODE, uriPermInfo.mode); valuesBucket.Put(PERMISSION_TABLE_TYPE, filesType); return 0; @@ -184,18 +184,35 @@ namespace ModuleFileShare { string scheme = uri.GetScheme(); string path = uri.GetPath(); - if (scheme == FILE_SCHEME) { - if (authority == MEDIA_AUTHORITY && path.find(".") == string::npos) { - return GrantInMediaLibrary(uriPermInfo, uri); - } else { - auto& uriPermissionClient = AAFwk::UriPermissionManagerClient::GetInstance(); - return uriPermissionClient.GrantUriPermission(uri, uriPermInfo.flag, - uriPermInfo.bundleName, 1); - } + if (authority == MEDIA_AUTHORITY && path.find(".") == string::npos) { + return GrantInMediaLibrary(uriPermInfo, uri); } else { - LOGE("FileShare::GetJSArgs get uri parameter failed!"); - return -EINVAL; + auto& uriPermissionClient = AAFwk::UriPermissionManagerClient::GetInstance(); + int ret = uriPermissionClient.GrantUriPermission(uri, uriPermInfo.flag, + uriPermInfo.bundleName, 1); + if (ret != 0) { + LOGE("uriPermissionClient.GrantUriPermission failed!"); + return -EINVAL; + } } + + return 0; + } + + static bool IsCorrectUri(const string &inputUri) + { + Uri uri(inputUri); + string scheme = uri.GetScheme(); + if (scheme != FILE_SCHEME) { + return false; + } + + string authority = uri.GetAuthority(); + if (authority != MEDIA_AUTHORITY && authority != FILE_MANAGER_AUTHORITY) { + return false; + } + + return true; } static bool GetJSArgs(napi_env env, const NFuncArg &funcArg, UriPermissionInfo &uriPermInfo) @@ -206,7 +223,15 @@ namespace ModuleFileShare { NError(EINVAL).ThrowErr(env); return false; } + uriPermInfo.uri = string(uri.get()); + if (!IsCorrectUri(uriPermInfo.uri)) { + LOGE("FileShare::GetJSArgs uri = %{private}s parameter format error!", uriPermInfo.uri.c_str()); + NError(EINVAL).ThrowErr(env); + return false; + } + + LOGD("FileShare::GetJSArgs uri = %{private}s", uriPermInfo.uri.c_str()); auto [succBundleName, bundleName, lenBundleName] = NVal(env, funcArg[NARG_POS::SECOND]).ToUTF8String(); if (!succBundleName) { diff --git a/interfaces/kits/js/file_share/grant_uri_permission.h b/interfaces/kits/js/file_share/grant_uri_permission.h index e722e292a..30711a796 100644 --- a/interfaces/kits/js/file_share/grant_uri_permission.h +++ b/interfaces/kits/js/file_share/grant_uri_permission.h @@ -37,6 +37,7 @@ const string PERMISSION_MODE = "mode"; const string MEDIA_AUTHORITY = "media"; const string FILE_SCHEME = "file"; const string PERMISSION_TABLE_TYPE = "table_type"; +const string FILE_MANAGER_AUTHORITY = "docs"; const string MEDIA_FILE_URI_PHOTO_PREFEX = "file://media/Photo/"; const string MEDIA_FILE_URI_AUDIO_PREFEX = "file://media/Audio/"; const string MEDIA_FILE_URI_VIDEO_PREFEX = "file://media/video/"; -- Gitee From c470a4a1c99ac360769e0d0c40dc8e893dd778b6 Mon Sep 17 00:00:00 2001 From: lvyuanyuan Date: Mon, 7 Aug 2023 09:37:53 +0000 Subject: [PATCH 2/2] =?UTF-8?q?FileUri=E8=8E=B7=E5=8F=96=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E9=80=82=E9=85=8D=E5=85=AC=E5=85=B1=E7=9B=AE=E5=BD=95URI?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=80=82=E9=85=8Dxts=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lvyuanyuan Change-Id: I96c5d3a40e9d5a7913c9c300bed7f404d6045d91 --- interfaces/kits/js/file_share/grant_uri_permission.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/interfaces/kits/js/file_share/grant_uri_permission.cpp b/interfaces/kits/js/file_share/grant_uri_permission.cpp index 10e66b04c..6f4d50ad6 100644 --- a/interfaces/kits/js/file_share/grant_uri_permission.cpp +++ b/interfaces/kits/js/file_share/grant_uri_permission.cpp @@ -181,15 +181,13 @@ namespace ModuleFileShare { { Uri uri(uriPermInfo.uri); string authority = uri.GetAuthority(); - string scheme = uri.GetScheme(); string path = uri.GetPath(); - if (authority == MEDIA_AUTHORITY && path.find(".") == string::npos) { return GrantInMediaLibrary(uriPermInfo, uri); } else { auto& uriPermissionClient = AAFwk::UriPermissionManagerClient::GetInstance(); int ret = uriPermissionClient.GrantUriPermission(uri, uriPermInfo.flag, - uriPermInfo.bundleName, 1); + uriPermInfo.bundleName, 1); if (ret != 0) { LOGE("uriPermissionClient.GrantUriPermission failed!"); return -EINVAL; @@ -199,7 +197,7 @@ namespace ModuleFileShare { return 0; } - static bool IsCorrectUri(const string &inputUri) + static bool CheckValidPublicUri(const string &inputUri) { Uri uri(inputUri); string scheme = uri.GetScheme(); @@ -225,7 +223,7 @@ namespace ModuleFileShare { } uriPermInfo.uri = string(uri.get()); - if (!IsCorrectUri(uriPermInfo.uri)) { + if (!CheckValidPublicUri(uriPermInfo.uri)) { LOGE("FileShare::GetJSArgs uri = %{private}s parameter format error!", uriPermInfo.uri.c_str()); NError(EINVAL).ThrowErr(env); return false; -- Gitee