Compare commits
8 Commits
master
...
ssh_agent_
Author | SHA1 | Date | |
---|---|---|---|
b8fd687ec2 | |||
80cc767c25 | |||
21a7b6e870 | |||
212996521a | |||
b004320ffe | |||
da0eceacea | |||
2f7761bac7 | |||
a84a307eb5 |
@ -6,7 +6,6 @@
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar" enabled="true" runInBatchMode="false"/>
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar" enabled="true" runInBatchMode="false"/>
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar" enabled="true" runInBatchMode="false"/>
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/com/jcraft/jsch/0.1.55/jsch-0.1.55.jar" enabled="true" runInBatchMode="false"/>
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/org/jodd/jodd-util/6.0.0/jodd-util-6.0.0.jar" enabled="true" runInBatchMode="false"/>
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/android/android/4.1.1.4/android-4.1.1.4.jar" enabled="true" runInBatchMode="false"/>
|
||||
|
@ -12,5 +12,10 @@
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar" enabled="true" runInBatchMode="false"/>
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar" enabled="true" runInBatchMode="false"/>
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/net/kothar/xdg-java/0.1.1/xdg-java-0.1.1.jar" enabled="true" runInBatchMode="false"/>
|
||||
<<<<<<< HEAD
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/com/jcraft/jsch.agentproxy.jsch/0.0.9/jsch.agentproxy.jsch-0.0.9.jar" enabled="true" runInBatchMode="false"/>
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/com/jcraft/jsch.agentproxy.core/0.0.9/jsch.agentproxy.core-0.0.9.jar" enabled="true" runInBatchMode="false"/>
|
||||
=======
|
||||
>>>>>>> master
|
||||
<factorypathentry kind="VARJAR" id="M2_REPO/org/projectlombok/lombok/1.18.16/lombok-1.18.16.jar" enabled="true" runInBatchMode="false"/>
|
||||
</factorypath>
|
||||
|
@ -16,17 +16,44 @@
|
||||
<groupId>net.monarchpass</groupId>
|
||||
<artifactId>libpiecannon</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.github.mwiede</groupId>
|
||||
<artifactId>jsch</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jcraft</groupId>
|
||||
<artifactId>jsch</artifactId>
|
||||
<version>0.1.55</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>30.0-jre</version>
|
||||
</dependency>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.kothar</groupId>
|
||||
<artifactId>xdg-java</artifactId>
|
||||
<version>0.1.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jcraft</groupId>
|
||||
<artifactId>jsch.agentproxy.jsch</artifactId>
|
||||
<version>0.0.9</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.jcraft</groupId>
|
||||
<artifactId>jsch</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jcraft</groupId>
|
||||
<artifactId>jsch.agentproxy.connector-factory</artifactId>
|
||||
<version>0.0.9</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
|
@ -9,11 +9,21 @@ import org.freedesktop.BaseDirectory;
|
||||
import lombok.extern.java.Log;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import net.monarchpass.piecannon.util.ServerFactory;
|
||||
|
||||
import com.jcraft.jsch.IdentityRepository;
|
||||
import com.jcraft.jsch.agentproxy.Connector;
|
||||
import com.jcraft.jsch.agentproxy.AgentProxyException;
|
||||
import com.jcraft.jsch.agentproxy.RemoteIdentityRepository;
|
||||
import com.jcraft.jsch.agentproxy.ConnectorFactory;
|
||||
|
||||
@Log
|
||||
public class App {
|
||||
public static void main (final String... args) throws Exception {
|
||||
final File serversJson = getServersJson();
|
||||
final PieCannon cannon = new PieCannon();
|
||||
cannon.getServerFactory().setIdentityRepository(createIdentityRepository());
|
||||
|
||||
final List<Server> servers = cannon.loadServersFrom(serversJson);
|
||||
log.log(Level.INFO, "{0} servers loaded from {1}", new Object[] {
|
||||
servers.size(), serversJson
|
||||
@ -72,4 +82,20 @@ public class App {
|
||||
public static File getDataDirectory () {
|
||||
return new File(BaseDirectory.get(BaseDirectory.XDG_DATA_HOME), "piecannon");
|
||||
}
|
||||
|
||||
private static IdentityRepository createIdentityRepository () {
|
||||
try {
|
||||
final ConnectorFactory connectorFactory = ConnectorFactory.getDefault();
|
||||
final Connector connector = connectorFactory.createConnector();
|
||||
|
||||
if (connector != null) {
|
||||
return new RemoteIdentityRepository(connector);
|
||||
}
|
||||
}
|
||||
catch (final AgentProxyException exception) {
|
||||
log.log(Level.WARNING, "Failed to create agent identity repository", exception);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -22,8 +22,12 @@ import com.google.gson.JsonParser;
|
||||
|
||||
import net.monarchpass.piecannon.util.ServerFactory;
|
||||
|
||||
import lombok.Setter;
|
||||
import lombok.Getter;
|
||||
|
||||
public class PieCannon {
|
||||
public List<Server> servers;
|
||||
public @Getter @Setter ServerFactory serverFactory = new ServerFactory();
|
||||
|
||||
public List<Server> loadServersFrom (final File serversJson) throws IOException {
|
||||
try (final InputStream in = new FileInputStream(serversJson)) {
|
||||
@ -32,7 +36,6 @@ public class PieCannon {
|
||||
}
|
||||
|
||||
public List<Server> loadServersFrom (final InputStream in) throws IOException {
|
||||
final ServerFactory factory = new ServerFactory();
|
||||
final JsonParser parser = new JsonParser();
|
||||
final List<Server> loadedServers = new ArrayList<>();
|
||||
for (final JsonElement element : parser.parse(new InputStreamReader(in)).getAsJsonArray()) {
|
||||
@ -40,7 +43,7 @@ public class PieCannon {
|
||||
continue;
|
||||
}
|
||||
|
||||
loadedServers.add(factory.apply((JsonObject)element));
|
||||
loadedServers.add(serverFactory.apply((JsonObject)element));
|
||||
}
|
||||
servers = loadedServers;
|
||||
return loadedServers;
|
||||
|
@ -13,6 +13,7 @@ import com.jcraft.jsch.Channel;
|
||||
import com.jcraft.jsch.ChannelSftp;
|
||||
import com.jcraft.jsch.JSchException;
|
||||
import com.jcraft.jsch.SftpException;
|
||||
import com.jcraft.jsch.IdentityRepository;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@ -25,12 +26,17 @@ public class SftpServer implements Server {
|
||||
private final String password;
|
||||
private final String path;
|
||||
private final URI uri;
|
||||
private final IdentityRepository identityRepository;
|
||||
|
||||
public URI upload (String name, ByteSource source) {
|
||||
try {
|
||||
final URI target = URI.create(uri.toString() + "/" + name.replace(" ", "%20"));
|
||||
|
||||
final JSch jsch = new JSch();
|
||||
if (identityRepository != null) {
|
||||
jsch.setIdentityRepository(identityRepository);
|
||||
}
|
||||
|
||||
final Session session = jsch.getSession(username, host, port);
|
||||
session.setPassword(password);
|
||||
session.setConfig("StrictHostKeyChecking", "no");
|
||||
|
@ -5,6 +5,7 @@ import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.jcraft.jsch.IdentityRepository;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
|
||||
import net.monarchpass.piecannon.Server;
|
||||
@ -13,7 +14,11 @@ import net.monarchpass.piecannon.impl.GoFileServer;
|
||||
import net.monarchpass.piecannon.impl.SftpServer;
|
||||
import net.monarchpass.piecannon.impl.WebDavServer;
|
||||
|
||||
import lombok.Setter;
|
||||
|
||||
public class ServerFactory implements Function<JsonObject, Server> {
|
||||
private @Setter IdentityRepository identityRepository;
|
||||
|
||||
public Server apply (final JsonObject object) {
|
||||
final String type = Optional.ofNullable(object.getAsJsonPrimitive("type"))
|
||||
.map(JsonPrimitive::getAsString)
|
||||
@ -54,13 +59,13 @@ public class ServerFactory implements Function<JsonObject, Server> {
|
||||
final String label = object.has("label") ? object.getAsJsonPrimitive("label").getAsString() : host;
|
||||
final int port = object.has("port") ? object.getAsJsonPrimitive("port").getAsInt() : 22;
|
||||
final String username = object.getAsJsonPrimitive("username").getAsString();
|
||||
final String password = object.getAsJsonPrimitive("password").getAsString();
|
||||
final String password = object.has("password") ? object.getAsJsonPrimitive("password").getAsString() : null;
|
||||
final String path = object.getAsJsonPrimitive("path").getAsString();
|
||||
final String url = object.getAsJsonPrimitive("url").getAsString();
|
||||
|
||||
return new SftpServer(
|
||||
label, host, port, username, password,
|
||||
path, URI.create(url)
|
||||
path, URI.create(url), identityRepository
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ public class SftpTest {
|
||||
final Server server = new SftpServer(
|
||||
"Test Server Instance", testServerHost, 22,
|
||||
testServerUser, testServerPassword, testServerPath,
|
||||
URI.create(testServerURL)
|
||||
URI.create(testServerURL), null
|
||||
);
|
||||
|
||||
assertThat(PieCannon.testServer(server)).isTrue();
|
||||
|
Loading…
x
Reference in New Issue
Block a user