summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx
diff options
context:
space:
mode:
authorNils Schwabe2014-04-09 15:40:16 +0200
committerNils Schwabe2014-04-09 15:40:16 +0200
commitb30da021d491ace47c1b6a7b5ad11e595a2399c9 (patch)
treea90ccc1f2a7833df6727c181a885cc56dc2e463a /src/main/java/org/openslx
parentfixed config dir (examples etc) (diff)
downloadmasterserver-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')
-rw-r--r--src/main/java/org/openslx/imagemaster/App.java83
-rw-r--r--src/main/java/org/openslx/imagemaster/Globals.java7
-rw-r--r--src/main/java/org/openslx/imagemaster/db/DbSatellite.java2
-rw-r--r--src/main/java/org/openslx/imagemaster/db/LDAPUser.java2
-rw-r--r--src/main/java/org/openslx/imagemaster/server/ApiServer.java1
-rw-r--r--src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java54
-rw-r--r--src/main/java/org/openslx/imagemaster/server/MasterFtplet.java61
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;
+ }
+
+}