From 0db1101505b9736650cb5ddc06951ba044c3dd14 Mon Sep 17 00:00:00 2001 From: TranceLove Date: Fri, 28 Oct 2022 18:25:16 +0800 Subject: [PATCH] Standalone NetCopyConnectionInfo Fixes #1347 --- .../filesystem/ftp/NetCopyConnectionInfo.kt | 3 ++ .../ui/activities/MainActivity.java | 13 +++-- .../ui/activities/MainActivityTest.java | 51 ++++++++++++++++++- 3 files changed, 61 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/amaze/filemanager/filesystem/ftp/NetCopyConnectionInfo.kt b/app/src/main/java/com/amaze/filemanager/filesystem/ftp/NetCopyConnectionInfo.kt index 708642e782..80aa0a6fc9 100644 --- a/app/src/main/java/com/amaze/filemanager/filesystem/ftp/NetCopyConnectionInfo.kt +++ b/app/src/main/java/com/amaze/filemanager/filesystem/ftp/NetCopyConnectionInfo.kt @@ -134,6 +134,9 @@ class NetCopyConnectionInfo(url: String) { } } + /** + * Returns the last segment of the URL's path element. + */ fun lastPathSegment(): String? { return if (filename != null && true == filename?.isNotEmpty()) { filename diff --git a/app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java b/app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java index 3f4c51966d..385a7b79ac 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java +++ b/app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java @@ -133,6 +133,7 @@ import com.amaze.filemanager.utils.AppConstants; import com.amaze.filemanager.utils.BookSorter; import com.amaze.filemanager.utils.DataUtils; +import com.amaze.filemanager.utils.GenericExtKt; import com.amaze.filemanager.utils.MainActivityActionMode; import com.amaze.filemanager.utils.MainActivityHelper; import com.amaze.filemanager.utils.OTGUtil; @@ -204,6 +205,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import kotlin.text.Charsets; public class MainActivity extends PermissionsActivity implements SmbConnectionListener, @@ -1995,7 +1997,9 @@ public void showSftpDialog(String name, String path, boolean edit) { retval.putString(ARG_ADDRESS, connectionInfo.getHost()); retval.putInt(ARG_PORT, connectionInfo.getPort()); if (!TextUtils.isEmpty(connectionInfo.getDefaultPath())) { - retval.putString(ARG_DEFAULT_PATH, connectionInfo.getDefaultPath()); + retval.putString( + ARG_DEFAULT_PATH, + GenericExtKt.urlDecoded(connectionInfo.getDefaultPath(), Charsets.UTF_8)); } retval.putString(ARG_USERNAME, connectionInfo.getUsername()); @@ -2043,10 +2047,9 @@ public void addConnection( if (!edit) { if ((dataUtils.containsServer(path)) == -1) { Completable.fromRunnable( - () -> { - utilsHandler.saveToDatabase( - new OperationData(UtilsHandler.Operation.SMB, name, encryptedPath)); - }) + () -> + utilsHandler.saveToDatabase( + new OperationData(UtilsHandler.Operation.SMB, name, encryptedPath))) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( diff --git a/app/src/test/java/com/amaze/filemanager/ui/activities/MainActivityTest.java b/app/src/test/java/com/amaze/filemanager/ui/activities/MainActivityTest.java index 2a3bd7b759..6277bcf312 100644 --- a/app/src/test/java/com/amaze/filemanager/ui/activities/MainActivityTest.java +++ b/app/src/test/java/com/amaze/filemanager/ui/activities/MainActivityTest.java @@ -95,7 +95,7 @@ public class MainActivityTest { private static final String[] BUNDLE_KEYS = { - "address", "port", "keypairName", "name", "username", "password", "edit" + "address", "port", "keypairName", "name", "username", "password", "edit", "defaultPath" }; private MockedConstruction mc; @@ -164,6 +164,55 @@ public void testInvokeSftpConnectionDialogWithPassword() testOpenSftpConnectDialog(uri, verify); } + @Test + public void testInvokeSftpConnectionDialogWithPasswordAndDefaultPath() + throws GeneralSecurityException, IOException { + String uri = + NetCopyClientUtils.INSTANCE.encryptFtpPathAsNecessary( + "ssh://root:12345678@127.0.0.1:22/data/incoming"); + + Bundle verify = new Bundle(); + verify.putString("address", "127.0.0.1"); + verify.putInt("port", 22); + verify.putString("name", "SCP/SFTP Connection"); + verify.putString("username", "root"); + verify.putBoolean("hasPassword", true); + verify.putBoolean("edit", true); + verify.putString("defaultPath", "/data/incoming"); + verify.putString( + "password", + PasswordUtil.INSTANCE + .encryptPassword(AppConfig.getInstance(), "12345678", Base64.URL_SAFE) + .replace("\n", "")); + + testOpenSftpConnectDialog(uri, verify); + } + + @Test + public void testInvokeSftpConnectionDialogWithPasswordAndEncodedDefaultPath() + throws GeneralSecurityException, IOException { + String uri = + NetCopyClientUtils.INSTANCE.encryptFtpPathAsNecessary( + "ssh://root:12345678@127.0.0.1:22/Users/TranceLove/My+Documents/%7BReference%7D%20Zobius%20Facro%20%24%24%20%23RFII1"); + + Bundle verify = new Bundle(); + verify.putString("address", "127.0.0.1"); + verify.putInt("port", 22); + verify.putString("name", "SCP/SFTP Connection"); + verify.putString("username", "root"); + verify.putBoolean("hasPassword", true); + verify.putBoolean("edit", true); + verify.putString( + "defaultPath", "/Users/TranceLove/My Documents/{Reference} Zobius Facro $$ #RFII1"); + verify.putString( + "password", + PasswordUtil.INSTANCE + .encryptPassword(AppConfig.getInstance(), "12345678", Base64.URL_SAFE) + .replace("\n", "")); + + testOpenSftpConnectDialog(uri, verify); + } + private void testOpenSftpConnectDialog(String uri, Bundle verify) throws GeneralSecurityException, IOException { MainActivity activity = mock(MainActivity.class);