summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNils Schwabe2014-04-23 15:00:19 +0200
committerNils Schwabe2014-04-23 15:00:19 +0200
commited9dca193a8ad68681393ea79c96bc84b6444639 (patch)
tree9533c1764de6864b8f8087995799d059072daf2c
parentFixed something (diff)
downloadmasterserver-ed9dca193a8ad68681393ea79c96bc84b6444639.tar.gz
masterserver-ed9dca193a8ad68681393ea79c96bc84b6444639.tar.xz
masterserver-ed9dca193a8ad68681393ea79c96bc84b6444639.zip
Fix some issues with FtpCredentialsScheduler
Add some options to config file
-rw-r--r--config/global.properties.example26
-rw-r--r--src/main/java/org/openslx/imagemaster/App.java23
-rw-r--r--src/main/java/org/openslx/imagemaster/Globals.java136
-rw-r--r--src/main/java/org/openslx/imagemaster/db/ImageProcessor.java8
-rw-r--r--src/main/java/org/openslx/imagemaster/db/LdapUser.java14
-rw-r--r--src/main/java/org/openslx/imagemaster/server/ApiServer.java2
-rw-r--r--src/main/java/org/openslx/imagemaster/server/FtpCredentialsScheduler.java62
-rw-r--r--src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java133
-rw-r--r--src/main/java/org/openslx/imagemaster/server/MasterFtplet.java20
-rw-r--r--src/main/java/org/openslx/imagemaster/serversession/ServerSession.java5
-rw-r--r--src/main/java/org/openslx/imagemaster/session/Session.java5
-rw-r--r--src/main/java/org/openslx/imagemaster/thrift/server/ImageServerHandler.java2
-rw-r--r--src/main/java/org/openslx/imagemaster/thrift/server/TBinaryProtocolSafe.java1
-rw-r--r--src/test/java/org/openslx/imagemaster/AppTest.java1
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 {