package com.asolutions.scmsshd;
import java.util.Arrays;
import java.util.Properties;
import java.util.regex.Pattern;
import javax.naming.NamingException;
import org.apache.sshd.SshServer;
import org.apache.sshd.common.Compression;
import org.apache.sshd.common.NamedFactory;
import org.apache.sshd.common.compression.CompressionNone;
import org.apache.sshd.common.keyprovider.FileKeyPairProvider;
import org.apache.sshd.server.PasswordAuthenticator;
import org.apache.sshd.server.session.ServerSession;
import com.asolutions.scmsshd.commands.factories.CommandFactoryBase;
import com.asolutions.scmsshd.commands.factories.GitCommandFactory;
import com.asolutions.scmsshd.commands.factories.GitSCMCommandFactory;
import com.asolutions.scmsshd.converters.path.regexp.AMatchingGroupPathToProjectNameConverter;
import com.asolutions.scmsshd.sshd.AlwaysFailPublicKeyAuthenticator;
public class MainNoAuth {
public static void main(String[] args) throws Exception {
System.out.println("Starting Server");
final SshServer sshd = SshServer.setUpDefaultServer();
sshd.setPort(Integer.parseInt(args[0]));
String basedir = args[1];
setupAuthenticators(sshd);
setCommandFactory(sshd, basedir);
sshd.setPublickeyAuthenticator(new AlwaysFailPublicKeyAuthenticator());
sshd.setKeyPairProvider(new FileKeyPairProvider(new String[] { "src/main/resources/ssh_host_rsa_key", "src/main/resources/ssh_host_dsa_key" }));
sshd.setCompressionFactories(Arrays.<NamedFactory<Compression>>asList(
new CompressionNone.Factory()));
try{
sshd.start();
}
catch (Exception e){
System.out.println("Aborting:" + e);
sshd.stop();
}
catch (Throwable e){
System.out.println("tAborting:" + e);
sshd.stop();
}
}
private static void setupAuthenticators(SshServer sshd) {
sshd.setPasswordAuthenticator(new PasswordAuthenticator(){
public Object authenticate(String username, String password, ServerSession session) {
return true;
}
});
}
private static void setCommandFactory(SshServer sshd, String basedir)
throws NamingException {
CommandFactoryBase commandFactory = new GitCommandFactory();
commandFactory.setPathToProjectNameConverter(new AMatchingGroupPathToProjectNameConverter(){
@Override
public Pattern getPattern() {
return Pattern.compile("(repo\\d+)");
}});
setupAuthorizers(commandFactory);
Properties config = new Properties();
config.setProperty(GitSCMCommandFactory.REPOSITORY_BASE, basedir);
commandFactory.setConfiguration(config);
sshd.setCommandFactory(commandFactory);
}
private static void setupAuthorizers(CommandFactoryBase commandFactory)
throws NamingException {
commandFactory.setProjectAuthorizor(new com.asolutions.scmsshd.authorizors.AlwaysPassProjectAuthorizer());
}
}