2
0
mirror of https://github.com/KDE/kdeconnect-android synced 2025-08-29 13:17:43 +00:00

Publick key auth for sftp plugin

This commit is contained in:
Samoilenko Yuri 2014-01-16 09:51:32 +04:00 committed by Albert Vaca
parent 36530b9580
commit 15a11cce02
3 changed files with 31 additions and 3 deletions

View File

@ -39,7 +39,7 @@ public class Device implements BaseLink.PackageReceiver {
private String deviceId; private String deviceId;
private String name; private String name;
private PublicKey publicKey; public PublicKey publicKey;
private int notificationId; private int notificationId;
private int protocolVersion; private int protocolVersion;

View File

@ -11,6 +11,7 @@ import org.apache.sshd.server.Command;
import org.apache.sshd.server.FileSystemFactory; import org.apache.sshd.server.FileSystemFactory;
import org.apache.sshd.server.FileSystemView; import org.apache.sshd.server.FileSystemView;
import org.apache.sshd.server.PasswordAuthenticator; import org.apache.sshd.server.PasswordAuthenticator;
import org.apache.sshd.server.PublickeyAuthenticator;
import org.apache.sshd.server.SshFile; import org.apache.sshd.server.SshFile;
import org.apache.sshd.server.command.ScpCommandFactory; import org.apache.sshd.server.command.ScpCommandFactory;
import org.apache.sshd.server.filesystem.NativeFileSystemView; import org.apache.sshd.server.filesystem.NativeFileSystemView;
@ -18,13 +19,17 @@ import org.apache.sshd.server.filesystem.NativeSshFile;
import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider; import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
import org.apache.sshd.server.session.ServerSession; import org.apache.sshd.server.session.ServerSession;
import org.apache.sshd.server.sftp.SftpSubsystem; import org.apache.sshd.server.sftp.SftpSubsystem;
import org.kde.kdeconnect.Device;
import java.io.File; import java.io.File;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.NetworkInterface; import java.net.NetworkInterface;
import java.net.SocketException; import java.net.SocketException;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.List;
class SimplePasswordAuthenticator implements PasswordAuthenticator { class SimplePasswordAuthenticator implements PasswordAuthenticator {
@ -43,6 +48,26 @@ class SimplePasswordAuthenticator implements PasswordAuthenticator {
private String password; private String password;
} }
class SimplePublicKeyAuthenticator implements PublickeyAuthenticator {
private List<PublicKey> keys = new ArrayList<PublicKey>();
public void addKey(PublicKey key) {
keys.add(key);
}
@Override
public boolean authenticate(String user, PublicKey key, ServerSession session) {
for (PublicKey k : keys) {
if (key.equals(k)) {
return true;
}
}
return false;
}
}
class SimpleSftpServer { class SimpleSftpServer {
private static final int STARTPORT = 1739; private static final int STARTPORT = 1739;
private static final int ENDPORT = 1764; private static final int ENDPORT = 1764;
@ -53,11 +78,13 @@ class SimpleSftpServer {
private static boolean started = false; private static boolean started = false;
public final SimplePasswordAuthenticator passwordAuth = new SimplePasswordAuthenticator(); public final SimplePasswordAuthenticator passwordAuth = new SimplePasswordAuthenticator();
public final SimplePublicKeyAuthenticator keyAuth = new SimplePublicKeyAuthenticator();
private final SshServer sshd = SshServer.setUpDefaultServer(); private final SshServer sshd = SshServer.setUpDefaultServer();
public void init(Context ctx) { public void init(Context ctx, Device device) {
passwordAuth.setUser(USER); passwordAuth.setUser(USER);
keyAuth.addKey(device.publicKey);
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(ctx.getFilesDir() + "/sftpd.ser")); sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(ctx.getFilesDir() + "/sftpd.ser"));
//sshd.setFileSystemFactory(new NativeFileSystemFactory()); //sshd.setFileSystemFactory(new NativeFileSystemFactory());
@ -67,6 +94,7 @@ class SimpleSftpServer {
sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>>asList(new SftpSubsystem.Factory())); sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>>asList(new SftpSubsystem.Factory()));
sshd.setPasswordAuthenticator(passwordAuth); sshd.setPasswordAuthenticator(passwordAuth);
sshd.setPublickeyAuthenticator(keyAuth);
} }
public boolean start() { public boolean start() {

View File

@ -42,7 +42,7 @@ public class SftpPlugin extends Plugin {
@Override @Override
public boolean onCreate() { public boolean onCreate() {
server.init(context); server.init(context, device);
return true; return true;
} }