blob: d57eb360950124db47947bbcb9b207ce3dae3e97 (
plain) (
tree)
|
|
package org.openslx.imagemaster.serversession;
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.RandomString;
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>();
/**
* Start the server authentification.
*
* @param organization
* the organization of the server
* @return encrypted random string
*/
public static String startServerAuthentication(String organization) {
String secret = RandomString.generate(100, false);
synchronized (authenticatingServers) {
authenticatingServers.put(organization, secret);
log.info("Server of organinzation '" + organization
+ "' starts to authenticate. And got string: '" + secret
+ "'");
}
return secret;
}
/**
* Authenticate with the challengeResponse
*
* @param organization
* @param address
* @param challengeResponse
* @return
* @throws AuthenticationException
* @throws TException
*/
public static ServerUser serverAuthenticate(String organization,
String address, String challengeResponse)
throws AuthenticationException, TException {
/*
* TODO: Decrypt the given challengeResponse and check whether it was
* right or not. Authenticate server if so.
*/
if (!challengeResponse.equals(authenticatingServers.get(organization))) {
throw new AuthenticationException();
}
log.info("Server of organinzation '" + organization
+ " authenticated. With response: '" + challengeResponse
+ "'");
authenticatingServers.remove(organization);
return new ServerUser(organization, address);
}
}
|