diff options
author | Nils Schwabe | 2014-04-23 15:00:19 +0200 |
---|---|---|
committer | Nils Schwabe | 2014-04-23 15:00:19 +0200 |
commit | ed9dca193a8ad68681393ea79c96bc84b6444639 (patch) | |
tree | 9533c1764de6864b8f8087995799d059072daf2c | |
parent | Fixed something (diff) | |
download | masterserver-ed9dca193a8ad68681393ea79c96bc84b6444639.tar.gz masterserver-ed9dca193a8ad68681393ea79c96bc84b6444639.tar.xz masterserver-ed9dca193a8ad68681393ea79c96bc84b6444639.zip |
Fix some issues with FtpCredentialsScheduler
Add some options to config file
14 files changed, 288 insertions, 150 deletions
diff --git a/config/global.properties.example b/config/global.properties.example index e2e1a3b..1b2ea39 100644 --- a/config/global.properties.example +++ b/config/global.properties.example @@ -4,9 +4,6 @@ # Directories # ##################### -# the base dir of the ftp server (should exists) -ftp_base_dir=/tmp - # the dir where the images are stored image_dir=/tmp @@ -29,6 +26,25 @@ ldap_bind_query=uid\=%,ou\=people,dc\=uni-freiburg,dc\=de # search baseDn ldap_search_base_dn=ou\=people,dc\=uni-freiburg,dc\=de - # search filter (use a % for the username replacement -ldap_search_filter=(&(objectclass\=person)(uid\=%))
\ No newline at end of file +ldap_search_filter=(&(objectclass\=person)(uid\=%)) + +##################### +# Session # +##################### + +# session timeout for users (in minutes) +session_timeout_user=30 + +# session timeout for servers (in minutes) +session_timeout_server=30 + +##################### +# FTP Server # +##################### + +# the base dir of the ftp server (should exists) +ftp_base_dir=/home/nils/ftp + +# the port of the ftp server +ftp_port=2221
\ No newline at end of file diff --git a/src/main/java/org/openslx/imagemaster/App.java b/src/main/java/org/openslx/imagemaster/App.java index 8d7f200..c0f7a34 100644 --- a/src/main/java/org/openslx/imagemaster/App.java +++ b/src/main/java/org/openslx/imagemaster/App.java @@ -1,12 +1,11 @@ package org.openslx.imagemaster; -import java.io.BufferedInputStream; -import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; +import org.openslx.imagemaster.Globals.PropInt; import org.openslx.imagemaster.server.FtpCredentialsScheduler; import org.openslx.imagemaster.thrift.server.BinaryListener; @@ -20,30 +19,17 @@ public class App { log.info("Starting Application"); // Load properties - boolean error = false; - BufferedInputStream stream = null; try { - stream = new BufferedInputStream(new FileInputStream( - "config/global.properties")); - Globals.properties.load(stream); + Globals.loadProperties(); // don't need to check return, because this should be the first time where props are loaded. if (!Globals.propertiesValid()) { log.error("Config file contains errors."); System.exit(1); } } catch (IOException e) { log.error("Could not load config file. Quitting."); - error = true; - } finally { - if (stream != null) { - try { - stream.close(); - } catch (IOException e) { - } - } - if (error) - System.exit(1); - log.info("Loaded config file"); + System.exit(1); } + log.info("Loaded config file"); // Create binary listener Thread t; @@ -52,6 +38,7 @@ public class App { t.start(); // Create Ftp Server + Globals.ftpServer.init( Globals.getPropertyInt( PropInt.FTPPORT ) ); Thread f; f = new Thread(Globals.ftpServer, "FtpServer"); servers.add(f); diff --git a/src/main/java/org/openslx/imagemaster/Globals.java b/src/main/java/org/openslx/imagemaster/Globals.java index 7dbbae4..1f0b876 100644 --- a/src/main/java/org/openslx/imagemaster/Globals.java +++ b/src/main/java/org/openslx/imagemaster/Globals.java @@ -1,66 +1,134 @@ package org.openslx.imagemaster; +import java.io.BufferedInputStream; +import java.io.FileInputStream; +import java.io.IOException; import java.util.Properties; import org.apache.commons.lang3.StringUtils; import org.openslx.imagemaster.server.MasterFtpServer; public class Globals { - public static final Properties properties = new Properties(); + private static final Properties properties = new Properties(); + private static boolean loadedProperties = false; - public static final MasterFtpServer ftpServer = new MasterFtpServer(2221, "admin", - "SI*HoZCC!]V)p>B2", Globals.properties.getProperty("ftp_base_dir")); + public static final MasterFtpServer ftpServer = new MasterFtpServer(); - // properties - public static final String ftpBaseDir = "ftp_base_dir"; - public static final String imageDir = "image_dir"; - public static final String ldapPort = "ldap_port"; - public static final String ldapHost = "ldap_host"; - public static final String ldapSsl = "ldap_ssl"; - public static final String ldapBindQuery = "ldap_bind_query"; - public static final String ldapSearchBaseDn = "ldap_search_base_dn"; - public static final String ldapSearchFilter = "ldap_search_filter"; + public static enum PropInt { + LDAPPORT, SESSIONTIMEOUTUSER, SESSIONTIMEOUTSERVER, FTPPORT, FTPTIMEOUT + } + + public static enum PropString { + IMAGEDIR, LDAPHOST, LDAPBINDQUERY, LDAPSEARCHBASEDN, LDAPSEARCHFILTER, FTPBASEDIR + } + + public static enum PropBool { + LDAPSSL + } + + /** + * Loads the properties from config/global.properties + * @return if the properties were loaded or not + * @throws IOException + */ + public static boolean loadProperties() throws IOException { + if (loadedProperties) return false; + + // Load properties + BufferedInputStream stream = new BufferedInputStream(new FileInputStream("config/global.properties")); + properties.load(stream); + stream.close(); + + return true; + } public static boolean propertiesValid() { - if (Globals.properties.getProperty(ftpBaseDir) == null - || Globals.properties.getProperty(ftpBaseDir).isEmpty() - || Globals.properties.getProperty(imageDir) == null - || Globals.properties.getProperty(imageDir).isEmpty() - || Globals.properties.getProperty(ldapPort) == null - || Globals.properties.getProperty(ldapPort).isEmpty() - || Globals.properties.getProperty(ldapHost) == null - || Globals.properties.getProperty(ldapHost).isEmpty() - || Globals.properties.getProperty(ldapSsl) == null - || Globals.properties.getProperty(ldapSsl).isEmpty() - || Globals.properties.getProperty(ldapBindQuery) == null - || Globals.properties.getProperty(ldapBindQuery).isEmpty() - || Globals.properties.getProperty(ldapSearchBaseDn) == null - || Globals.properties.getProperty(ldapSearchBaseDn).isEmpty() - || Globals.properties.getProperty(ldapSearchFilter) == null - || Globals.properties.getProperty(ldapSearchFilter).isEmpty() + + if ( Globals.getPropertyString( PropString.IMAGEDIR ) == null + || Globals.getPropertyString( PropString.IMAGEDIR ).isEmpty() + || Globals.getPropertyString( PropString.LDAPHOST ) == null + || Globals.getPropertyString( PropString.LDAPHOST ).isEmpty() + || Globals.getPropertyString( PropString.LDAPBINDQUERY ) == null + || Globals.getPropertyString( PropString.LDAPBINDQUERY ).isEmpty() + || Globals.getPropertyString( PropString.LDAPSEARCHBASEDN ) == null + || Globals.getPropertyString( PropString.LDAPSEARCHBASEDN ).isEmpty() + || Globals.getPropertyString( PropString.LDAPSEARCHFILTER ) == null + || Globals.getPropertyString( PropString.LDAPSEARCHFILTER ).isEmpty() + || Globals.getPropertyString( PropString.FTPBASEDIR ) == null + || Globals.getPropertyString( PropString.FTPBASEDIR ).isEmpty() + + || Globals.getPropertyInt( PropInt.LDAPPORT ) == 0 + || Globals.getPropertyInt( PropInt.SESSIONTIMEOUTUSER ) == 0 + || Globals.getPropertyInt( PropInt.SESSIONTIMEOUTSERVER ) == 0 + || Globals.getPropertyInt( PropInt.FTPPORT ) == 0 + || Globals.getPropertyInt( PropInt.FTPTIMEOUT ) == 0 ) { return false; } - if (StringUtils.countMatches(Globals.properties.getProperty(ldapBindQuery), "%") != 1) { + if (StringUtils.countMatches(Globals.getPropertyString( PropString.LDAPBINDQUERY ), "%") != 1) { return false; } - if (StringUtils.countMatches(Globals.properties.getProperty(ldapSearchFilter), "%") != 1) { + if (StringUtils.countMatches(Globals.getPropertyString( PropString.LDAPSEARCHFILTER ), "%") != 1) { return false; } // remove "/" at the end of the path - String ftp = Globals.properties.getProperty(ftpBaseDir); + String ftp = Globals.getPropertyString( PropString.FTPBASEDIR ); if (ftp.endsWith("/")) { - Globals.properties.put(ftpBaseDir, ftp.substring(0, ftp.length() - 1)); + Globals.properties.put("ftp_base_dir", ftp.substring(0, ftp.length() - 1)); } - String image = Globals.properties.getProperty(imageDir); + String image = Globals.getPropertyString( PropString.IMAGEDIR ); if (image.endsWith("/")) { - Globals.properties.put(imageDir, image.substring(0, image.length() -1 )); + Globals.properties.put("image_dir", image.substring(0, image.length() -1 )); } return true; } + + public static int getPropertyInt(Globals.PropInt props) { + String result = null; + + switch (props) { + case LDAPPORT: result = properties.getProperty( "ldap_port" ); break; + case SESSIONTIMEOUTUSER: result = properties.getProperty( "session_timeout_user" ); break; + case SESSIONTIMEOUTSERVER: result = properties.getProperty( "session_timeout_server" ); break; + case FTPPORT: result = properties.getProperty( "ftp_port" ); break; + case FTPTIMEOUT: result = properties.getProperty( "ftp_timeout" ); break; + default: result = "0"; break; + } + + if (result == null) return 0; + + return Integer.valueOf( result ); + } + + public static String getPropertyString(Globals.PropString props) { + String result = null; + + switch (props) { + case IMAGEDIR: result = properties.getProperty( "image_dir" ); break; + case LDAPHOST: result = properties.getProperty( "ldap_host" ); break; + case LDAPBINDQUERY: result = properties.getProperty( "ldap_bind_query" ); break; + case LDAPSEARCHBASEDN: result = properties.getProperty( "ldap_search_base_dn" ); break; + case LDAPSEARCHFILTER: result = properties.getProperty( "ldap_search_filter" ); break; + case FTPBASEDIR: result = properties.getProperty( "ftp_base_dir" ); break; + default: result = ""; break; + } + + return result; + } + + public static boolean getPropertyBool(Globals.PropBool props) { + String result = null; + + switch (props) { + case LDAPSSL: result = properties.getProperty( "ldap_ssl" ); + default: result = ""; break; + } + + return Boolean.valueOf( result ); + } } diff --git a/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java b/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java index 8c8bd8c..de545ae 100644 --- a/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java +++ b/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java @@ -28,8 +28,8 @@ public class ImageProcessor { + "'"); // move image to right location - String oldFileName = Globals.properties.getProperty("ftp_base_dir") + "/" + username + "/" + filename; - String newFileName = Globals.properties.getProperty("image_dir") + "/" + images.get(username).uuid; + String oldFileName = Globals.getPropertyString( Globals.PropString.FTPBASEDIR ) + "/" + username + "/" + filename; + String newFileName = Globals.getPropertyString( Globals.PropString.IMAGEDIR ) + "/" + images.get(username).uuid; File imageFile = new File(oldFileName); @@ -42,7 +42,7 @@ public class ImageProcessor { log.info("Moved file from " + oldFileName + " to " + newFileName ); - File tempUserDir = new File (Globals.properties.getProperty("ftp_base_dir") + "/" + username); + File tempUserDir = new File (Globals.getPropertyString( Globals.PropString.FTPBASEDIR ) + "/" + username); tempUserDir.delete(); // update database @@ -54,7 +54,7 @@ public class ImageProcessor { } /** - * Try to add imageData to db + * Try to add imageData to database. * * @param imageData * the data for the image to add diff --git a/src/main/java/org/openslx/imagemaster/db/LdapUser.java b/src/main/java/org/openslx/imagemaster/db/LdapUser.java index 1124696..0a18565 100644 --- a/src/main/java/org/openslx/imagemaster/db/LdapUser.java +++ b/src/main/java/org/openslx/imagemaster/db/LdapUser.java @@ -15,6 +15,8 @@ import org.apache.directory.ldap.client.api.LdapConnectionConfig; import org.apache.directory.ldap.client.api.LdapNetworkConnection; import org.apache.log4j.Logger; import org.openslx.imagemaster.Globals; +import org.openslx.imagemaster.Globals.PropBool; +import org.openslx.imagemaster.Globals.PropString; import org.openslx.imagemaster.session.User; import org.openslx.imagemaster.thrift.iface.AuthenticationError; import org.openslx.imagemaster.thrift.iface.AuthenticationException; @@ -73,16 +75,16 @@ public class LdapUser extends User LdapConnectionConfig ldapConfig = new LdapConnectionConfig(); ldapConfig.setTrustManagers(new MyTrustManager()); - ldapConfig.setLdapPort(Integer.valueOf(Globals.properties.getProperty(Globals.ldapPort))); - ldapConfig.setLdapHost(Globals.properties.getProperty(Globals.ldapHost)); - ldapConfig.setUseSsl(Boolean.valueOf(Globals.properties.getProperty(Globals.ldapSsl))); + ldapConfig.setLdapPort(Globals.getPropertyInt( Globals.PropInt.LDAPPORT )); + ldapConfig.setLdapHost(Globals.getPropertyString( Globals.PropString.LDAPHOST )); + ldapConfig.setUseSsl(Globals.getPropertyBool( PropBool.LDAPSSL )); LdapNetworkConnection connection = new LdapNetworkConnection( ldapConfig ); // bind connection try { if ( connection.connect() ) { - String name = Globals.properties.getProperty(Globals.ldapBindQuery).replace("%", username); + String name = Globals.getPropertyString( PropString.LDAPBINDQUERY ).replace("%", username); connection.bind(name, password); } } catch (LdapException e1) { @@ -112,8 +114,8 @@ public class LdapUser extends User // make search query try { - EntryCursor cursor = connection.search(Globals.properties.getProperty(Globals.ldapSearchBaseDn), - Globals.properties.getProperty(Globals.ldapSearchFilter).replace("%", username), SearchScope.SUBTREE); + EntryCursor cursor = connection.search(Globals.getPropertyString( Globals.PropString.LDAPSEARCHBASEDN ), + Globals.getPropertyString( Globals.PropString.LDAPSEARCHFILTER ).replace("%", username), SearchScope.SUBTREE); // only use the first result cursor.next(); Entry entry = cursor.get(); diff --git a/src/main/java/org/openslx/imagemaster/server/ApiServer.java b/src/main/java/org/openslx/imagemaster/server/ApiServer.java index df0aa3a..f4511fe 100644 --- a/src/main/java/org/openslx/imagemaster/server/ApiServer.java +++ b/src/main/java/org/openslx/imagemaster/server/ApiServer.java @@ -170,7 +170,7 @@ public class ApiServer { // process the image String username = Globals.ftpServer.getCredentialsFromSessionId(serverSessionId).username; - File userDirectory = new File(Globals.properties.getProperty(Globals.ftpBaseDir) + "/" + username); + File userDirectory = new File(Globals.getPropertyString( Globals.PropString.FTPBASEDIR ) + "/" + username); File[] list = userDirectory.listFiles(); if (list.length != 1) return false; diff --git a/src/main/java/org/openslx/imagemaster/server/FtpCredentialsScheduler.java b/src/main/java/org/openslx/imagemaster/server/FtpCredentialsScheduler.java new file mode 100644 index 0000000..88e70f8 --- /dev/null +++ b/src/main/java/org/openslx/imagemaster/server/FtpCredentialsScheduler.java @@ -0,0 +1,62 @@ +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.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 : Globals.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 ); + Globals.ftpServer.removeUser( sessionId ); + } + } else if ( list.length > 1 ) { + log.info( username + " uploaded too many files. Deleting his account and his folder." ); + Util.deleteFolder( dir ); + Globals.ftpServer.removeUser( sessionId ); + } else { + // check the creation time of the user + if ( ( new Date().getTime() - Globals.ftpServer.timeouts.get( username ).getTime() ) >= timeout ) { + // remove user and his folder + Util.deleteFolder( dir ); + Globals.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 index d1ec14f..5f5dd79 100644 --- a/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java +++ b/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java @@ -22,7 +22,9 @@ 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,105 @@ 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(); // set the port of the listener - factory.setPort(port); - + factory.setPort( port ); + // 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(); - + 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); - + //addUser(adminUsername, adminPassword, ftproot, true); + 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(); } - public FtpCredentials addUser(final String serverSessionId) { - // TODO: enable SSL - + public FtpCredentials addUser( final String serverSessionId ) + { + // TODO: enable SSL + 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(); } } diff --git a/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java b/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java index 479729d..559197c 100644 --- a/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java +++ b/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java @@ -9,17 +9,14 @@ 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.ftpserver.ftplet.UserManager; import org.apache.log4j.Logger; -import org.openslx.imagemaster.db.ImageProcessor; public class MasterFtplet implements Ftplet { private static Logger log = Logger.getLogger(Ftplet.class); - private UserManager userManager; @Override public void init(FtpletContext ftpletContext) throws FtpException { - userManager = ftpletContext.getUserManager(); + // not used } @Override @@ -39,20 +36,7 @@ public class MasterFtplet implements Ftplet { @Override public FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply) throws FtpException, IOException { - if (session.getUser() != null) { - String username = session.getUser().getName(); - String command = request.getRequestLine(); - log.info(username + " is done with command: " + command); - if (request.getCommand().equals("STOR")) { - try { - userManager.delete(username); - } catch (FtpException e) { - } finally { - log.info("Stored file and deleted user: '" + username + "'"); - ImageProcessor.processImageAfterUpload(username, command.split(" ")[1]); - } - } - } + // not used return null; } diff --git a/src/main/java/org/openslx/imagemaster/serversession/ServerSession.java b/src/main/java/org/openslx/imagemaster/serversession/ServerSession.java index 818439c..633788b 100644 --- a/src/main/java/org/openslx/imagemaster/serversession/ServerSession.java +++ b/src/main/java/org/openslx/imagemaster/serversession/ServerSession.java @@ -1,5 +1,8 @@ package org.openslx.imagemaster.serversession; +import org.openslx.imagemaster.Globals; +import org.openslx.imagemaster.Globals.PropInt; + /** * Holds the session id of the server and manages the timeout. * @author nils @@ -7,7 +10,7 @@ package org.openslx.imagemaster.serversession; */ public class ServerSession { - private static final long TIMEOUT = 600L * 1000L; // TODO: config + private static final long TIMEOUT = Long.valueOf( Globals.getPropertyInt( PropInt.SESSIONTIMEOUTSERVER ) ) * 1000L; private long timeOut = 0; private final ServerUser serverUser; diff --git a/src/main/java/org/openslx/imagemaster/session/Session.java b/src/main/java/org/openslx/imagemaster/session/Session.java index 8dc7f2b..39861a1 100644 --- a/src/main/java/org/openslx/imagemaster/session/Session.java +++ b/src/main/java/org/openslx/imagemaster/session/Session.java @@ -1,5 +1,8 @@ package org.openslx.imagemaster.session; +import org.openslx.imagemaster.Globals; +import org.openslx.imagemaster.Globals.PropInt; + /** * Simple representation of a user session. Contains user-related data and * information on whether the session is still valid. @@ -7,7 +10,7 @@ package org.openslx.imagemaster.session; */ public class Session { - private static final long TIMEOUT = 600L * 1000L; // TODO: config + private static final long TIMEOUT = Long.valueOf( Globals.getPropertyInt( PropInt.SESSIONTIMEOUTUSER ) ) * 1000L; private long timeOut = 0; private final User user; diff --git a/src/main/java/org/openslx/imagemaster/thrift/server/ImageServerHandler.java b/src/main/java/org/openslx/imagemaster/thrift/server/ImageServerHandler.java index 899af1a..60ae19a 100644 --- a/src/main/java/org/openslx/imagemaster/thrift/server/ImageServerHandler.java +++ b/src/main/java/org/openslx/imagemaster/thrift/server/ImageServerHandler.java @@ -21,7 +21,7 @@ public class ImageServerHandler implements ImageServer.Iface public boolean ping() throws TException { log.debug("Ping..."); - // TODO: Return false if service unavailable but running + // Return false if service unavailable but running return true; } diff --git a/src/main/java/org/openslx/imagemaster/thrift/server/TBinaryProtocolSafe.java b/src/main/java/org/openslx/imagemaster/thrift/server/TBinaryProtocolSafe.java index 614be22..f30ba00 100644 --- a/src/main/java/org/openslx/imagemaster/thrift/server/TBinaryProtocolSafe.java +++ b/src/main/java/org/openslx/imagemaster/thrift/server/TBinaryProtocolSafe.java @@ -22,6 +22,7 @@ public class TBinaryProtocolSafe extends TBinaryProtocol /** * Factory */ + @SuppressWarnings( "serial" ) public static class Factory implements TProtocolFactory { protected boolean strictRead_ = false; diff --git a/src/test/java/org/openslx/imagemaster/AppTest.java b/src/test/java/org/openslx/imagemaster/AppTest.java index 89e72c1..fecf9ac 100644 --- a/src/test/java/org/openslx/imagemaster/AppTest.java +++ b/src/test/java/org/openslx/imagemaster/AppTest.java @@ -152,6 +152,7 @@ public class AppTest FtpClient.storeFile("xcvb.vmdk", input); System.out.println("done."); FtpClient.noop(); + client.finshedUpload( data.sessionId, imageData ); } finally { if (FtpClient.isConnected()) { try { |