Author: jbonofre
Date: Tue Nov  8 22:20:45 2011
New Revision: 1199493

URL: http://svn.apache.org/viewvc?rev=1199493&view=rev
Log:
[KARAF-987] Add scp support

Added:
    
karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
    
karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java
    
karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafSshFile.java
Modified:
    
karaf/branches/karaf-2.2.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml

Added: 
karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
URL: 
http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java?rev=1199493&view=auto
==============================================================================
--- 
karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
 (added)
+++ 
karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
 Tue Nov  8 22:20:45 2011
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.karaf.shell.ssh;
+
+import org.apache.sshd.server.FileSystemFactory;
+import org.apache.sshd.server.FileSystemView;
+
+/**
+ * SSHd file system factory to reduce the visibility to the KARAF_BASE.
+ */
+public class KarafFileSystemFactory implements FileSystemFactory {
+
+    public FileSystemView createFileSystemView(String s) {
+        return new KarafFileSystemView();
+    }
+
+}

Added: 
karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java
URL: 
http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java?rev=1199493&view=auto
==============================================================================
--- 
karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java
 (added)
+++ 
karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java
 Tue Nov  8 22:20:45 2011
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.karaf.shell.ssh;
+
+import org.apache.sshd.server.FileSystemView;
+import org.apache.sshd.server.SshFile;
+import org.apache.sshd.server.filesystem.NativeSshFile;
+
+import java.io.File;
+
+/**
+ * Karaf file system view reduced to the KARAF_BASE location
+ */
+public class KarafFileSystemView implements FileSystemView {
+
+    private String location;
+
+    public KarafFileSystemView() {
+        location = System.getProperty("karaf.base");
+    }
+
+    public SshFile getFile(String file) {
+        return getFile(location, file);
+    }
+
+    public SshFile getFile(SshFile baseDir, String file) {
+        return getFile(baseDir.getAbsolutePath(), file);
+    }
+
+    protected SshFile getFile(String dir, String file) {
+        // get actual file object
+        String physicalName = NativeSshFile.getPhysicalName("/", dir, file, 
false);
+
+        if (!physicalName.startsWith(location)) {
+            throw new IllegalArgumentException("The path is not relative to 
KARAF_BASE. For security reason, it's not allowed.");
+        }
+
+        File fileObj = new File(physicalName);
+
+        // strip the root directory and return
+        String karafFileName = physicalName.substring("/".length() - 1);
+        return new KarafSshFile(karafFileName, fileObj);
+    }
+
+}

Added: 
karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafSshFile.java
URL: 
http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafSshFile.java?rev=1199493&view=auto
==============================================================================
--- 
karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafSshFile.java
 (added)
+++ 
karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafSshFile.java
 Tue Nov  8 22:20:45 2011
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.karaf.shell.ssh;
+
+import org.apache.sshd.server.filesystem.NativeSshFile;
+
+import java.io.File;
+
+/**
+ * Karaf ssh file support.
+ */
+public class KarafSshFile extends NativeSshFile {
+
+    /**
+     * Constructor, internal do not use directly.
+     */
+    public KarafSshFile(String fileName, final File file) {
+        super(fileName, file, null);
+    }
+
+}
\ No newline at end of file

Modified: 
karaf/branches/karaf-2.2.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
URL: 
http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml?rev=1199493&r1=1199492&r2=1199493&view=diff
==============================================================================
--- 
karaf/branches/karaf-2.2.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
 (original)
+++ 
karaf/branches/karaf-2.2.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
 Tue Nov  8 22:20:45 2011
@@ -73,12 +73,19 @@
             </bean>
         </property>
         <property name="commandFactory">
-            <bean class="org.apache.karaf.shell.ssh.ShellCommandFactory">
-                <property name="commandProcessor" ref="commandProcessor"/>
+            <bean class="org.apache.sshd.server.command.ScpCommandFactory">
+                <argument>
+                    <bean 
class="org.apache.karaf.shell.ssh.ShellCommandFactory">
+                        <property name="commandProcessor" 
ref="commandProcessor"/>
+                    </bean>
+                </argument>
             </bean>
         </property>
         <property name="keyPairProvider" ref="keyPairProvider"/>
         <property name="passwordAuthenticator" ref="passwordAuthenticator"/>
+        <property name="fileSystemFactory">
+            <bean class="org.apache.karaf.shell.ssh.KarafFileSystemFactory"/>
+        </property>
     </bean>
 
     <bean id="keyPairProvider" 
class="org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider">


Reply via email to