diff options
author | slewis | 2007-12-21 06:01:08 +0000 |
---|---|---|
committer | slewis | 2007-12-21 06:01:08 +0000 |
commit | bf0dc87e50e94184233a9b6b5cd202b8399b26bc (patch) | |
tree | b3602678581c415d9bc65afdb350c6e3e557cbc5 /providers | |
parent | d9bf7566b5f4e84861a734745c7d1407642330de (diff) | |
download | org.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')
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} |