diff options
author | Nils Schwabe | 2014-04-09 15:40:16 +0200 |
---|---|---|
committer | Nils Schwabe | 2014-04-09 15:40:16 +0200 |
commit | b30da021d491ace47c1b6a7b5ad11e595a2399c9 (patch) | |
tree | a90ccc1f2a7833df6727c181a885cc56dc2e463a /src/main/java/org/openslx/imagemaster | |
parent | fixed config dir (examples etc) (diff) | |
download | masterserver-b30da021d491ace47c1b6a7b5ad11e595a2399c9.tar.gz masterserver-b30da021d491ace47c1b6a7b5ad11e595a2399c9.tar.xz masterserver-b30da021d491ace47c1b6a7b5ad11e595a2399c9.zip |
Added Globals.java and global properties
Added Ftpserver test
Created some ftp testign in App.java (needs to be removed)
Added Ftplet to trigger on FTP Commands
Diffstat (limited to 'src/main/java/org/openslx/imagemaster')
7 files changed, 179 insertions, 31 deletions
diff --git a/src/main/java/org/openslx/imagemaster/App.java b/src/main/java/org/openslx/imagemaster/App.java index 9a5fd15..62e06a4 100644 --- a/src/main/java/org/openslx/imagemaster/App.java +++ b/src/main/java/org/openslx/imagemaster/App.java @@ -1,5 +1,10 @@ package org.openslx.imagemaster; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.security.SecureRandom; import java.util.ArrayList; import java.util.List; @@ -7,33 +12,78 @@ import org.apache.log4j.Logger; import org.openslx.imagemaster.server.MasterFtpServer; import org.openslx.imagemaster.thrift.server.BinaryListener; -/** - * Hello world! - * - */ -public class App -{ - private static Logger log = Logger.getLogger( App.class ); +public class App { + private static Logger log = Logger.getLogger(App.class); private static List<Thread> servers = new ArrayList<>(); - public static void main( String[] args ) - { + public static void main(String[] args) { // Init logging - log.info( "Starting Application" ); - + 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); + } 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"); + } + // Create binary listener Thread t; t = new Thread(new BinaryListener(), "BinaryListener"); servers.add(t); t.start(); - + // Create Ftp Server Thread f; - f = new Thread(new MasterFtpServer(2221, "admin", "admin", "/home/nils/ftp"), "FtpServer"); + MasterFtpServer ftpServer = new MasterFtpServer(2221, "admin", + "SI*HoZCC!]V)p>B2", Globals.properties.getProperty("ftp_base_dir")); + f = new Thread(ftpServer, "FtpServer"); servers.add(f); f.start(); + /* + * FTP Users can be added later with: + * ftpServer.addUser(username, password, ftp_root); + * + * And removed with: + * removeUser(username); + */ + + //////////////////////////////////////////////// + SecureRandom random = new SecureRandom(); + String lettersP="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890+-$%&/()=?@"; + String lettersU="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + String generatedUser = ""; + String generatedPass = ""; + for (int i = 0; i < 16; i++) { + int index = (int)(random.nextDouble()*lettersU.length()); + generatedUser += lettersU.substring(index, index + 1); + index = (int)(random.nextDouble()*lettersP.length()); + generatedPass += lettersP.substring(index, index + 1); + } + String dir = Globals.properties.getProperty("ftp_base_dir") + "/" + generatedUser + "/"; + if (new File(dir).mkdir()) { + ftpServer.addUser(generatedUser, generatedPass, dir, true); + log.info("Generated user/pass: " + generatedUser + "\t" + generatedPass + "\n with home dir: " + dir); + } + //////////////////////////////////////////////// + // Run more servers // ... // Wait for all servers to die @@ -43,11 +93,14 @@ public class App try { wait.join(); success = true; - } catch ( InterruptedException e ) { + } catch (InterruptedException e) { // Do nothing... } } } - log.info( "All Servers shut down, exiting..." ); + + ftpServer.removeUser(generatedUser); + + log.info("All Servers shut down, exiting..."); } } diff --git a/src/main/java/org/openslx/imagemaster/Globals.java b/src/main/java/org/openslx/imagemaster/Globals.java new file mode 100644 index 0000000..0cca10d --- /dev/null +++ b/src/main/java/org/openslx/imagemaster/Globals.java @@ -0,0 +1,7 @@ +package org.openslx.imagemaster; + +import java.util.Properties; + +public class Globals { + public static final Properties properties = new Properties(); +} diff --git a/src/main/java/org/openslx/imagemaster/db/DbSatellite.java b/src/main/java/org/openslx/imagemaster/db/DbSatellite.java index 037dfaa..7e9ef54 100644 --- a/src/main/java/org/openslx/imagemaster/db/DbSatellite.java +++ b/src/main/java/org/openslx/imagemaster/db/DbSatellite.java @@ -10,7 +10,7 @@ public class DbSatellite { this.name = name; } - public static DbSatellite createDbSatellite(String organization) { + public static DbSatellite fromOrganization(String organization) { return MySQL .findUniqueOrNull( DbSatellite.class, diff --git a/src/main/java/org/openslx/imagemaster/db/LDAPUser.java b/src/main/java/org/openslx/imagemaster/db/LDAPUser.java index ae8d38d..1034116 100644 --- a/src/main/java/org/openslx/imagemaster/db/LDAPUser.java +++ b/src/main/java/org/openslx/imagemaster/db/LDAPUser.java @@ -104,7 +104,7 @@ public class LDAPUser extends User { lastName = entry.get("sn").getString(); eMail = entry.get("rufPreferredMail").getString(); // get the satellite address from db - DbSatellite dbSatellite = DbSatellite.createDbSatellite(organization); + DbSatellite dbSatellite = DbSatellite.fromOrganization(organization); if (dbSatellite != null) { satelliteAddress = dbSatellite.getAddress(); } else { diff --git a/src/main/java/org/openslx/imagemaster/server/ApiServer.java b/src/main/java/org/openslx/imagemaster/server/ApiServer.java index dd0ec9e..ba15623 100644 --- a/src/main/java/org/openslx/imagemaster/server/ApiServer.java +++ b/src/main/java/org/openslx/imagemaster/server/ApiServer.java @@ -26,7 +26,6 @@ public class ApiServer { @SuppressWarnings( "unused" ) private static Logger log = Logger.getLogger( ApiServer.class ); - // /** * Request for authentication diff --git a/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java b/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java index f54b80d..9ec5cf7 100644 --- a/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java +++ b/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java @@ -2,23 +2,28 @@ package org.openslx.imagemaster.server; import java.io.File; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import org.apache.ftpserver.FtpServer; import org.apache.ftpserver.FtpServerFactory; import org.apache.ftpserver.ftplet.Authority; import org.apache.ftpserver.ftplet.FtpException; +import org.apache.ftpserver.ftplet.Ftplet; import org.apache.ftpserver.ftplet.UserManager; import org.apache.ftpserver.listener.ListenerFactory; import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory; 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; public class MasterFtpServer implements Runnable { + private static Logger log = Logger.getLogger( ApiServer.class ); private FtpServer server; + private UserManager userManager; - public MasterFtpServer(int port, String username, String password, String ftproot) { + public MasterFtpServer(int port, String adminUsername, String adminPassword, String ftproot) { FtpServerFactory serverFactory = new FtpServerFactory(); ListenerFactory factory = new ListenerFactory(); // set the port of the listener @@ -27,18 +32,28 @@ public class MasterFtpServer implements Runnable { // replace the default listener serverFactory.addListener("default", factory.createListener()); - // create new user - serverFactory.setUserManager(addUser(username, password, ftproot)); + // create user manager + 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); + + // add the Ftplet + HashMap<String, Ftplet> map = new HashMap<String, Ftplet>(); + map.put("Ftplet1", new MasterFtplet()); + serverFactory.setFtplets(map); // start the server - server = serverFactory.createServer(); + server = serverFactory.createServer(); } - private UserManager addUser(final String username, final String password, final String ftproot) { - PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory(); - userManagerFactory.setFile(new File("config/ftp.properties")); - userManagerFactory.setPasswordEncryptor(new SaltedPasswordEncryptor()); - UserManager um = userManagerFactory.createUserManager(); + public boolean addUser(final String username, final String password, final String ftproot, final boolean writeAccess) { + // TODO: enable SSL + boolean result = true; BaseUser user = new BaseUser(); user.setName(username); @@ -46,21 +61,34 @@ public class MasterFtpServer implements Runnable { user.setHomeDirectory(ftproot); List<Authority> authorities = new ArrayList<Authority>(); - authorities.add(new WritePermission()); + if (writeAccess) authorities.add(new WritePermission()); user.setAuthorities(authorities); try { - um.save(user); + userManager.save(user); } catch (FtpException e) { - e.printStackTrace(); + result = false; } - return um; + return result; + } + + public boolean removeUser(final String username) { + boolean result = true; + + try { + userManager.delete(username); + } catch (FtpException e) { + result = false; + } + + return result; } @Override public void run() { try { + log.info( "Starting FTP Sever" ); server.start(); } 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 new file mode 100644 index 0000000..73d69d2 --- /dev/null +++ b/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java @@ -0,0 +1,61 @@ +package org.openslx.imagemaster.server; + +import java.io.IOException; + +import org.apache.ftpserver.ftplet.FtpException; +import org.apache.ftpserver.ftplet.FtpReply; +import org.apache.ftpserver.ftplet.FtpRequest; +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.log4j.Logger; +import org.openslx.imagemaster.App; + +public class MasterFtplet implements Ftplet { + private static Logger log = Logger.getLogger(App.class); + + @Override + public void init(FtpletContext ftpletContext) throws FtpException { + // TODO Auto-generated method stub + + } + + @Override + public void destroy() { + // TODO Auto-generated method stub + + } + + @Override + public FtpletResult beforeCommand(FtpSession session, FtpRequest request) + throws FtpException, IOException { + if (session.getUser() != null && request.getCommand() == "QUIT") { + // TODO: tell server that user finished uploading + String user = session.getUser().getName(); + } + return null; + } + + @Override + public FtpletResult afterCommand(FtpSession session, FtpRequest request, + FtpReply reply) throws FtpException, IOException { + // TODO Auto-generated method stub + return null; + } + + @Override + public FtpletResult onConnect(FtpSession session) throws FtpException, + IOException { + // TODO Auto-generated method stub + return null; + } + + @Override + public FtpletResult onDisconnect(FtpSession session) throws FtpException, + IOException { + // TODO Auto-generated method stub + return null; + } + +} |