summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/serversession
diff options
context:
space:
mode:
authorNils Schwabe2014-04-10 11:58:34 +0200
committerNils Schwabe2014-04-10 11:58:34 +0200
commitd5e1e558f22de9e20fbee6c1e8a884e65fa7cbbc (patch)
treec9895bd99ed579d421343b41e9611da23eb1a4c1 /src/main/java/org/openslx/imagemaster/serversession
parentadded new thrift methods: (diff)
downloadmasterserver-d5e1e558f22de9e20fbee6c1e8a884e65fa7cbbc.tar.gz
masterserver-d5e1e558f22de9e20fbee6c1e8a884e65fa7cbbc.tar.xz
masterserver-d5e1e558f22de9e20fbee6c1e8a884e65fa7cbbc.zip
Added authentification for uni/hs server
--> added serversession, serversessionmanager --> missing implementation for server authentication
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/serversession')
-rw-r--r--src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java40
-rw-r--r--src/main/java/org/openslx/imagemaster/serversession/ServerSession.java35
-rw-r--r--src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java69
-rw-r--r--src/main/java/org/openslx/imagemaster/serversession/ServerUser.java11
4 files changed, 155 insertions, 0 deletions
diff --git a/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java b/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java
new file mode 100644
index 0000000..b16766a
--- /dev/null
+++ b/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java
@@ -0,0 +1,40 @@
+package org.openslx.imagemaster.serversession;
+
+import java.util.HashMap;
+
+import org.apache.thrift.TException;
+import org.openslx.imagemaster.thrift.iface.AuthenticationException;
+import org.openslx.imagemaster.util.RandomString;
+
+public class ServerAuthenticator {
+ private static HashMap<String, String> authenticatingServers = new HashMap<String, String>();
+ /**
+ * Start the server authentification.
+ * @param organization the organization of the server
+ * @return encrypted random string
+ */
+ public static String startServerAuthentication(String organization) {
+ /*
+ * TODO:
+ * Create random string, send it to server.
+ * Remember organization for later authentification.
+ */
+ String secret = RandomString.generate(100, false);
+ synchronized (authenticatingServers) {
+ authenticatingServers.put(organization, secret);
+ }
+ return secret;
+ }
+
+
+ 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.
+ */
+ return new ServerUser(organization, address);
+ }
+}
diff --git a/src/main/java/org/openslx/imagemaster/serversession/ServerSession.java b/src/main/java/org/openslx/imagemaster/serversession/ServerSession.java
new file mode 100644
index 0000000..e15f863
--- /dev/null
+++ b/src/main/java/org/openslx/imagemaster/serversession/ServerSession.java
@@ -0,0 +1,35 @@
+package org.openslx.imagemaster.serversession;
+
+public class ServerSession {
+
+ private static final long TIMEOUT = 600L * 1000L; // TODO: config
+
+ private long timeOut = 0;
+ private final ServerUser serverUser;
+
+ public ServerSession(final ServerUser serverUser)
+ {
+ this.serverUser = serverUser;
+ this.timeOut = System.currentTimeMillis() + TIMEOUT;
+ }
+
+ public synchronized void refresh()
+ {
+ if ( timedOut() )
+ return; // Don't allow refreshing timed out session
+ this.timeOut = System.currentTimeMillis() + TIMEOUT;
+ }
+
+ public synchronized boolean timedOut()
+ {
+ return System.currentTimeMillis() > this.timeOut;
+ }
+
+ public String getOrganization() {
+ return serverUser.organization;
+ }
+
+ public String getAddress() {
+ return serverUser.address;
+ }
+}
diff --git a/src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java b/src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java
new file mode 100644
index 0000000..1fd4322
--- /dev/null
+++ b/src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java
@@ -0,0 +1,69 @@
+package org.openslx.imagemaster.serversession;
+
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+import org.openslx.imagemaster.session.SessionManager;
+import org.openslx.imagemaster.thrift.iface.ServerSessionData;
+import org.openslx.imagemaster.util.Hash;
+
+public class ServerSessionManager {
+
+ private static Logger log = Logger.getLogger( SessionManager.class );
+
+ // Map of currently known sessions
+ private static final Map<String, ServerSession> serverSessions = new LinkedHashMap<String, ServerSession>();
+ private static final Thread gcThread;
+
+ public static ServerSessionData addSession( ServerSession serverSession )
+ {
+ final String sessionId = Hash.sha256( UUID.randomUUID().toString() );
+
+ synchronized ( serverSessions ) {
+ serverSessions.put( sessionId, serverSession );
+ }
+ return new ServerSessionData( sessionId );
+ }
+
+ public static ServerSession getSession( String sessionId )
+ {
+ final ServerSession serverSession;
+ synchronized ( serverSessions ) {
+ serverSession = serverSessions.get( sessionId );
+ }
+ if ( serverSession == null || serverSession.timedOut() ) {
+ return null;
+ }
+ return serverSession;
+ }
+
+ static {
+ gcThread = new Thread( new Runnable() {
+ @Override
+ public void run()
+ {
+ for ( ;; ) {
+ try {
+ Thread.sleep( 1800L * 1000L );
+ } catch ( InterruptedException e ) {
+ }
+ synchronized ( serverSessions ) {
+ Iterator<ServerSession> it = serverSessions.values().iterator();
+ while ( it.hasNext() ) {
+ final ServerSession s = it.next();
+ if ( s.timedOut() ) {
+ log.debug( "Removing old session of " + s.getOrganization() );
+ it.remove();
+ }
+ }
+ }
+ }
+ }
+ } );
+ gcThread.start();
+ }
+
+}
diff --git a/src/main/java/org/openslx/imagemaster/serversession/ServerUser.java b/src/main/java/org/openslx/imagemaster/serversession/ServerUser.java
new file mode 100644
index 0000000..48815a8
--- /dev/null
+++ b/src/main/java/org/openslx/imagemaster/serversession/ServerUser.java
@@ -0,0 +1,11 @@
+package org.openslx.imagemaster.serversession;
+
+public class ServerUser {
+ public final String organization, address;
+
+ public ServerUser(String organization, String address) {
+ this.organization = organization;
+ this.address = address;
+ }
+
+}