summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java
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/ServerSessionManager.java
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/ServerSessionManager.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java69
1 files changed, 69 insertions, 0 deletions
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();
+ }
+
+}