summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java53
1 files changed, 38 insertions, 15 deletions
diff --git a/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java b/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java
index 973c768..c6592bc 100644
--- a/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java
+++ b/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java
@@ -17,11 +17,15 @@ import org.apache.ftpserver.usermanager.SaltedPasswordEncryptor;
import org.apache.ftpserver.usermanager.impl.BaseUser;
import org.apache.ftpserver.usermanager.impl.WritePermission;
import org.apache.log4j.Logger;
+import org.openslx.imagemaster.Globals;
+import org.openslx.imagemaster.thrift.iface.FtpCredentials;
+import org.openslx.imagemaster.util.RandomString;
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<>();
public MasterFtpServer(int port, String adminUsername, String adminPassword, String ftproot) {
FtpServerFactory serverFactory = new FtpServerFactory();
@@ -39,7 +43,7 @@ public class MasterFtpServer implements Runnable {
userManager = userManagerFactory.createUserManager();
// create new admin user
- addUser(adminUsername, adminPassword, ftproot, true);
+ //addUser(adminUsername, adminPassword, ftproot, true);
serverFactory.setUserManager(userManager);
// add the Ftplet
@@ -51,38 +55,57 @@ public class MasterFtpServer implements Runnable {
server = serverFactory.createServer();
}
- public boolean addUser(final String username, final String password, final String ftproot, final boolean writeAccess) {
+ public FtpCredentials addUser(final String serverSessionId) {
// TODO: enable SSL
- boolean result = true;
+
+ FtpCredentials ftpCredentials = null;
+
+ String generatedUser = RandomString.generate(10, false);
+ String generatedPass = RandomString.generate(16, true);
+
+ String dir = Globals.properties.getProperty(Globals.ftpBaseDir) + "/"
+ + generatedUser + "/";
+
+ if (!new File(dir).mkdir()) {
+ return ftpCredentials;
+ }
BaseUser user = new BaseUser();
- user.setName(username);
- user.setPassword(password);
- user.setHomeDirectory(ftproot);
+ user.setName(generatedUser);
+ user.setPassword(generatedPass);
+ user.setHomeDirectory(dir);
List<Authority> authorities = new ArrayList<Authority>();
- if (writeAccess) authorities.add(new WritePermission());
+ authorities.add(new WritePermission());
user.setAuthorities(authorities);
try {
userManager.save(user);
+ ftpCredentials = new FtpCredentials(generatedUser, generatedPass);
+ users.put(serverSessionId, ftpCredentials);
} catch (FtpException e) {
- result = false;
}
- return result;
+ log.info("Generated user/pass: " + generatedUser + "\t"
+ + generatedPass + "\n with home dir: " + dir);
+
+ return ftpCredentials;
}
- public boolean removeUser(final String username) {
- boolean result = true;
+ public boolean removeUser(final String serverSessionId) {
+ if (!users.containsKey(serverSessionId)) return false;
try {
- userManager.delete(username);
+ userManager.delete(users.get(serverSessionId).username);
+ users.remove(serverSessionId);
+ return true;
} catch (FtpException e) {
- result = false;
+ return false;
}
-
- return result;
+ }
+
+ public FtpCredentials getCredentialsFromSessionId(String serverSessionId) {
+ return users.get(serverSessionId);
}
@Override