summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNils Schwabe2014-04-10 15:49:18 +0200
committerNils Schwabe2014-04-10 15:49:18 +0200
commit298f7ca2b7e8861a70e31da237a775f45d77b597 (patch)
treec838288c443d976251a216f6a9318f4860907785
parentadded some comments (diff)
downloadmasterserver-298f7ca2b7e8861a70e31da237a775f45d77b597.tar.gz
masterserver-298f7ca2b7e8861a70e31da237a775f45d77b597.tar.xz
masterserver-298f7ca2b7e8861a70e31da237a775f45d77b597.zip
tried to implement the server auth. (did not work)
added ImageProcessor to process image after ftp upload
-rw-r--r--src/main/java/org/openslx/imagemaster/server/ApiServer.java3
-rw-r--r--src/main/java/org/openslx/imagemaster/server/ImageProcessor.java14
-rw-r--r--src/main/java/org/openslx/imagemaster/server/MasterFtpServer.java2
-rw-r--r--src/main/java/org/openslx/imagemaster/server/MasterFtplet.java24
-rw-r--r--src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java34
-rw-r--r--src/main/java/org/openslx/imagemaster/thrift/server/ImageServerHandler.java2
-rw-r--r--src/test/java/org/openslx/imagemaster/AppTest.java188
7 files changed, 191 insertions, 76 deletions
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<String, String> authenticatingServers = new HashMap<String, String>();
+
/**
* 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
diff --git a/src/test/java/org/openslx/imagemaster/AppTest.java b/src/test/java/org/openslx/imagemaster/AppTest.java
index 6c1350c..e978478 100644
--- a/src/test/java/org/openslx/imagemaster/AppTest.java
+++ b/src/test/java/org/openslx/imagemaster/AppTest.java
@@ -18,7 +18,10 @@ import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
+import org.openslx.imagemaster.thrift.iface.ImageData;
import org.openslx.imagemaster.thrift.iface.ImageServer.Client;
+import org.openslx.imagemaster.thrift.iface.FtpCredentials;
+import org.openslx.imagemaster.thrift.iface.ServerSessionData;
import org.openslx.imagemaster.thrift.iface.SessionData;
import org.openslx.imagemaster.thrift.iface.UserInfo;
@@ -54,10 +57,87 @@ 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
+ * Test the server authentification.
*/
- public void testAuthentication() {
+ public void testServerAuth() {
TTransport transport = new TSocket("localhost", 9090);
try {
transport.open();
@@ -73,61 +153,61 @@ public class AppTest
} 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);
+ String stringToEncrypt = client.startServerAuthentication("Test Organization");
+ System.out.println("Authentication started. Got string: " + stringToEncrypt);
+
+ String response = stringToEncrypt;
+
+ 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);
+ System.out.println("Got FTP credentials. User: " + ftpCredentials.username + ", password: " + ftpCredentials.password);
+
+ FTPClient FtpClient = new FTPClient();
+ String host = "localhost";
+ int port = 2221;
+ String user = ftpCredentials.username;
+ String password = ftpCredentials.password;
+ String fileName = "/home/nils/file_to_upload.bin";
+
+ try {
+ FtpClient.connect(host, port);
+ System.out.println("Connected to " + host + ":" + port + ". Reply code: " + FtpClient.getReplyCode());
+ if ( !FTPReply.isPositiveCompletion( FtpClient.getReplyCode() ) ) {
+ ConnectException ce = new ConnectException("No positive reply code.");
+ throw ce;
+ }
+ if ( !FtpClient.login(user, password) ) {
+ ConnectException ce = new ConnectException("Could not login.");
+ throw ce;
+ }
+ System.out.println("Logged in with user: " + user);
+ FtpClient.setFileType(FTP.BINARY_FILE_TYPE);
+ FtpClient.enterLocalPassiveMode();
+ System.out.println("Entered PASSIVE MODE");
+ InputStream input = new FileInputStream(fileName);
+ System.out.print("Starting file upload ... ");
+ FtpClient.storeFile("maschine.vmdk", input);
+ System.out.println("done.");
+ FtpClient.noop();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (FtpClient.isConnected()) {
+ try {
+ FtpClient.logout();
+ FtpClient.disconnect();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
} 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();
- }
- }
- }
- }
}