summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/server
diff options
context:
space:
mode:
authorNils Schwabe2014-04-25 14:28:56 +0200
committerNils Schwabe2014-04-25 14:28:56 +0200
commit40d528627efc309681496b47d66558e15eb3fe5e (patch)
tree4cb7ba77b4b55ecb0b29a734c782b68d6926d441 /src/main/java/org/openslx/imagemaster/server
parentAdd FTPS to MasterFtpServer (diff)
downloadmasterserver-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')
-rw-r--r--src/main/java/org/openslx/imagemaster/server/ApiServer.java5
-rw-r--r--src/main/java/org/openslx/imagemaster/server/FtpCredentialsScheduler.java63
-rw-r--r--src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java143
-rw-r--r--src/main/java/org/openslx/imagemaster/server/MasterFtplet.java64
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;
- }
-
-}