package infrastructure.ftp;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.ftplet.Authority;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.listener.ListenerFactory;
import org.apache.ftpserver.usermanager.impl.BaseUser;
import org.apache.ftpserver.usermanager.impl.ConcurrentLoginPermission;
import org.apache.ftpserver.usermanager.impl.TransferRatePermission;
import org.apache.ftpserver.usermanager.impl.WritePermission;
public class FtpServer {
public static void main(String[] args) throws Exception {
File temporaryFileToDelete = File.createTempFile("the file", "txt");
temporaryFileToDelete.delete();
File tmpDirectory = temporaryFileToDelete.getParentFile();
File temporaryFtpRoot = new File(tmpDirectory, "ftp");
FtpServer ftpServer = new FtpServer(temporaryFtpRoot);
ftpServer.runOnPort(10021);
ftpServer.addUser("sally", "secret");
ftpServer.addUser("harry", "secret");
System.out.println("ftp root: "+temporaryFtpRoot);
ftpServer.start();
}
private static File createUserHome(File temporaryFtpRoot, String sally) {
File userHome = new File(temporaryFtpRoot, sally);
userHome.mkdirs();
return userHome;
}
private final FtpServerFactory serverFactory = new FtpServerFactory();
private final InMemoryUserManager userManager = new InMemoryUserManager();
private final ListenerFactory listenerFactory = new ListenerFactory();
private File temporaryFtpRoot;
public FtpServer(File temporaryFtpRoot) {
this.temporaryFtpRoot = temporaryFtpRoot;
}
private void runOnPort(int port) {
listenerFactory.setPort(port);
}
private void addUser(String userName, String secret) throws FtpException {
File userHome = createUserHome(temporaryFtpRoot, userName);
BaseUser user = new BaseUser();
user.setName(userName);
user.setPassword(secret);
user.setMaxIdleTime(0);
user.setHomeDirectory(userHome.getAbsolutePath());
user.setEnabled(true);
List<Authority> authorities = new ArrayList<Authority>();
authorities.add(new ConcurrentLoginPermission(0, 0));
authorities.add(new WritePermission());
authorities.add(new TransferRatePermission(0, 0));
user.setAuthorities(authorities);
userManager.save(user);
}
private void start() throws FtpException {
serverFactory.addListener("default", listenerFactory.createListener());
serverFactory.setUserManager(userManager);
org.apache.ftpserver.FtpServer server = serverFactory.createServer();
server.start();
}
}