diff options
| author | Simon Rettberg | 2014-04-24 18:59:35 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2014-04-24 18:59:35 +0200 |
| commit | ed787b6f67954faab790cab107503eac8e6aad3c (patch) | |
| tree | 6f05300170e670ab5db0ccda62bb918d0371b7ad /src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java | |
| parent | Fix name of format style (diff) | |
| parent | Add FTPS to MasterFtpServer (diff) | |
| download | masterserver-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.java | 141 |
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(); } } |
