diff --git a/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java b/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java index 878a4ab1..7d86a17c 100644 --- a/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java @@ -8,7 +8,6 @@ package org.kde.kdeconnect.Plugins.SftpPlugin; import android.app.Activity; import android.content.ContentResolver; -import android.content.Context; import android.content.SharedPreferences; import android.net.Uri; import android.os.Build; @@ -16,10 +15,8 @@ import android.os.Environment; import android.os.storage.StorageManager; import android.os.storage.StorageVolume; import android.provider.Settings; -import android.util.Log; import androidx.annotation.NonNull; -import androidx.annotation.RequiresApi; import org.json.JSONException; import org.json.JSONObject; @@ -34,7 +31,7 @@ import org.kde.kdeconnect.UserInterface.StartActivityAlertDialogFragment; import org.kde.kdeconnect_tp.BuildConfig; import org.kde.kdeconnect_tp.R; -import java.io.File; +import java.security.GeneralSecurityException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -63,13 +60,7 @@ public class SftpPlugin extends Plugin implements SharedPreferences.OnSharedPref @Override public boolean onCreate() { - try { - server.init(context, device); - return true; - } catch (Exception e) { - Log.e("SFTP", "Exception in server.init()", e); - return false; - } + return true; } @Override @@ -117,6 +108,14 @@ public class SftpPlugin extends Plugin implements SharedPreferences.OnSharedPref @Override public boolean onPacketReceived(NetworkPacket np) { if (np.getBoolean("startBrowsing")) { + if (!server.isInitialized()) { + try { + server.initialize(context, device); + } catch (GeneralSecurityException e) { + throw new RuntimeException(e); + } + } + ArrayList paths = new ArrayList<>(); ArrayList pathNames = new ArrayList<>(); diff --git a/src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.java b/src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.java index de60bf78..eb0a8da3 100644 --- a/src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.java +++ b/src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.java @@ -58,6 +58,8 @@ class SimpleSftpServer { SecurityUtils.setRegisterBouncyCastle(false); } + boolean initialized = false; + private final SshServer sshd = SshServer.setUpDefaultServer(); private AndroidFileSystemFactory safFileSystemFactory; @@ -65,7 +67,7 @@ class SimpleSftpServer { safFileSystemFactory.initRoots(storageInfoList); } - void init(Context context, Device device) throws GeneralSecurityException { + void initialize(Context context, Device device) throws GeneralSecurityException { sshd.setKeyExchangeFactories(Arrays.asList( new ECDHP384.Factory(), // This is the best we have in mina-sshd 0.14.0 -- Upgrading is non-trivial @@ -97,6 +99,8 @@ class SimpleSftpServer { sshd.setPublickeyAuthenticator(keyAuth); sshd.setPasswordAuthenticator(passwordAuth); + + initialized = true; } public boolean start() { @@ -177,6 +181,10 @@ class SimpleSftpServer { return ip6; } + public boolean isInitialized() { + return initialized; + } + static class SimplePasswordAuthenticator implements PasswordAuthenticator { String password;