summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNils Schwabe2014-04-10 16:34:34 +0200
committerNils Schwabe2014-04-10 16:34:34 +0200
commit3e35775012d2800d53d83ebe5083121479d83720 (patch)
treeeafcb93cdffc15f48a918f7a599948cf4a769e5d
parentMerge branch 'master' of git.openslx.org:bwlp/masterserver (diff)
downloadmasterserver-3e35775012d2800d53d83ebe5083121479d83720.tar.gz
masterserver-3e35775012d2800d53d83ebe5083121479d83720.tar.xz
masterserver-3e35775012d2800d53d83ebe5083121479d83720.zip
Added some functionallity to the ImageProcessor.
Database using is missing!
-rw-r--r--src/main/java/org/openslx/imagemaster/db/ImageProcessor.java57
-rw-r--r--src/main/java/org/openslx/imagemaster/server/ApiServer.java21
-rw-r--r--src/main/java/org/openslx/imagemaster/server/ImageProcessor.java14
-rw-r--r--src/main/java/org/openslx/imagemaster/server/MasterFtplet.java20
-rw-r--r--src/test/java/org/openslx/imagemaster/AppTest.java156
5 files changed, 158 insertions, 110 deletions
diff --git a/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java b/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java
new file mode 100644
index 0000000..804e4b9
--- /dev/null
+++ b/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java
@@ -0,0 +1,57 @@
+package org.openslx.imagemaster.db;
+
+import java.io.File;
+import java.util.HashMap;
+
+import org.apache.log4j.Logger;
+import org.openslx.imagemaster.Globals;
+import org.openslx.imagemaster.thrift.iface.ImageData;
+
+public class ImageProcessor {
+
+ private static Logger log = Logger.getLogger(ImageProcessor.class);
+ private static HashMap<String, ImageData> images = new HashMap<>();
+
+ public static void processImageAfterUpload(String username, String filename) {
+ /*
+ * TODO: Process the image after download
+ */
+ log.info("Will now process '" + filename + "' from user '" + username
+ + "'");
+
+ // look for database entry, update it and move image to right location
+ String oldFileName = Globals.properties.getProperty("ftp_base_dir") + "/" + username
+ + "/" + filename;
+ File imageFile = new File(oldFileName);
+ if (!imageFile.exists()) {
+ // image file does not exist??
+ return;
+ }
+ String newFileName = Globals.properties.getProperty("image_dir") + "/" + images.get(username).imageName;
+ imageFile.renameTo( new File(newFileName) );
+ log.info("Moved file from " + oldFileName + " to " + newFileName );
+
+ File tempUserDir = new File (Globals.properties.getProperty("ftp_base_dir") + "/" + username);
+ tempUserDir.delete();
+ }
+
+ /**
+ * Try to add imageData to db
+ *
+ * @param imageData
+ * the data for the image to add
+ * @return false if submit fails
+ */
+ public static boolean addImageDataToProcess(ImageData imageData,
+ String username) {
+ /*
+ * TODO:
+ * check if imagedata is correct
+ * check if image is already in db
+ */
+
+ // if everything went fine, add image to processing list
+ images.put(username, imageData);
+ return true;
+ }
+}
diff --git a/src/main/java/org/openslx/imagemaster/server/ApiServer.java b/src/main/java/org/openslx/imagemaster/server/ApiServer.java
index 258c490..7a24c43 100644
--- a/src/main/java/org/openslx/imagemaster/server/ApiServer.java
+++ b/src/main/java/org/openslx/imagemaster/server/ApiServer.java
@@ -6,6 +6,7 @@ import org.apache.log4j.Logger;
import org.apache.thrift.TException;
import org.openslx.imagemaster.Globals;
import org.openslx.imagemaster.db.DbSatellite;
+import org.openslx.imagemaster.db.ImageProcessor;
import org.openslx.imagemaster.serversession.ServerAuthenticator;
import org.openslx.imagemaster.serversession.ServerSession;
import org.openslx.imagemaster.serversession.ServerSessionManager;
@@ -91,24 +92,17 @@ public class ApiServer {
public static FtpCredentials submitImage(ImageData imageDescription,
ServerSessionData serverSessionData) throws AuthorizationException,
TException {
- /*
- * TODO:
- * Check if session is ok.
- * create and return FtpCredentials
- */
-
- /*
- * FTP Users can be added later with: ftpServer.addUser(username,
- * password, ftp_root);
- *
- * And removed with: removeUser(username);
- */
if (ServerSessionManager.getSession(serverSessionData.sessionId) == null) {
throw new AuthenticationException(AuthenticationError.GENERIC_ERROR, "No valid serverSessionData");
}
-
+
String generatedUser = RandomString.generate(10, false);
String generatedPass = RandomString.generate(16, true);
+
+ if (!ImageProcessor.addImageDataToProcess(imageDescription, generatedUser)) {
+ throw new TException("ImageData is not valid. Does this image exist already?");
+ }
+
String dir = Globals.properties.getProperty("ftp_base_dir") + "/"
+ generatedUser + "/";
if (new File(dir).mkdir()) {
@@ -116,7 +110,6 @@ public class ApiServer {
log.info("Generated user/pass: " + generatedUser + "\t"
+ generatedPass + "\n with home dir: " + dir);
}
- // TODO: remove old user
return new FtpCredentials(generatedUser, generatedPass);
}
diff --git a/src/main/java/org/openslx/imagemaster/server/ImageProcessor.java b/src/main/java/org/openslx/imagemaster/server/ImageProcessor.java
deleted file mode 100644
index e10ea21..0000000
--- a/src/main/java/org/openslx/imagemaster/server/ImageProcessor.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.openslx.imagemaster.server;
-
-import org.apache.log4j.Logger;
-
-public class ImageProcessor {
-
- private static Logger log = Logger.getLogger(ImageProcessor.class);
- public static void processImageAfterUpload(String username, String filename) {
- /*
- * TODO: Process the image after download
- */
-
- }
-}
diff --git a/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java b/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java
index a1b9a90..479729d 100644
--- a/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java
+++ b/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java
@@ -9,14 +9,17 @@ 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.ftpserver.ftplet.UserManager;
import org.apache.log4j.Logger;
+import org.openslx.imagemaster.db.ImageProcessor;
public class MasterFtplet implements Ftplet {
private static Logger log = Logger.getLogger(Ftplet.class);
+ private UserManager userManager;
@Override
public void init(FtpletContext ftpletContext) throws FtpException {
- // not used
+ userManager = ftpletContext.getUserManager();
}
@Override
@@ -37,9 +40,18 @@ public class MasterFtplet implements Ftplet {
public FtpletResult afterCommand(FtpSession session, FtpRequest request,
FtpReply reply) throws FtpException, IOException {
if (session.getUser() != null) {
- log.info(session.getUser().getName() + " is done with command: " + request.getRequestLine());
- // TODO: delete temporary user
- ImageProcessor.processImageAfterUpload(session.getUser().getName(), request.getRequestLine().split(" ")[1]);
+ String username = session.getUser().getName();
+ String command = request.getRequestLine();
+ log.info(username + " is done with command: " + command);
+ if (request.getCommand().equals("STOR")) {
+ try {
+ userManager.delete(username);
+ } catch (FtpException e) {
+ } finally {
+ log.info("Stored file and deleted user: '" + username + "'");
+ ImageProcessor.processImageAfterUpload(username, command.split(" ")[1]);
+ }
+ }
}
return null;
}
diff --git a/src/test/java/org/openslx/imagemaster/AppTest.java b/src/test/java/org/openslx/imagemaster/AppTest.java
index e978478..6fc478a 100644
--- a/src/test/java/org/openslx/imagemaster/AppTest.java
+++ b/src/test/java/org/openslx/imagemaster/AppTest.java
@@ -57,82 +57,82 @@ public class AppTest
assertTrue( true );
}
-// /**
-// * Test the authentication
-// */
-// public void testAuthentication() {
-// TTransport transport = new TSocket("localhost", 9090);
-// try {
-// transport.open();
-// } catch (TTransportException e) {
-// assertTrue("Could not connect", false);
-// }
-//
-// TProtocol protocol = new TBinaryProtocol(transport);
-// Client client = new Client(protocol);
-//
-// try {
-// assertTrue("Could not ping server", client.ping());
-// } catch (TException e) {
-// assertTrue("Could not ping server", false);
-// }
-// try {
-// SessionData sessionData = client.authenticate("ns202", "xxxxxxxxxxxx");
-// UserInfo userInfo = client.getUserFromToken(sessionData.getAuthToken());
-// System.out.println("User info: " + userInfo);
-// System.out.println("Server address from MySQL: " + sessionData.serverAddress);
-// } catch (TException e) {
-// e.printStackTrace();
-// assertTrue("Could not login", false);
-// }
-// }
-//
-// /**
-// * Test FTP connection
-// */
-// public void testFtpConnection() {
-// FTPClient client = new FTPClient();
-// String host = "localhost";
-// int port = 2221;
-// String user = "admin";
-// String password = "SI*HoZCC!]V)p>B2";
-// String fileName = "/home/nils/file_to_upload.bin";
-//
-// try {
-// client.connect(host, port);
-// System.out.println("Connected to " + host + ":" + port + ". Reply code: " + client.getReplyCode());
-// if ( !FTPReply.isPositiveCompletion( client.getReplyCode() ) ) {
-// ConnectException ce = new ConnectException("No positive reply code.");
-// throw ce;
-// }
-// if ( !client.login(user, password) ) {
-// ConnectException ce = new ConnectException("Could not login.");
-// throw ce;
-// }
-// System.out.println("Logged in with user: " + user);
-// client.setFileType(FTP.BINARY_FILE_TYPE);
-// client.enterLocalPassiveMode();
-// System.out.println("Entered PASSIVE MODE");
-// InputStream input = new FileInputStream(fileName);
-// client.makeDirectory("myFolder");
-// System.out.println("Made directory 'myFolder'");
-// System.out.print("Starting file upload ... ");
-// client.storeFile("myFolder/myFile.txt", input);
-// System.out.println("done.");
-// client.noop();
-// } catch (IOException e) {
-// e.printStackTrace();
-// } finally {
-// if (client.isConnected()) {
-// try {
-// client.logout();
-// client.disconnect();
-// } catch (IOException e) {
-// e.printStackTrace();
-// }
-// }
-// }
-// }
+ /**
+ * Test the authentication
+ */
+ public void testAuthentication() {
+ TTransport transport = new TSocket("localhost", 9090);
+ try {
+ transport.open();
+ } catch (TTransportException e) {
+ assertTrue("Could not connect", false);
+ }
+
+ TProtocol protocol = new TBinaryProtocol(transport);
+ Client client = new Client(protocol);
+
+ try {
+ assertTrue("Could not ping server", client.ping());
+ } catch (TException e) {
+ assertTrue("Could not ping server", false);
+ }
+ try {
+ SessionData sessionData = client.authenticate("ns202", "xxxxxxxxxxxx");
+ UserInfo userInfo = client.getUserFromToken(sessionData.getAuthToken());
+ System.out.println("User info: " + userInfo);
+ System.out.println("Server address from MySQL: " + sessionData.serverAddress);
+ } catch (TException e) {
+ e.printStackTrace();
+ assertTrue("Could not login", false);
+ }
+ }
+
+ /**
+ * Test FTP connection
+ */
+ public void testFtpConnection() {
+ FTPClient client = new FTPClient();
+ String host = "localhost";
+ int port = 2221;
+ String user = "admin";
+ String password = "SI*HoZCC!]V)p>B2";
+ String fileName = "/home/nils/file_to_upload.bin";
+
+ try {
+ client.connect(host, port);
+ System.out.println("Connected to " + host + ":" + port + ". Reply code: " + client.getReplyCode());
+ if ( !FTPReply.isPositiveCompletion( client.getReplyCode() ) ) {
+ ConnectException ce = new ConnectException("No positive reply code.");
+ throw ce;
+ }
+ if ( !client.login(user, password) ) {
+ ConnectException ce = new ConnectException("Could not login.");
+ throw ce;
+ }
+ System.out.println("Logged in with user: " + user);
+ client.setFileType(FTP.BINARY_FILE_TYPE);
+ client.enterLocalPassiveMode();
+ System.out.println("Entered PASSIVE MODE");
+ InputStream input = new FileInputStream(fileName);
+ client.makeDirectory("myFolder");
+ System.out.println("Made directory 'myFolder'");
+ System.out.print("Starting file upload ... ");
+ client.storeFile("myFolder/myFile.txt", input);
+ System.out.println("done.");
+ client.noop();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (client.isConnected()) {
+ try {
+ client.logout();
+ client.disconnect();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
/**
* Test the server authentification.
@@ -163,7 +163,7 @@ public class AppTest
ServerSessionData data = client.serverAuthenticate("Test Organization", response);
System.out.println("Authenticated and got sid: '" + data.getSessionId() + "'");
- FtpCredentials ftpCredentials = client.submitImage(new ImageData("123", "maschine"), data);
+ FtpCredentials ftpCredentials = client.submitImage(new ImageData("123", "maschine.vmdk"), data);
System.out.println("Got FTP credentials. User: " + ftpCredentials.username + ", password: " + ftpCredentials.password);
FTPClient FtpClient = new FTPClient();
@@ -190,7 +190,7 @@ public class AppTest
System.out.println("Entered PASSIVE MODE");
InputStream input = new FileInputStream(fileName);
System.out.print("Starting file upload ... ");
- FtpClient.storeFile("maschine.vmdk", input);
+ FtpClient.storeFile("xcvb.vmdk", input);
System.out.println("done.");
FtpClient.noop();
} catch (IOException e) {