diff options
author | Nils Schwabe | 2014-05-07 15:23:26 +0200 |
---|---|---|
committer | Nils Schwabe | 2014-05-07 15:23:26 +0200 |
commit | b02181e54011a01df82e4450ae884ebca920a300 (patch) | |
tree | 4ed9deb319f6ab2bacaac4cf7333919320949e2c /src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java | |
parent | Fix message signing (diff) | |
download | masterserver-b02181e54011a01df82e4450ae884ebca920a300.tar.gz masterserver-b02181e54011a01df82e4450ae884ebca920a300.tar.xz masterserver-b02181e54011a01df82e4450ae884ebca920a300.zip |
Fix bug where the user list was accessed by multiple threads
Add server keys to database
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java')
-rw-r--r-- | src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java b/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java index 5660f2f..f82f77c 100644 --- a/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java +++ b/src/main/java/org/openslx/imagemaster/serversession/ServerAuthenticator.java @@ -6,7 +6,9 @@ import java.util.HashMap; import org.apache.log4j.Logger; import org.apache.thrift.TException; import org.openslx.imagemaster.thrift.iface.AuthenticationException; -import org.openslx.imagemaster.util.AsymMessageSign; +import org.openslx.imagemaster.thrift.iface.ServerAuthenticationError; +import org.openslx.imagemaster.thrift.iface.ServerAuthenticationException; +import org.openslx.imagemaster.util.AsymMessageVerifier; import org.openslx.imagemaster.util.RandomString; public class ServerAuthenticator @@ -15,20 +17,6 @@ public class ServerAuthenticator private static Logger log = Logger.getLogger( ServerAuthenticator.class ); // map of currently authenticating servers private static HashMap<String, String> authenticatingServers = new HashMap<String, String>(); - private static AsymMessageSign messageSign = null; - - /** - * Initialize the message signer/verifier - */ - static { - try { - messageSign = new AsymMessageSign( "./config/servers.jks", "password" ); - log.info( "Loaded keystore" ); - } catch ( Exception e ) { - log.error( "Error loading the keystore", e ); - System.exit( 1 ); - } - } /** * Start the server authentification. @@ -52,7 +40,7 @@ public class ServerAuthenticator /** * Authenticate with the challengeResponse. * - * @param organization + * @param organization Is already verified. * @param address * @param challengeResponse * @return @@ -67,14 +55,25 @@ public class ServerAuthenticator boolean result = false; + AsymMessageVerifier verifier = null; + try { + verifier = new AsymMessageVerifier( organization ); + } catch ( Exception e ) { + throw new ServerAuthenticationException(ServerAuthenticationError.INVALID_ORGANIZATION, "Organization not found."); + } + try { - result = messageSign.verifyMessage( bytes, authenticatingServers.get( organization ).getBytes() , "uni-freiburg.de" ); + result = verifier.verifyMessage( bytes, authenticatingServers.get( organization ).getBytes() , "uni-freiburg.de" ); } catch ( Exception e ) { log.error( "Error while verifying message", e ); + throw new ServerAuthenticationException(ServerAuthenticationError.GENERIC_ERROR, "Could not verfiy key."); } if ( !result ) { - throw new AuthenticationException(); + /* + * TODO: new error for invalid key + */ + throw new ServerAuthenticationException(ServerAuthenticationError.GENERIC_ERROR, "Could not verfiy key."); } log.info( "Server of organinzation '" + organization + " authenticated." ); |