summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/serversession
diff options
context:
space:
mode:
authorSimon Rettberg2015-09-08 17:38:07 +0200
committerSimon Rettberg2015-09-08 17:38:07 +0200
commit3aa85cd588b745fb2537dbe748580d9c3b980133 (patch)
tree42d2c622b089c40b856d9ef09ed50eaa68407b68 /src/main/java/org/openslx/imagemaster/serversession
parentStart adapting to new DB/Thrift model (diff)
downloadmasterserver-3aa85cd588b745fb2537dbe748580d9c3b980133.tar.gz
masterserver-3aa85cd588b745fb2537dbe748580d9c3b980133.tar.xz
masterserver-3aa85cd588b745fb2537dbe748580d9c3b980133.zip
Compilable...
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/serversession')
-rw-r--r--src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java33
-rw-r--r--src/main/java/org/openslx/imagemaster/serversession/ServerSession.java15
-rw-r--r--src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java37
-rw-r--r--src/main/java/org/openslx/imagemaster/serversession/ServerUser.java17
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;
- }
-
-}