package org.jentrata.ebms.internal.security;
import org.apache.wss4j.common.ext.WSPasswordCallback;
import org.jentrata.ebms.cpa.pmode.UsernameToken;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import java.io.IOException;
/**
* A Callback Handler implementation for the case of processing a Username Token
* with an password.
*
* @author aaronwalker
*/
public class UsernameTokenCallbackHandler implements CallbackHandler {
private UsernameToken usernameToken;
public UsernameTokenCallbackHandler(UsernameToken usernameToken) {
this.usernameToken = usernameToken;
}
@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for(Callback callback : callbacks) {
if (callback instanceof WSPasswordCallback) {
WSPasswordCallback pc = (WSPasswordCallback) callback;
if(pc.getUsage() == WSPasswordCallback.Usage.USERNAME_TOKEN) {
if(usernameToken.getUsername().equals(pc.getIdentifier())) {
pc.setPassword(usernameToken.getPassword());
} else {
throw new UnsupportedCallbackException(callback,"Invalid authentication details");
}
}
} else {
throw new UnsupportedCallbackException(callback, "Unrecognized Callback");
}
}
}
}