/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.jaas;
import java.io.IOException;
import java.util.Map;
import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;
/**
* Login module for testing.
*
* @author Middleware Services
*/
public class TestLoginModule implements LoginModule
{
/** Initialized subject. */
protected Subject subject;
/** Initialized callback handler. */
protected CallbackHandler callbackHandler;
/** Shared state from other login module. */
protected Map sharedState;
/** Whether authentication was successful. */
protected boolean success;
@Override
public void initialize(
final Subject s,
final CallbackHandler ch,
final Map<String, ?> ss,
final Map<String, ?> options)
{
subject = s;
callbackHandler = ch;
sharedState = ss;
}
@SuppressWarnings("unchecked")
@Override
public boolean login()
throws LoginException
{
try {
final NameCallback nameCb = new NameCallback("Enter user: ");
final PasswordCallback passCb = new PasswordCallback("Enter user password: ", false);
callbackHandler.handle(new Callback[] {nameCb, passCb});
sharedState.put(LdapLoginModule.LOGIN_NAME, nameCb.getName());
sharedState.put(LdapLoginModule.LOGIN_PASSWORD, passCb.getPassword());
success = true;
} catch (IOException | UnsupportedCallbackException e) {
success = false;
throw new LoginException(e.toString());
}
return true;
}
@Override
public boolean commit()
throws LoginException
{
return true;
}
@Override
public boolean abort()
{
success = false;
return true;
}
@Override
public boolean logout()
{
return true;
}
}