From 298f7ca2b7e8861a70e31da237a775f45d77b597 Mon Sep 17 00:00:00 2001 From: Nils Schwabe Date: Thu, 10 Apr 2014 15:49:18 +0200 Subject: tried to implement the server auth. (did not work) added ImageProcessor to process image after ftp upload --- .../org/openslx/imagemaster/server/ApiServer.java | 3 ++ .../openslx/imagemaster/server/ImageProcessor.java | 14 +++++++++ .../imagemaster/server/MasterFtpServer.java | 2 +- .../openslx/imagemaster/server/MasterFtplet.java | 24 +++++++-------- .../serversession/ServerAuthenticator.java | 34 +++++++++++++++++----- .../thrift/server/ImageServerHandler.java | 2 +- 6 files changed, 57 insertions(+), 22 deletions(-) create mode 100644 src/main/java/org/openslx/imagemaster/server/ImageProcessor.java (limited to 'src/main/java/org/openslx/imagemaster') diff --git a/src/main/java/org/openslx/imagemaster/server/ApiServer.java b/src/main/java/org/openslx/imagemaster/server/ApiServer.java index 2c49a0d..258c490 100644 --- a/src/main/java/org/openslx/imagemaster/server/ApiServer.java +++ b/src/main/java/org/openslx/imagemaster/server/ApiServer.java @@ -103,6 +103,9 @@ public class ApiServer { * * 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); diff --git a/src/main/java/org/openslx/imagemaster/server/ImageProcessor.java b/src/main/java/org/openslx/imagemaster/server/ImageProcessor.java new file mode 100644 index 0000000..e10ea21 --- /dev/null +++ b/src/main/java/org/openslx/imagemaster/server/ImageProcessor.java @@ -0,0 +1,14 @@ +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/MasterFtpServer.java b/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java index 9ec5cf7..973c768 100644 --- a/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java +++ b/src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java @@ -19,7 +19,7 @@ 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 static Logger log = Logger.getLogger( MasterFtpServer.class ); private FtpServer server; private UserManager userManager; diff --git a/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java b/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java index 73d69d2..a1b9a90 100644 --- a/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java +++ b/src/main/java/org/openslx/imagemaster/server/MasterFtplet.java @@ -10,29 +10,25 @@ 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); + private static Logger log = Logger.getLogger(Ftplet.class); @Override public void init(FtpletContext ftpletContext) throws FtpException { - // TODO Auto-generated method stub - + // not used } @Override public void destroy() { - // TODO Auto-generated method stub - + // not used } @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(); + if (session.getUser() != null) { + log.info(session.getUser().getName() + " issued command: " + request.getRequestLine()); } return null; } @@ -40,21 +36,25 @@ public class MasterFtplet implements Ftplet { @Override public FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply) throws FtpException, IOException { - // TODO Auto-generated method stub + 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]); + } return null; } @Override public FtpletResult onConnect(FtpSession session) throws FtpException, IOException { - // TODO Auto-generated method stub + // not used return null; } @Override public FtpletResult onDisconnect(FtpSession session) throws FtpException, IOException { - // TODO Auto-generated method stub + // not used return null; } diff --git a/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java b/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java index b0fd72f..d57eb36 100644 --- a/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java +++ b/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java @@ -2,28 +2,37 @@ package org.openslx.imagemaster.serversession; import java.util.HashMap; +import org.apache.log4j.Logger; import org.apache.thrift.TException; import org.openslx.imagemaster.thrift.iface.AuthenticationException; import org.openslx.imagemaster.util.RandomString; public class ServerAuthenticator { + private static Logger log = Logger.getLogger(ServerAuthenticator.class); // map of currently authenticating servers private static HashMap authenticatingServers = new HashMap(); + /** * Start the server authentification. - * @param organization the organization of the server + * + * @param organization + * the organization of the server * @return encrypted random string */ public static String startServerAuthentication(String organization) { String secret = RandomString.generate(100, false); synchronized (authenticatingServers) { authenticatingServers.put(organization, secret); + log.info("Server of organinzation '" + organization + + "' starts to authenticate. And got string: '" + secret + + "'"); } return secret; } - + /** * Authenticate with the challengeResponse + * * @param organization * @param address * @param challengeResponse @@ -31,14 +40,23 @@ public class ServerAuthenticator { * @throws AuthenticationException * @throws TException */ - public static ServerUser serverAuthenticate(String organization, String address, - String challengeResponse) throws AuthenticationException, - TException { + public static ServerUser serverAuthenticate(String organization, + String address, String challengeResponse) + throws AuthenticationException, TException { /* - * TODO: - * Decrypt the given challengeResponse and check whether it was right or not. - * Authenticate server if so. + * TODO: Decrypt the given challengeResponse and check whether it was + * right or not. Authenticate server if so. */ + if (!challengeResponse.equals(authenticatingServers.get(organization))) { + throw new AuthenticationException(); + } + + log.info("Server of organinzation '" + organization + + " authenticated. With response: '" + challengeResponse + + "'"); + + authenticatingServers.remove(organization); + return new ServerUser(organization, address); } } diff --git a/src/main/java/org/openslx/imagemaster/thrift/server/ImageServerHandler.java b/src/main/java/org/openslx/imagemaster/thrift/server/ImageServerHandler.java index 858f682..096f63f 100644 --- a/src/main/java/org/openslx/imagemaster/thrift/server/ImageServerHandler.java +++ b/src/main/java/org/openslx/imagemaster/thrift/server/ImageServerHandler.java @@ -15,7 +15,7 @@ import org.openslx.imagemaster.thrift.iface.UserInfo; public class ImageServerHandler implements ImageServer.Iface { - private static Logger log = Logger.getLogger( ApiServer.class ); + private static Logger log = Logger.getLogger( ImageServerHandler.class ); @Override public boolean ping() throws TException -- cgit v1.2.3-55-g7522