package org.jboss.security.srp;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.naming.InitialContext;
import javax.naming.Name;
import org.jboss.naming.NonSerializableFactory;
import org.jboss.security.srp.SerialObjectStore;
import org.jboss.system.ServiceMBeanSupport;
public class SRPVerifierStoreService extends ServiceMBeanSupport
implements SRPVerifierStoreServiceMBean
{
private SerialObjectStore store;
private String fileName = "SRPVerifierStore.ser";
private String jndiName = "srp/DefaultVerifierSource";
public String getJndiName()
{
return jndiName;
}
public void setJndiName(String jndiName)
{
this.jndiName = jndiName;
}
public void setStoreFile(String fileName) throws IOException
{
this.fileName = fileName;
if( store != null )
{
File storeFile = new File(fileName);
store.save(storeFile);
}
}
public void addUser(String username,String password) throws IOException
{
try
{
store.addUser(username, password);
save();
log.debug("Added username: "+username);
}
catch(Exception e)
{
log.warn("Failed to addUser, username="+username, e);
}
}
public void delUser(String username) throws IOException
{
store.delUser(username);
log.debug("Added username: "+username);
save();
}
public String getName()
{
return "SRPVerifierStoreService";
}
public void initService() throws Exception
{
}
public void startService() throws Exception
{
File storeFile = new File(fileName);
store = new SerialObjectStore(storeFile);
log.info("Created SerialObjectStore at: "+storeFile.getAbsolutePath());
InitialContext ctx = new InitialContext();
Name name = ctx.getNameParser("").parse(jndiName);
NonSerializableFactory.rebind(name, store, true);
}
private void save() throws IOException
{
if( store != null )
{ File storeFile = new File(fileName);
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource(fileName);
if( url == null )
{ String parent = storeFile.getParent();
if( parent != null )
{
url = loader.getResource(parent);
if( url != null )
{
storeFile = new File(url.getFile(), storeFile.getName());
}
}
}
else
{
storeFile = new File(url.getFile());
}
store.save(storeFile);
}
}
}