diff options
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java')
| -rw-r--r-- | src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java | 53 |
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 |
