summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
diff options
context:
space:
mode:
authorNils Schwabe2014-04-25 16:20:50 +0200
committerNils Schwabe2014-04-25 16:20:50 +0200
commitb9878eda35e354d16ce732a57b7fabebb46c1a46 (patch)
treec0d9c7ad51025affb1480e676f3f37841c3bcd7b /src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
parentMerge branch 'master' of git.openslx.org:bwlp/masterserver (diff)
downloadmasterserver-b9878eda35e354d16ce732a57b7fabebb46c1a46.tar.gz
masterserver-b9878eda35e354d16ce732a57b7fabebb46c1a46.tar.xz
masterserver-b9878eda35e354d16ce732a57b7fabebb46c1a46.zip
Add remove image from process list (when user gets deleted after timeout)
Fix problems with timeout user deleting
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java39
1 files changed, 34 insertions, 5 deletions
diff --git a/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java b/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
index 992c49a..19671e3 100644
--- a/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
+++ b/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
@@ -1,9 +1,11 @@
package org.openslx.imagemaster.ftp;
import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
import java.util.ArrayList;
-import java.util.Date;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import org.apache.ftpserver.FtpServer;
@@ -12,6 +14,8 @@ 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.impl.FtpIoSession;
+import org.apache.ftpserver.listener.Listener;
import org.apache.ftpserver.listener.ListenerFactory;
import org.apache.ftpserver.ssl.SslConfigurationFactory;
import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
@@ -29,10 +33,11 @@ public class MasterFtpServer implements Runnable
private static Logger log = Logger.getLogger( MasterFtpServer.class );
private FtpServer server;
private UserManager userManager;
+ private Listener listener;
// key: serverSessionId, value: FtpCredentials
public final HashMap<String, FtpCredentials> users = new HashMap<>();
// key: ftpUsername, value: createTime
- public final HashMap<String, Date> timeouts = new HashMap<>();
+ public final HashMap<String, Long> timeouts = new HashMap<>();
private boolean ini = false;
public void init( int port )
@@ -55,11 +60,22 @@ public class MasterFtpServer implements Runnable
factory.setImplicitSsl( true );
// replace the default listener
- serverFactory.addListener( "default", factory.createListener() );
+ listener = factory.createListener();
+ serverFactory.addListener( "default", listener );
// create user manager
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
- userManagerFactory.setFile( new File( "src/main/properties/ftp.properties" ) );
+ File userFile = new File( "src/main/properties/ftp.properties" );
+ // clear user file to avoid dead users
+ PrintWriter writer = null;
+ try {
+ writer = new PrintWriter(userFile);
+ } catch ( FileNotFoundException e ) {
+ } finally {
+ writer.print("");
+ writer.close();
+ }
+ userManagerFactory.setFile( userFile );
userManagerFactory.setPasswordEncryptor( new SaltedPasswordEncryptor() );
userManager = userManagerFactory.createUserManager();
serverFactory.setUserManager( userManager );
@@ -101,7 +117,7 @@ public class MasterFtpServer implements Runnable
userManager.save( user );
ftpCredentials = new FtpCredentials( generatedUser, generatedPass );
users.put( serverSessionId, ftpCredentials );
- timeouts.put( ftpCredentials.username, new Date() );
+ timeouts.put( ftpCredentials.username, System.currentTimeMillis());
} catch ( FtpException e ) {
}
@@ -117,7 +133,20 @@ public class MasterFtpServer implements Runnable
return false;
try {
+ log.info( "Closing session" );
+ // first find active session and close it
+ Iterator<FtpIoSession> iter = listener.getActiveSessions().iterator();
+ while (iter.hasNext()) {
+ FtpIoSession session = (FtpIoSession) iter.next();
+ if (session.getUser() == null) continue;
+ if (session.getUser().getName() == users.get( serverSessionId ).username) {
+ session.close();
+ }
+ }
+ log.info( "Deleting user" );
+ // afterwards delete user
userManager.delete( users.get( serverSessionId ).username );
+ log.info( "removing user from timeout list" );
// remove user from both maps
timeouts.remove( users.remove( serverSessionId ).username );
return true;