diff options
author | Nils Schwabe | 2014-04-10 11:58:34 +0200 |
---|---|---|
committer | Nils Schwabe | 2014-04-10 11:58:34 +0200 |
commit | d5e1e558f22de9e20fbee6c1e8a884e65fa7cbbc (patch) | |
tree | c9895bd99ed579d421343b41e9611da23eb1a4c1 /src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java | |
parent | added new thrift methods: (diff) | |
download | masterserver-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.java | 69 |
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(); + } + +} |