diff options
author | Simon Rettberg | 2015-09-08 17:38:07 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-09-08 17:38:07 +0200 |
commit | 3aa85cd588b745fb2537dbe748580d9c3b980133 (patch) | |
tree | 42d2c622b089c40b856d9ef09ed50eaa68407b68 /src/main/java/org/openslx/imagemaster/serversession | |
parent | Start adapting to new DB/Thrift model (diff) | |
download | masterserver-3aa85cd588b745fb2537dbe748580d9c3b980133.tar.gz masterserver-3aa85cd588b745fb2537dbe748580d9c3b980133.tar.xz masterserver-3aa85cd588b745fb2537dbe748580d9c3b980133.zip |
Compilable...
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/serversession')
4 files changed, 38 insertions, 64 deletions
diff --git a/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java b/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java index 88697bf..a7c7fde 100644 --- a/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java +++ b/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java @@ -6,10 +6,10 @@ import java.util.concurrent.ConcurrentHashMap; import org.apache.log4j.Logger; import org.apache.thrift.TException; +import org.openslx.bwlp.thrift.iface.AuthorizationError; +import org.openslx.bwlp.thrift.iface.TAuthorizationException; import org.openslx.encryption.AsymEncryptionHandler; -import org.openslx.imagemaster.db.DbSatellite; -import org.openslx.imagemaster.thrift.iface.AuthenticationError; -import org.openslx.imagemaster.thrift.iface.AuthenticationException; +import org.openslx.imagemaster.db.models.LocalSatellite; import org.openslx.imagemaster.util.RandomString; /** @@ -23,20 +23,20 @@ public class ServerAuthenticator /** * Servers currently doing authentication. Maps from organization to the challenge we sent. */ - private static Map<String, byte[]> authenticatingServers = new ConcurrentHashMap<>(); + private static Map<Integer, byte[]> authenticatingServers = new ConcurrentHashMap<>(); /** * Start the server authentification. * - * @param organization + * @param satelliteId * the organization of the server * @return encrypted random string */ - public static ByteBuffer startServerAuthentication( String organization ) + public static ByteBuffer startServerAuthentication( int satelliteId ) { byte[] secret = RandomString.generateBinary( 100 ); - authenticatingServers.put( organization, secret ); - log.info( "Server of organinzation '" + organization + authenticatingServers.put( satelliteId, secret ); + log.info( "Server of organinzation '" + satelliteId + "' starts to authenticate. And got string: '" + secret.length + "'" ); return ByteBuffer.wrap( secret ); @@ -48,25 +48,24 @@ public class ServerAuthenticator * @param organizationId Is already verified. * @param address * @param challengeResponse - * @return * @throws ServerAuthenticationException * @throws TException */ - public static ServerUser serverAuthenticate( DbSatellite satellite, ByteBuffer challengeResponse ) - throws AuthenticationException + public static void serverAuthenticate( LocalSatellite satellite, ByteBuffer challengeResponse ) + throws TAuthorizationException { byte[] encryptedBytes = new byte[ challengeResponse.remaining() ]; challengeResponse.get( encryptedBytes ); AsymEncryptionHandler verifier = new AsymEncryptionHandler( satellite.getPubkey() ); - if ( !verifier.verifyMessage( encryptedBytes, authenticatingServers.get( satellite.getOrganizationId() ) ) ) - throw new AuthenticationException( AuthenticationError.CHALLENGE_FAILED, "You failed the encryption challenge. private and public key don't seem to match." ); + if ( !verifier.verifyMessage( encryptedBytes, authenticatingServers.get( satellite.satelliteId ) ) ) { + throw new TAuthorizationException( AuthorizationError.CHALLENGE_FAILED, + "You failed the encryption challenge. private and public key don't seem to match." ); + } - log.info( "Server of organinzation " + satellite.getName() + " (" + satellite.getOrganizationId() + ") authenticated." ); + log.info( "Server '" + satellite.satelliteName + "' (" + satellite.organizationId + ") authenticated." ); - authenticatingServers.remove( satellite.getOrganizationId() ); - - return new ServerUser( satellite.getOrganizationId(), satellite.getAddress() ); + authenticatingServers.remove( satellite.organizationId ); } } diff --git a/src/main/java/org/openslx/imagemaster/serversession/ServerSession.java b/src/main/java/org/openslx/imagemaster/serversession/ServerSession.java index 28b143e..3b79c5d 100644 --- a/src/main/java/org/openslx/imagemaster/serversession/ServerSession.java +++ b/src/main/java/org/openslx/imagemaster/serversession/ServerSession.java @@ -1,6 +1,9 @@ package org.openslx.imagemaster.serversession; +import java.util.List; + import org.openslx.imagemaster.Globals; +import org.openslx.imagemaster.db.models.LocalSatellite; /** * Holds the session id of the server and manages the timeout. @@ -10,9 +13,9 @@ public class ServerSession private static final long TIMEOUT = Long.valueOf( Globals.getSessionTimeoutServer() ) * 1000L; private long timeOut = 0; - private final ServerUser serverUser; + private final LocalSatellite serverUser; - public ServerSession(final ServerUser serverUser) + public ServerSession(final LocalSatellite serverUser) { this.serverUser = serverUser; this.timeOut = System.currentTimeMillis() + TIMEOUT; @@ -30,13 +33,13 @@ public class ServerSession return System.currentTimeMillis() > this.timeOut; } - public String getOrganization() + public String getOrganizationId() { - return serverUser.organization; + return serverUser.organizationId; } - public String getAddress() + public List<String> getAddresses() { - return serverUser.address; + return serverUser.addresses; } } diff --git a/src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java b/src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java index 49e9ebe..4171ea4 100644 --- a/src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java +++ b/src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java @@ -4,22 +4,20 @@ import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.UUID; +import java.util.concurrent.TimeUnit; -import org.apache.log4j.Logger; -import org.openslx.imagemaster.session.SessionManager; -import org.openslx.imagemaster.thrift.iface.ServerSessionData; +import org.openslx.bwlp.thrift.iface.ServerSessionData; import org.openslx.imagemaster.util.Hash; +import org.openslx.util.QuickTimer; +import org.openslx.util.QuickTimer.Task; /** * Manages all server sessions and kicks timed out sessions. */ 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 ) { @@ -45,30 +43,21 @@ public class ServerSessionManager } static { - gcThread = new Thread( new Runnable() { - + QuickTimer.scheduleAtFixedDelay( new Task() { @Override - public void run() + public void fire() { - 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(); - } + synchronized ( serverSessions ) { + Iterator<ServerSession> it = serverSessions.values().iterator(); + while ( it.hasNext() ) { + final ServerSession s = it.next(); + if ( s.timedOut() ) { + it.remove(); } } } } - } ); - gcThread.start(); + }, 911, TimeUnit.MINUTES.toMillis( 14 ) ); } } diff --git a/src/main/java/org/openslx/imagemaster/serversession/ServerUser.java b/src/main/java/org/openslx/imagemaster/serversession/ServerUser.java deleted file mode 100644 index 3549621..0000000 --- a/src/main/java/org/openslx/imagemaster/serversession/ServerUser.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.openslx.imagemaster.serversession; - -/** - * The ServerUser that is hold in a ServerSession - */ -public class ServerUser -{ - - public final String organization, address; - - public ServerUser(String organization, String address) - { - this.organization = organization; - this.address = address; - } - -} |