From 287ad92152c530b400a5405a4672a41d92e4d368 Mon Sep 17 00:00:00 2001 From: Nils Schwabe Date: Mon, 28 Apr 2014 18:18:59 +0200 Subject: Add ftp users and images in processing list are remembered --- .../openslx/imagemaster/ftp/MasterFtpServer.java | 43 +++++++--------------- 1 file changed, 13 insertions(+), 30 deletions(-) (limited to 'src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java') diff --git a/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java b/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java index 19671e3..e3514f6 100644 --- a/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java +++ b/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java @@ -1,8 +1,6 @@ package org.openslx.imagemaster.ftp; import java.io.File; -import java.io.FileNotFoundException; -import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -34,10 +32,8 @@ public class MasterFtpServer implements Runnable private FtpServer server; private UserManager userManager; private Listener listener; - // key: serverSessionId, value: FtpCredentials - public final HashMap users = new HashMap<>(); // key: ftpUsername, value: createTime - public final HashMap timeouts = new HashMap<>(); + public final HashMap users = new HashMap<>(); private boolean ini = false; public void init( int port ) @@ -66,15 +62,6 @@ public class MasterFtpServer implements Runnable // create user manager PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory(); 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(); @@ -116,8 +103,9 @@ public class MasterFtpServer implements Runnable try { userManager.save( user ); ftpCredentials = new FtpCredentials( generatedUser, generatedPass ); - users.put( serverSessionId, ftpCredentials ); - timeouts.put( ftpCredentials.username, System.currentTimeMillis()); + synchronized ( users ) { + users.put( ftpCredentials.username, System.currentTimeMillis()); + } } catch ( FtpException e ) { } @@ -127,43 +115,38 @@ public class MasterFtpServer implements Runnable return ftpCredentials; } - public boolean removeUser( final String serverSessionId ) + public boolean removeUser( final String username ) { - if ( !users.containsKey( serverSessionId ) ) + if ( !users.containsKey( username ) ) return false; try { - log.info( "Closing session" ); // first find active session and close it Iterator 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) { + if (session.getUser().getName() == 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 ); + userManager.delete( username ); + // remove user from map (cache) + synchronized ( users ) { + users.remove( username ); + } return true; } catch ( FtpException e ) { return false; } } - public FtpCredentials getCredentialsFromSessionId( String serverSessionId ) - { - return users.get( serverSessionId ); - } - @Override public void run() { try { + //if (!ini) throw new Exception("FTP server needs to be initalized."); log.info( "Starting FTP Sever" ); server.start(); } catch ( FtpException e1 ) { -- cgit v1.2.3-55-g7522