summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNils Schwabe2014-04-22 18:18:09 +0200
committerNils Schwabe2014-04-22 18:18:09 +0200
commitaa76ff75e6830b35ca2b7171c8c3a81e96ff937c (patch)
tree2fd580518077d4703a45557409172fd7a6ab37ab
parentAdd code styling settings for eclipse (diff)
downloadmasterserver-aa76ff75e6830b35ca2b7171c8c3a81e96ff937c.tar.gz
masterserver-aa76ff75e6830b35ca2b7171c8c3a81e96ff937c.tar.xz
masterserver-aa76ff75e6830b35ca2b7171c8c3a81e96ff937c.zip
Added FtpCredentialsScheduler to periodically remove old files and ftp users
-rw-r--r--src/main/java/org/openslx/imagemaster/App.java4
-rw-r--r--src/main/java/org/openslx/imagemaster/server/ApiServer.java3
-rw-r--r--src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java10
-rw-r--r--src/main/java/org/openslx/imagemaster/util/Util.java19
4 files changed, 31 insertions, 5 deletions
diff --git a/src/main/java/org/openslx/imagemaster/App.java b/src/main/java/org/openslx/imagemaster/App.java
index aba2cd6..8d7f200 100644
--- a/src/main/java/org/openslx/imagemaster/App.java
+++ b/src/main/java/org/openslx/imagemaster/App.java
@@ -7,6 +7,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
+import org.openslx.imagemaster.server.FtpCredentialsScheduler;
import org.openslx.imagemaster.thrift.server.BinaryListener;
public class App {
@@ -56,6 +57,9 @@ public class App {
servers.add(f);
f.start();
+ // start FtpCredentialsScheduler
+ FtpCredentialsScheduler.startScheduling();
+
// Run more servers
// ...
// Wait for all servers to die
diff --git a/src/main/java/org/openslx/imagemaster/server/ApiServer.java b/src/main/java/org/openslx/imagemaster/server/ApiServer.java
index fc1d9b0..1fcfa49 100644
--- a/src/main/java/org/openslx/imagemaster/server/ApiServer.java
+++ b/src/main/java/org/openslx/imagemaster/server/ApiServer.java
@@ -1,9 +1,7 @@
package org.openslx.imagemaster.server;
import java.io.File;
-import java.util.HashMap;
-import org.apache.ftpserver.ftplet.FtpException;
import org.apache.log4j.Logger;
import org.apache.thrift.TException;
import org.openslx.imagemaster.Globals;
@@ -29,7 +27,6 @@ import org.openslx.imagemaster.thrift.iface.ServerAuthenticationException;
import org.openslx.imagemaster.thrift.iface.ServerSessionData;
import org.openslx.imagemaster.thrift.iface.SessionData;
import org.openslx.imagemaster.thrift.iface.UserInfo;
-import org.openslx.imagemaster.util.RandomString;
/**
* API Server This is where all the requests from the outside arrive. We don't
diff --git a/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java b/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java
index c6592bc..d1ec14f 100644
--- a/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java
+++ b/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java
@@ -2,6 +2,7 @@ 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;
@@ -25,7 +26,10 @@ public class MasterFtpServer implements Runnable {
private static Logger log = Logger.getLogger( MasterFtpServer.class );
private FtpServer server;
private UserManager userManager;
- private HashMap<String, FtpCredentials> users = new HashMap<>();
+ // 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 MasterFtpServer(int port, String adminUsername, String adminPassword, String ftproot) {
FtpServerFactory serverFactory = new FtpServerFactory();
@@ -83,6 +87,7 @@ public class MasterFtpServer implements Runnable {
userManager.save(user);
ftpCredentials = new FtpCredentials(generatedUser, generatedPass);
users.put(serverSessionId, ftpCredentials);
+ timeouts.put(ftpCredentials.username, new Date());
} catch (FtpException e) {
}
@@ -97,7 +102,8 @@ public class MasterFtpServer implements Runnable {
try {
userManager.delete(users.get(serverSessionId).username);
- users.remove(serverSessionId);
+ // remove user from both maps
+ timeouts.remove(users.remove(serverSessionId).username);
return true;
} catch (FtpException e) {
return false;
diff --git a/src/main/java/org/openslx/imagemaster/util/Util.java b/src/main/java/org/openslx/imagemaster/util/Util.java
index 4459a3a..9e0f708 100644
--- a/src/main/java/org/openslx/imagemaster/util/Util.java
+++ b/src/main/java/org/openslx/imagemaster/util/Util.java
@@ -1,5 +1,6 @@
package org.openslx.imagemaster.util;
+import java.io.File;
import java.util.Random;
import org.apache.log4j.Logger;
@@ -48,5 +49,23 @@ public class Util
{
return random.nextInt( n );
}
+
+ /**
+ * Remove a folder and all contents
+ * @param folder
+ */
+ public static void deleteFolder(File folder) {
+ File[] files = folder.listFiles();
+ if (files!=null) {
+ for (File f: files) {
+ if (f.isDirectory()) {
+ deleteFolder(f);
+ } else {
+ f.delete();
+ }
+ }
+ }
+ folder.delete();
+ }
}