summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java
diff options
context:
space:
mode:
authorSimon Rettberg2014-04-24 18:59:35 +0200
committerSimon Rettberg2014-04-24 18:59:35 +0200
commited787b6f67954faab790cab107503eac8e6aad3c (patch)
tree6f05300170e670ab5db0ccda62bb918d0371b7ad /src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java
parentFix name of format style (diff)
parentAdd FTPS to MasterFtpServer (diff)
downloadmasterserver-ed787b6f67954faab790cab107503eac8e6aad3c.tar.gz
masterserver-ed787b6f67954faab790cab107503eac8e6aad3c.tar.xz
masterserver-ed787b6f67954faab790cab107503eac8e6aad3c.zip
Merge branch 'master' of dnbd3:bwlp/masterserver
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java141
1 files changed, 79 insertions, 62 deletions
diff --git a/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java b/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java
index d1ec14f..de0d758 100644
--- a/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java
+++ b/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java
@@ -13,6 +13,7 @@ import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.Ftplet;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.listener.ListenerFactory;
+import org.apache.ftpserver.ssl.SslConfigurationFactory;
import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
import org.apache.ftpserver.usermanager.SaltedPasswordEncryptor;
import org.apache.ftpserver.usermanager.impl.BaseUser;
@@ -22,7 +23,8 @@ import org.openslx.imagemaster.Globals;
import org.openslx.imagemaster.thrift.iface.FtpCredentials;
import org.openslx.imagemaster.util.RandomString;
-public class MasterFtpServer implements Runnable {
+public class MasterFtpServer implements Runnable
+{
private static Logger log = Logger.getLogger( MasterFtpServer.class );
private FtpServer server;
private UserManager userManager;
@@ -30,96 +32,111 @@ public class MasterFtpServer implements Runnable {
public final HashMap<String, FtpCredentials> users = new HashMap<>();
// key: ftpUsername, value: createTime
public final HashMap<String, Date> timeouts = new HashMap<>();
-
- public MasterFtpServer(int port, String adminUsername, String adminPassword, String ftproot) {
+ private boolean ini = false;
+
+ public void init( int port )
+ {
+ if ( ini )
+ return;
+
FtpServerFactory serverFactory = new FtpServerFactory();
ListenerFactory factory = new ListenerFactory();
+
+ // config ssl
+ SslConfigurationFactory sslConfigFactory = new SslConfigurationFactory();
+ sslConfigFactory.setKeystoreFile( new File( "./keyfiles/ftp.jks" ) );
+ sslConfigFactory.setKeyAlias( "ftp" );
+ sslConfigFactory.setKeystorePassword( "password" );
+
// set the port of the listener
- factory.setPort(port);
-
+ factory.setPort( port );
+ factory.setSslConfiguration( sslConfigFactory.createSslConfiguration() );
+ factory.setImplicitSsl( true );
+
// replace the default listener
- serverFactory.addListener("default", factory.createListener());
-
+ serverFactory.addListener( "default", factory.createListener() );
+
// create user manager
- PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
- userManagerFactory.setFile(new File("src/main/properties/ftp.properties"));
- userManagerFactory.setPasswordEncryptor(new SaltedPasswordEncryptor());
- userManager = userManagerFactory.createUserManager();
-
- // create new admin user
- //addUser(adminUsername, adminPassword, ftproot, true);
- serverFactory.setUserManager(userManager);
-
+ PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
+ userManagerFactory.setFile( new File( "src/main/properties/ftp.properties" ) );
+ userManagerFactory.setPasswordEncryptor( new SaltedPasswordEncryptor() );
+ userManager = userManagerFactory.createUserManager();
+ serverFactory.setUserManager( userManager );
+
// add the Ftplet
HashMap<String, Ftplet> map = new HashMap<String, Ftplet>();
- map.put("Ftplet1", new MasterFtplet());
- serverFactory.setFtplets(map);
-
+ map.put( "Ftplet1", new MasterFtplet() );
+ serverFactory.setFtplets( map );
+
// start the server
server = serverFactory.createServer();
+ ini = true;
}
- public FtpCredentials addUser(final String serverSessionId) {
- // TODO: enable SSL
-
+ public FtpCredentials addUser( final String serverSessionId )
+ {
FtpCredentials ftpCredentials = null;
-
- String generatedUser = RandomString.generate(10, false);
- String generatedPass = RandomString.generate(16, true);
-
- String dir = Globals.properties.getProperty(Globals.ftpBaseDir) + "/"
+
+ String generatedUser = RandomString.generate( 10, false );
+ String generatedPass = RandomString.generate( 16, true );
+
+ String dir = Globals.getPropertyString( Globals.PropString.FTPBASEDIR ) + "/"
+ generatedUser + "/";
-
- if (!new File(dir).mkdir()) {
+
+ if ( !new File( dir ).mkdir() ) {
return ftpCredentials;
}
- BaseUser user = new BaseUser();
- user.setName(generatedUser);
- user.setPassword(generatedPass);
- user.setHomeDirectory(dir);
-
- List<Authority> authorities = new ArrayList<Authority>();
- authorities.add(new WritePermission());
- user.setAuthorities(authorities);
-
- try {
- userManager.save(user);
- ftpCredentials = new FtpCredentials(generatedUser, generatedPass);
- users.put(serverSessionId, ftpCredentials);
- timeouts.put(ftpCredentials.username, new Date());
- } catch (FtpException e) {
- }
-
- log.info("Generated user/pass: " + generatedUser + "\t"
- + generatedPass + "\n with home dir: " + dir);
-
- return ftpCredentials;
+ BaseUser user = new BaseUser();
+ user.setName( generatedUser );
+ user.setPassword( generatedPass );
+ user.setHomeDirectory( dir );
+
+ List<Authority> authorities = new ArrayList<Authority>();
+ authorities.add( new WritePermission() );
+ user.setAuthorities( authorities );
+
+ try {
+ userManager.save( user );
+ ftpCredentials = new FtpCredentials( generatedUser, generatedPass );
+ users.put( serverSessionId, ftpCredentials );
+ timeouts.put( ftpCredentials.username, new Date() );
+ } catch ( FtpException e ) {
+ }
+
+ log.info( "Generated user/pass: " + generatedUser + "\t"
+ + generatedPass + "\n with home dir: " + dir );
+
+ return ftpCredentials;
}
-
- public boolean removeUser(final String serverSessionId) {
- if (!users.containsKey(serverSessionId)) return false;
-
+
+ public boolean removeUser( final String serverSessionId )
+ {
+ if ( !users.containsKey( serverSessionId ) )
+ return false;
+
try {
- userManager.delete(users.get(serverSessionId).username);
+ userManager.delete( users.get( serverSessionId ).username );
// remove user from both maps
- timeouts.remove(users.remove(serverSessionId).username);
+ timeouts.remove( users.remove( serverSessionId ).username );
return true;
- } catch (FtpException e) {
+ } catch ( FtpException e ) {
return false;
}
}
-
- public FtpCredentials getCredentialsFromSessionId(String serverSessionId) {
- return users.get(serverSessionId);
+
+ public FtpCredentials getCredentialsFromSessionId( String serverSessionId )
+ {
+ return users.get( serverSessionId );
}
@Override
- public void run() {
+ public void run()
+ {
try {
log.info( "Starting FTP Sever" );
server.start();
- } catch (FtpException e1) {
+ } catch ( FtpException e1 ) {
e1.printStackTrace();
}
}