package auth.impl;
import java.security.Principal;
import java.util.ArrayList;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.LoginException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import play.mvc.Http;
import play.mvc.Http.Context;
import auth.impl.callbackHandlers.HeadlessCallbackHandler;
import auth.impl.callbacks.PassThruCallback;
import auth.models.User;
import auth.models.UserToken;
/**
* A concrete authentication module. This is a simple stub to be used for testing.
*/
public class PassThruAuthModule extends AbstractAuthModule {
private static Logger logger = LoggerFactory.getLogger(PassThruAuthModule.class);
private static final String PASS_THRU_AUTH_MODULE = "PassThruAuth";
/*
* (non-Javadoc)
*
* @see auth.IAuthenticator#getModuleName()
*/
@Override
public String getModuleName() {
return PASS_THRU_AUTH_MODULE;
}
/* (non-Javadoc)
* @see auth.IAuthModule#getCallbackHandler(play.mvc.Http.Context)
*/
@Override
public CallbackHandler getCallbackHandler(Context ctx) {
return new HeadlessCallbackHandler(ctx);
}
/*
* (non-Javadoc)
*
* @see javax.security.auth.spi.LoginModule#login()
*/
@Override
public boolean login() throws LoginException {
logger.debug("login()");
if (callbackHandler == null) {
throw new LoginException("Error: no CallbackHandler available!");
}
ArrayList<Callback> callbacks = new ArrayList<Callback>();
callbacks.add(new PassThruCallback());
try {
Callback[] cb = new Callback[callbacks.size()];
callbackHandler.handle(callbacks.toArray(cb));
Http.Request req = ((PassThruCallback) cb[0]).getOriginalRequest();
pending = new ArrayList<Principal>();
User user = UserToken.createUserToken("demo", "cangetin", req);
user.fullName = "John Doe";
pending.add(user);
return true;
} catch (Exception e) {
logger.info("failed user validation.", e);
}
return false;
}
}