package org.rhq.cassandra.auth;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.net.InetAddress;
import java.net.URISyntaxException;
import java.util.HashSet;
import java.util.Set;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.apache.cassandra.auth.IInternodeAuthenticator;
import org.apache.cassandra.exceptions.ConfigurationException;
/**
* @author John Sanda
*/
public class RhqInternodeAuthenticator implements IInternodeAuthenticator, RhqInternodeAuthenticatorMBean {
private final String MBEAN_NAME = "org.rhq.cassandra.auth:type=" + RhqInternodeAuthenticator.class.getSimpleName();
private final String CONF_FILE = "rhq-storage-auth.conf";
private File authConfFile;
private Set<InetAddress> addresses = new HashSet<InetAddress>();
public RhqInternodeAuthenticator() {
try {
authConfFile = new File(getClass().getResource("/" + CONF_FILE).toURI());
if (!authConfFile.exists()) {
throw new RuntimeException(authConfFile + " does not exist");
}
reloadConfiguration();
} catch (URISyntaxException e) {
throw new RuntimeException("Failed to load " + CONF_FILE, e);
}
try {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName nameObj = new ObjectName(MBEAN_NAME);
mbs.registerMBean(this, nameObj);
} catch (Exception e) {
throw new RuntimeException("Failed to register MBean " + MBEAN_NAME, e);
}
}
@Override
public boolean authenticate(InetAddress address, int port) {
return addresses.contains(address);
}
@Override
public void reloadConfiguration() {
try {
addresses.clear();
BufferedReader reader = new BufferedReader(new FileReader(authConfFile));
String line = reader.readLine();
while (line != null) {
addresses.add(InetAddress.getByName(line));
line = reader.readLine();
}
} catch (IOException e) {
throw new RuntimeException("Failed to load addresses from " + authConfFile, e);
}
}
@Override
public void validateConfiguration() throws ConfigurationException {
}
}