diff options
author | Nils Schwabe | 2014-04-10 16:34:34 +0200 |
---|---|---|
committer | Nils Schwabe | 2014-04-10 16:34:34 +0200 |
commit | 3e35775012d2800d53d83ebe5083121479d83720 (patch) | |
tree | eafcb93cdffc15f48a918f7a599948cf4a769e5d | |
parent | Merge branch 'master' of git.openslx.org:bwlp/masterserver (diff) | |
download | masterserver-3e35775012d2800d53d83ebe5083121479d83720.tar.gz masterserver-3e35775012d2800d53d83ebe5083121479d83720.tar.xz masterserver-3e35775012d2800d53d83ebe5083121479d83720.zip |
Added some functionallity to the ImageProcessor.
Database using is missing!
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) { |