Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorslewis2007-12-21 06:01:08 +0000
committerslewis2007-12-21 06:01:08 +0000
commitbf0dc87e50e94184233a9b6b5cd202b8399b26bc (patch)
treeb3602678581c415d9bc65afdb350c6e3e557cbc5 /providers
parentd9bf7566b5f4e84861a734745c7d1407642330de (diff)
downloadorg.eclipse.ecf-bf0dc87e50e94184233a9b6b5cd202b8399b26bc.tar.gz
org.eclipse.ecf-bf0dc87e50e94184233a9b6b5cd202b8399b26bc.tar.xz
org.eclipse.ecf-bf0dc87e50e94184233a9b6b5cd202b8399b26bc.zip
Added remote file system browser api to filetransfer API as per bug 213642. Added implementation for 'file' protocol. Also added authenticator usage for UrlConnectionFileTransfer.
Diffstat (limited to 'providers')
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/IScpFileTransfer.java3
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/Messages.java1
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpOutgoingFileTransfer.java43
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpRetrieveFileTransfer.java25
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpUtil.java29
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/messages.properties1
6 files changed, 47 insertions, 55 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/IScpFileTransfer.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/IScpFileTransfer.java
index 700359f74..7d5bbc70f 100644
--- a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/IScpFileTransfer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/IScpFileTransfer.java
@@ -13,7 +13,6 @@ package org.eclipse.ecf.internal.provider.filetransfer.scp;
import java.net.URL;
import java.util.Map;
-
import org.eclipse.ecf.core.security.IConnectContext;
import org.eclipse.ecf.core.util.Proxy;
@@ -26,6 +25,8 @@ public interface IScpFileTransfer {
public String getUsername();
+ public void setUsername(String username);
+
public Proxy getProxy();
public URL getTargetURL();
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/Messages.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/Messages.java
index 71a6e7be1..188488b1f 100644
--- a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/Messages.java
+++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/Messages.java
@@ -28,6 +28,7 @@ public class Messages extends NLS {
public static String ScpRetrieveFileTransfer_EXCEPTION_ERROR_READING_FILE;
public static String ScpRetrieveFileTransfer_EXCEPTION_SCP_PROTOCOL;
public static String ScpUtil_EXCEPTION_UNKNOWN_SCP_ERROR;
+ public static String ScpUtil_EXCEPTION_USERNAME_NOT_NULL;
public static String ScpUtil_SCP_ERROR;
static {
// initialize resource bundle
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpOutgoingFileTransfer.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpOutgoingFileTransfer.java
index e39beabfd..3cc48aaff 100644
--- a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpOutgoingFileTransfer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpOutgoingFileTransfer.java
@@ -17,16 +17,14 @@ import java.net.URL;
import java.util.Map;
import org.eclipse.ecf.core.security.IConnectContext;
import org.eclipse.ecf.core.util.Proxy;
-import org.eclipse.ecf.filetransfer.IIncomingFileTransferRequestListener;
import org.eclipse.ecf.filetransfer.SendFileTransferException;
-import org.eclipse.ecf.filetransfer.service.ISendFileTransfer;
import org.eclipse.ecf.provider.filetransfer.outgoing.AbstractOutgoingFileTransfer;
import org.eclipse.osgi.util.NLS;
/**
*
*/
-public class ScpOutgoingFileTransfer extends AbstractOutgoingFileTransfer implements ISendFileTransfer, IScpFileTransfer {
+public class ScpOutgoingFileTransfer extends AbstractOutgoingFileTransfer implements IScpFileTransfer {
private static final String SCP_COMMAND = "scp -p -t "; //$NON-NLS-1$
private static final String SCP_EXEC = "exec"; //$NON-NLS-1$
@@ -36,8 +34,6 @@ public class ScpOutgoingFileTransfer extends AbstractOutgoingFileTransfer implem
private Channel channel;
private InputStream responseStream;
- private IConnectContext connectContext;
-
private ScpUtil scpUtil;
/* (non-Javadoc)
@@ -49,7 +45,7 @@ public class ScpOutgoingFileTransfer extends AbstractOutgoingFileTransfer implem
// Set input stream from local file
setInputStream(new BufferedInputStream(new FileInputStream(localFile)));
final URL url = getRemoteFileURL();
- this.username = (url.getUserInfo() == null) ? System.getProperty("user.name") : url.getUserInfo(); //$NON-NLS-1$
+ this.username = url.getUserInfo();
scpUtil = new ScpUtil(this);
final Session s = scpUtil.getSession();
s.connect();
@@ -128,45 +124,24 @@ public class ScpOutgoingFileTransfer extends AbstractOutgoingFileTransfer implem
}
/* (non-Javadoc)
- * @see org.eclipse.ecf.filetransfer.ISendFileTransferContainerAdapter#addListener(org.eclipse.ecf.filetransfer.IIncomingFileTransferRequestListener)
- */
- public void addListener(IIncomingFileTransferRequestListener l) {
- // SCP doesn't have listener
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ecf.filetransfer.ISendFileTransferContainerAdapter#removeListener(org.eclipse.ecf.filetransfer.IIncomingFileTransferRequestListener)
- */
- public boolean removeListener(IIncomingFileTransferRequestListener l) {
- return false;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ecf.filetransfer.ISendFileTransferContainerAdapter#setConnectContextForAuthentication(org.eclipse.ecf.core.security.IConnectContext)
- */
- public void setConnectContextForAuthentication(IConnectContext connectContext) {
- this.connectContext = connectContext;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ecf.filetransfer.ISendFileTransferContainerAdapter#setProxy(org.eclipse.ecf.core.util.Proxy)
+ * @see org.eclipse.ecf.provider.filetransfer.scp.IScpFileTransfer#getUsername()
*/
- public void setProxy(Proxy proxy) {
- this.proxy = proxy;
+ public String getUsername() {
+ return username;
}
/* (non-Javadoc)
- * @see org.eclipse.ecf.provider.filetransfer.scp.IScpFileTransfer#getConnectContext()
+ * @see org.eclipse.ecf.internal.provider.filetransfer.scp.IScpFileTransfer#getConnectContext()
*/
public IConnectContext getConnectContext() {
return connectContext;
}
/* (non-Javadoc)
- * @see org.eclipse.ecf.provider.filetransfer.scp.IScpFileTransfer#getUsername()
+ * @see org.eclipse.ecf.internal.provider.filetransfer.scp.IScpFileTransfer#setUsername(java.lang.String)
*/
- public String getUsername() {
- return username;
+ public void setUsername(String username) {
+ this.username = username;
}
}
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpRetrieveFileTransfer.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpRetrieveFileTransfer.java
index 691e480ab..81d0e0e86 100644
--- a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpRetrieveFileTransfer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpRetrieveFileTransfer.java
@@ -11,12 +11,10 @@
package org.eclipse.ecf.internal.provider.filetransfer.scp;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import com.jcraft.jsch.*;
+import java.io.*;
import java.net.URL;
import java.util.Map;
-
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.ecf.core.security.IConnectContext;
import org.eclipse.ecf.core.util.Proxy;
@@ -25,10 +23,6 @@ import org.eclipse.ecf.filetransfer.IncomingFileTransferException;
import org.eclipse.ecf.provider.filetransfer.retrieve.AbstractRetrieveFileTransfer;
import org.eclipse.osgi.util.NLS;
-import com.jcraft.jsch.Channel;
-import com.jcraft.jsch.ChannelExec;
-import com.jcraft.jsch.Session;
-
/**
*
*/
@@ -43,8 +37,6 @@ public class ScpRetrieveFileTransfer extends AbstractRetrieveFileTransfer implem
OutputStream responseStream;
- private IConnectContext connectContext;
-
private ScpUtil scpUtil;
/* (non-Javadoc)
@@ -76,7 +68,7 @@ public class ScpRetrieveFileTransfer extends AbstractRetrieveFileTransfer implem
try {
// Set input stream from local file
final URL url = getRemoteFileURL();
- this.username = (url.getUserInfo() == null) ? System.getProperty("user.name") : url.getUserInfo(); //$NON-NLS-1$
+ this.username = url.getUserInfo();
scpUtil = new ScpUtil(this);
final Session s = scpUtil.getSession();
@@ -203,13 +195,6 @@ public class ScpRetrieveFileTransfer extends AbstractRetrieveFileTransfer implem
}
/* (non-Javadoc)
- * @see org.eclipse.ecf.filetransfer.IRetrieveFileTransferContainerAdapter#setConnectContextForAuthentication(org.eclipse.ecf.core.security.IConnectContext)
- */
- public void setConnectContextForAuthentication(IConnectContext connectContext) {
- this.connectContext = connectContext;
- }
-
- /* (non-Javadoc)
* @see org.eclipse.ecf.provider.filetransfer.scp.IScpFileTransfer#getConnectContext()
*/
public IConnectContext getConnectContext() {
@@ -223,6 +208,10 @@ public class ScpRetrieveFileTransfer extends AbstractRetrieveFileTransfer implem
return username;
}
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
/* (non-Javadoc)
* @see org.eclipse.ecf.provider.filetransfer.scp.IScpFileTransfer#promptPassphrase()
*/
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpUtil.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpUtil.java
index cc22e9745..54620e137 100644
--- a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpUtil.java
+++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpUtil.java
@@ -41,7 +41,7 @@ public class ScpUtil implements UserInfo, UIKeyboardInteractive {
private String keyFile = null;
private String knownHostsFile = null;
- public ScpUtil(IScpFileTransfer handler) throws JSchException {
+ public ScpUtil(IScpFileTransfer handler) throws JSchException, IOException, UnsupportedCallbackException {
this.handler = handler;
final JSch jsch = new JSch();
final URL url = handler.getTargetURL();
@@ -49,6 +49,10 @@ public class ScpUtil implements UserInfo, UIKeyboardInteractive {
if (port == -1)
port = DEFAULT_SCP_PORT;
setupOptions(jsch);
+ promptUsername();
+ String username = handler.getUsername();
+ if (username == null)
+ throw new IOException(Messages.ScpUtil_EXCEPTION_USERNAME_NOT_NULL);
session = jsch.getSession(handler.getUsername(), url.getHost(), port);
setupProxy();
session.setUserInfo(this);
@@ -58,6 +62,24 @@ public class ScpUtil implements UserInfo, UIKeyboardInteractive {
return session;
}
+ void promptUsername() throws IOException, UnsupportedCallbackException {
+ final IConnectContext connectContext = handler.getConnectContext();
+ if (connectContext != null) {
+ final CallbackHandler callbackHandler = connectContext.getCallbackHandler();
+ if (handler != null) {
+ final Callback[] callbacks = new Callback[2];
+ final NameCallback nc = new NameCallback(Messages.ScpOutgoingFileTransfer_USERNAME_PROMPT);
+ String user = handler.getUsername();
+ if (user != null)
+ nc.setName(user);
+ callbacks[0] = nc;
+ callbacks[1] = new PasswordCallback(Messages.ScpOutgoingFileTransfer_PASSWORD_PROMPT);
+ callbackHandler.handle(callbacks);
+ handler.setUsername(nc.getName());
+ }
+ }
+ }
+
String promptCredentials(boolean usePassphrase) {
try {
final IConnectContext connectContext = handler.getConnectContext();
@@ -66,13 +88,16 @@ public class ScpUtil implements UserInfo, UIKeyboardInteractive {
if (handler != null) {
final Callback[] callbacks = new Callback[2];
final NameCallback nc = new NameCallback(Messages.ScpOutgoingFileTransfer_USERNAME_PROMPT);
- nc.setName(handler.getUsername());
+ String user = handler.getUsername();
+ if (user != null)
+ nc.setName(user);
callbacks[0] = nc;
if (usePassphrase) {
callbacks[1] = new PassphraseCallback(Messages.ScpOutgoingFileTransfer_PASSPHRASE_PROMPT);
} else
callbacks[1] = new PasswordCallback(Messages.ScpOutgoingFileTransfer_PASSWORD_PROMPT);
callbackHandler.handle(callbacks);
+ handler.setUsername(nc.getName());
if (usePassphrase) {
passphrase = ((PassphraseCallback) callbacks[1]).getPassphrase();
} else
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/messages.properties b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/messages.properties
index 2c6f66b18..3daf7aad9 100644
--- a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/messages.properties
+++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/messages.properties
@@ -8,4 +8,5 @@ ScpRetrieveFileTransfer_EXCEPTION_CONNECTING=Exception connecting to {0}
ScpRetrieveFileTransfer_EXCEPTION_ERROR_READING_FILE=Error reading file length
ScpRetrieveFileTransfer_EXCEPTION_SCP_PROTOCOL=Exception in scp protocol
ScpUtil_EXCEPTION_UNKNOWN_SCP_ERROR=Unknown scp error.
+ScpUtil_EXCEPTION_USERNAME_NOT_NULL=username cannot be empty.
ScpUtil_SCP_ERROR=Error {0}

Back to the top