Browse Source

ssh integration wip

Martin Kunz 4 years ago
parent
commit
5a23366e5c

+ 5 - 0
pom.xml

@@ -82,6 +82,11 @@
 	</build>
 
 	<dependencies>
+		<dependency>
+			<groupId>com.hierynomus</groupId>
+			<artifactId>sshj</artifactId>
+			<version>0.27.0</version>
+		</dependency>
 		<dependency>
 			<groupId>com.eclipsesource.minimal-json</groupId>
 			<artifactId>minimal-json</artifactId>

+ 9 - 0
src/main/java/at/acdp/urweb/Params.java

@@ -15,5 +15,14 @@ public class Params {
 
     @picocli.CommandLine.Option(names = { "-rt", "--rtport" }, description = "rtde tcp port", defaultValue = "30004")
     public int rtPort;
+
+    @picocli.CommandLine.Option(names = {"--sshUsername"}, description = "ssh username", defaultValue = "root")
+    public String sshUsername;
+
+    @picocli.CommandLine.Option(names = {"--sshPassword"}, description = "ssh password", defaultValue = "easybot")
+    public String sshPassword;
+
+    @picocli.CommandLine.Option(names = {"--sshPort"}, description = "ssh port", defaultValue = "22")
+    public String sshPort;
 }
 

+ 20 - 0
src/main/java/at/acdp/urweb/web/WebServer.java

@@ -6,6 +6,8 @@ import at.acdp.urweb.URBot;
 import at.acdp.urweb.rt.GetRobotRealtimeData;
 import at.acdp.urweb.sclient.URLog;
 import com.eclipsesource.json.JsonArray;
+import net.schmizz.sshj.SSHClient;
+import net.schmizz.sshj.xfer.FileSystemFile;
 import org.slf4j.LoggerFactory;
 
 import static spark.Spark.*;
@@ -80,5 +82,23 @@ public class WebServer {
             }
             return "[{}]";
         });
+        get("/files/:path",  (req, res) -> {
+            String path=req.params("from");
+            SSHClient ssh = new SSHClient();
+            // ssh.useCompression(); // Can lead to significant speedup (needs JZlib in classpath)
+            ssh.loadKnownHosts();
+            ssh.connect(params.robotIP, params.robotPort);
+            try {
+                ssh.authPublickey(System.getProperty(params.sshUsername));
+                ssh.newSCPFileTransfer().download(path, new FileSystemFile("C:\\tmp\\"));
+
+            }catch (Exception e) {
+                logger.warn("",e);
+
+            } finally{
+                ssh.disconnect();
+            }
+            return "[{}]";
+        });
     }
 }

+ 18 - 1
src/main/resources/webroot/index.html

@@ -25,6 +25,17 @@
     <textarea v-model="input" cols="80" rows="20"></textarea>
     <button v-on:click="sendCommand">sendCommand</button>
     <button v-on:click="sendFreeDrive">sendFreeDrive</button>
+    <button v-on:click="saveWP">saveWP</button>
+
+    <table border="1">
+        <tr v-for="x in waypoints">
+            <td>{{x}}</td>
+            <td>{{x}}</td>
+            <td>{{x}}</td>
+        </tr>
+
+    </table>
+
 
     Running: {{ $data.running }}
     <table border="1">
@@ -70,7 +81,9 @@
             lastID: -1,
             doBits: [],
             cData: {},
-            cmdq: []
+            cmdq: [],
+            curPos: {},
+            waypoints: []
         },
         created: function () {
         setInterval(this.update, 210);
@@ -112,6 +125,9 @@
                         return response;
                     });
             },
+            saveWP: function (event) {
+                this.$data.waypoints.push_back(event)
+            },
             ts2txt: function (ts) {
                 return moment(ts).format('YYYY-MM-DD hh:mm ss.SSS ')
             },
@@ -137,6 +153,7 @@
                     case 'JointDataList':
                         break;
                     case 'CartesianInfo':
+                        this.$data.curPos = package.entry;
                         break;
                     case 'ForceModeData':
                         break;