blob: da5676d469b0486fa0c91abf3904b394cd6265a3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jsch.internal.core;
import java.util.Hashtable;
import org.eclipse.core.net.proxy.IProxyData;
import org.eclipse.core.net.proxy.IProxyService;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Preferences;
import com.jcraft.jsch.*;
public class Utils{
public static String loadPrivateKeys(JSch jsch, String current_pkeys){
Preferences preferences=JSchCorePlugin.getPlugin().getPluginPreferences();
String ssh_home=preferences.getString(IConstants.KEY_SSH2HOME);
String pkeys=preferences.getString(IConstants.KEY_PRIVATEKEY);
if(ssh_home.length()==0)
ssh_home=PreferenceInitializer.SSH_HOME_DEFAULT;
java.io.File file;
String[] pkey=pkeys.split(","); //$NON-NLS-1$
String[] _pkey=current_pkeys.split(","); //$NON-NLS-1$
String result=""; //$NON-NLS-1$
for(int i=0; i<pkey.length; i++){
file=new java.io.File(pkey[i]);
if(!file.isAbsolute()){
file=new java.io.File(ssh_home, pkey[i]);
}
if(file.exists()){
boolean notyet=true;
for(int j=0; j<_pkey.length; j++){
if(pkey[i].equals(_pkey[j])){
notyet=false;
break;
}
}
try{
if(notyet)
jsch.addIdentity(file.getPath());
if(result.length()==0){
result=pkey[i];
}
else{
result+=(","+pkey[i]); //$NON-NLS-1$
}
}
catch(JSchException e){
JSchCorePlugin.log(IStatus.ERROR,
"An error occurred loading the SSH2 private keys", e); //$NON-NLS-1$
}
}
}
return result;
}
public static Session createSession(JSch jsch, String username,
String hostname, int port) throws JSchException{
Session session=jsch.getSession(username, hostname, port);
setProxy(session);
Hashtable config=new Hashtable();
config.put("PreferredAuthentications", //$NON-NLS-1$
"gssapi-with-mic,publickey,password,keyboard-interactive"); //$NON-NLS-1$
session.setConfig(config);
return session;
}
public static void setProxy(Session session){
Proxy proxy=getProxyForHost(session.getHost(), IProxyData.HTTPS_PROXY_TYPE);
if(proxy==null)
proxy=getProxyForHost(session.getHost(), IProxyData.SOCKS_PROXY_TYPE);
if(proxy!=null)
session.setProxy(proxy);
}
private static int getPort(IProxyData data){
int port=data.getPort();
if(port==-1){
if(data.getType().equals(IProxyData.HTTP_PROXY_TYPE))
port=80;
else if(data.getType().equals(IProxyData.HTTPS_PROXY_TYPE))
port=443;
else if(data.getType().equals(IProxyData.SOCKS_PROXY_TYPE))
port=1080;
}
return port;
}
private static IProxyData getProxyData(String host, String type){
IProxyService proxyService=JSchCorePlugin.getPlugin().getProxyService();
if(proxyService==null)
return null;
IProxyData data=proxyService.getProxyDataForHost(host, type);
if(data==null||data.getHost()==null||getJSchProxyType(data)==null)
return null;
return data;
}
private static String getJSchProxyType(IProxyData data){
if(data.getType().equals(IProxyData.HTTPS_PROXY_TYPE))
return IConstants.PROXY_TYPE_HTTP;
if(data.getType().equals(IProxyData.SOCKS_PROXY_TYPE))
return IConstants.PROXY_TYPE_SOCKS5;
return null;
}
public static Proxy getProxyForHost(String host, String proxyType){
IProxyService proxyService=JSchCorePlugin.getPlugin().getProxyService();
if(proxyService==null)
return null;
boolean useProxy=proxyService.isProxiesEnabled();
if(!useProxy)
return null;
Proxy proxy=null;
IProxyData data=getProxyData(host, proxyType);
if(data==null)
return null;
String _type=getJSchProxyType(data);
if(_type==null)
return null;
String _host=data.getHost();
int _port=getPort(data);
boolean useAuth=data.isRequiresAuthentication();
String _user=""; //$NON-NLS-1$
String _pass=""; //$NON-NLS-1$
// Retrieve username and password from keyring.
if(useAuth){
_user=data.getUserId();
_pass=data.getPassword();
}
String proxyhost=_host+":"+_port; //$NON-NLS-1$
if(_type.equals(IConstants.PROXY_TYPE_HTTP)){
proxy=new ProxyHTTP(proxyhost);
if(useAuth){
((ProxyHTTP)proxy).setUserPasswd(_user, _pass);
}
}
else if(_type.equals(IConstants.PROXY_TYPE_SOCKS5)){
proxy=new ProxySOCKS5(proxyhost);
if(useAuth){
((ProxySOCKS5)proxy).setUserPasswd(_user, _pass);
}
}
return proxy;
}
}