diff options
author | Nils Schwabe | 2014-04-25 14:28:56 +0200 |
---|---|---|
committer | Nils Schwabe | 2014-04-25 14:28:56 +0200 |
commit | 40d528627efc309681496b47d66558e15eb3fe5e (patch) | |
tree | 4cb7ba77b4b55ecb0b29a734c782b68d6926d441 /src/main/java/org/openslx/imagemaster/server | |
parent | Add FTPS to MasterFtpServer (diff) | |
download | masterserver-40d528627efc309681496b47d66558e15eb3fe5e.tar.gz masterserver-40d528627efc309681496b47d66558e15eb3fe5e.tar.xz masterserver-40d528627efc309681496b47d66558e15eb3fe5e.zip |
Finally: Add _real_ server authentication. (this challengeresponse thing)
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/server')
4 files changed, 3 insertions, 272 deletions
diff --git a/src/main/java/org/openslx/imagemaster/server/ApiServer.java b/src/main/java/org/openslx/imagemaster/server/ApiServer.java index c88bd05..7479fd3 100644 --- a/src/main/java/org/openslx/imagemaster/server/ApiServer.java +++ b/src/main/java/org/openslx/imagemaster/server/ApiServer.java @@ -1,13 +1,14 @@ package org.openslx.imagemaster.server; import java.io.File; +import java.nio.ByteBuffer; import org.apache.log4j.Logger; import org.apache.thrift.TException; import org.openslx.imagemaster.App; import org.openslx.imagemaster.Globals; import org.openslx.imagemaster.db.DbSatellite; -import org.openslx.imagemaster.db.ImageProcessor; +import org.openslx.imagemaster.ftp.ImageProcessor; import org.openslx.imagemaster.serversession.ServerAuthenticator; import org.openslx.imagemaster.serversession.ServerSession; import org.openslx.imagemaster.serversession.ServerSessionManager; @@ -146,7 +147,7 @@ public class ApiServer * @throws TException */ public static ServerSessionData serverAuthenticate( String organization, - String challengeResponse ) throws AuthenticationException, + ByteBuffer challengeResponse ) throws AuthenticationException, TException { if ( organization == null || challengeResponse == null ) { diff --git a/src/main/java/org/openslx/imagemaster/server/FtpCredentialsScheduler.java b/src/main/java/org/openslx/imagemaster/server/FtpCredentialsScheduler.java deleted file mode 100644 index ba88f33..0000000 --- a/src/main/java/org/openslx/imagemaster/server/FtpCredentialsScheduler.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.openslx.imagemaster.server; - -import java.io.File; -import java.util.Date; -import java.util.Map; -import java.util.Timer; -import java.util.TimerTask; - -import org.apache.log4j.Logger; -import org.openslx.imagemaster.App; -import org.openslx.imagemaster.Globals; -import org.openslx.imagemaster.thrift.iface.FtpCredentials; -import org.openslx.imagemaster.util.Util; - -public class FtpCredentialsScheduler extends TimerTask -{ - private static Logger log = Logger.getLogger( FtpCredentialsScheduler.class ); - - public static final long timeout = Long.valueOf( Globals.getPropertyInt( Globals.PropInt.FTPTIMEOUT ) ) * 60L * 1000L; // timeout in ms - - @Override - public void run() - { - // check all folders - for ( Map.Entry<String, FtpCredentials> entry : App.ftpServer.users.entrySet() ) { - String sessionId = entry.getKey(); - String username = entry.getValue().username; - File dir = new File( Globals.getPropertyString( Globals.PropString.FTPBASEDIR ) + "/" + username ); - if ( !dir.exists() ) - continue; - File[] list = dir.listFiles(); - if ( list.length == 1 ) { - if ( ( new Date().getTime() - list[0].lastModified() ) >= timeout ) { - log.info( username + "'s files are too old. Deleting him and his folder." ); - Util.deleteFolder( dir ); - App.ftpServer.removeUser( sessionId ); - } - } else if ( list.length > 1 ) { - log.info( username + " uploaded too many files. Deleting his account and his folder." ); - Util.deleteFolder( dir ); - App.ftpServer.removeUser( sessionId ); - } else { - // check the creation time of the user - if ( ( new Date().getTime() - App.ftpServer.timeouts.get( username ).getTime() ) >= timeout ) { - // remove user and his folder - Util.deleteFolder( dir ); - App.ftpServer.removeUser( sessionId ); - log.info( username + " did nothing for too long. Deleting him and his folder" ); - } - } - } - //TODO: remove image from process list - } - - public static void startScheduling() - { - Timer timer = new Timer(); - - // start timer now and fire every 60 seconds - timer.schedule( new FtpCredentialsScheduler(), 0, 60000 ); - } - -} diff --git a/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java b/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java deleted file mode 100644 index de0d758..0000000 --- a/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java +++ /dev/null @@ -1,143 +0,0 @@ -package org.openslx.imagemaster.server; - -import java.io.File; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; - -import org.apache.ftpserver.FtpServer; -import org.apache.ftpserver.FtpServerFactory; -import org.apache.ftpserver.ftplet.Authority; -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; -import org.apache.ftpserver.usermanager.impl.WritePermission; -import org.apache.log4j.Logger; -import org.openslx.imagemaster.Globals; -import org.openslx.imagemaster.thrift.iface.FtpCredentials; -import org.openslx.imagemaster.util.RandomString; - -public class MasterFtpServer implements Runnable -{ - private static Logger log = Logger.getLogger( MasterFtpServer.class ); - private FtpServer server; - private UserManager userManager; - // key: serverSessionId, value: FtpCredentials - public final HashMap<String, FtpCredentials> users = new HashMap<>(); - // key: ftpUsername, value: createTime - public final HashMap<String, Date> timeouts = new HashMap<>(); - 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.setSslConfiguration( sslConfigFactory.createSslConfiguration() ); - factory.setImplicitSsl( true ); - - // replace the default listener - 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(); - serverFactory.setUserManager( userManager ); - - // add the Ftplet - HashMap<String, Ftplet> map = new HashMap<String, Ftplet>(); - map.put( "Ftplet1", new MasterFtplet() ); - serverFactory.setFtplets( map ); - - // start the server - server = serverFactory.createServer(); - ini = true; - } - - public FtpCredentials addUser( final String serverSessionId ) - { - FtpCredentials ftpCredentials = null; - - 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() ) { - 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; - - try { - userManager.delete( users.get( serverSessionId ).username ); - // remove user from both maps - timeouts.remove( users.remove( serverSessionId ).username ); - return true; - } catch ( FtpException e ) { - return false; - } - } - - public FtpCredentials getCredentialsFromSessionId( String serverSessionId ) - { - return users.get( serverSessionId ); - } - - @Override - public void run() - { - try { - log.info( "Starting FTP Sever" ); - server.start(); - } catch ( FtpException e1 ) { - e1.printStackTrace(); - } - } -} diff --git a/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java b/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java deleted file mode 100644 index a8c1cbe..0000000 --- a/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.openslx.imagemaster.server; - -import java.io.IOException; - -import org.apache.ftpserver.ftplet.FtpException; -import org.apache.ftpserver.ftplet.FtpReply; -import org.apache.ftpserver.ftplet.FtpRequest; -import org.apache.ftpserver.ftplet.FtpSession; -import org.apache.ftpserver.ftplet.Ftplet; -import org.apache.ftpserver.ftplet.FtpletContext; -import org.apache.ftpserver.ftplet.FtpletResult; -import org.apache.log4j.Logger; - -public class MasterFtplet implements Ftplet -{ - private static Logger log = Logger.getLogger( Ftplet.class ); - - @Override - public void init( FtpletContext ftpletContext ) throws FtpException - { - // not used - } - - @Override - public void destroy() - { - // not used - } - - @Override - public FtpletResult beforeCommand( FtpSession session, FtpRequest request ) - throws FtpException, IOException - { - if ( session.getUser() != null ) { - log.info( session.getUser().getName() + " issued command: " + request.getRequestLine() ); - } - return null; - } - - @Override - public FtpletResult afterCommand( FtpSession session, FtpRequest request, - FtpReply reply ) throws FtpException, IOException - { - // not used - return null; - } - - @Override - public FtpletResult onConnect( FtpSession session ) throws FtpException, - IOException - { - // not used - return null; - } - - @Override - public FtpletResult onDisconnect( FtpSession session ) throws FtpException, - IOException - { - // not used - return null; - } - -} |