package org.ops4j.pax.web.undertow.security; import io.undertow.security.idm.DigestCredential; import java.io.IOException; import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.UnsupportedCallbackException; import org.ops4j.pax.web.jaas.PasswordValidator; import org.ops4j.pax.web.jaas.PasswordValidatorCallback; public class VerifyDigestCallbackHandler implements CallbackHandler { private DigestCredential digestCredential; private String username; public VerifyDigestCallbackHandler(String username, DigestCredential digestCredential) { this.username = username; this.digestCredential = digestCredential; } @Override public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback c : callbacks) { if (c instanceof NameCallback) { NameCallback nc = (NameCallback) c; nc.setName(username); } if (c instanceof PasswordValidatorCallback) { PasswordValidatorCallback pvc = (PasswordValidatorCallback) c; pvc.setPasswordValidator(new PasswordValidator() { @Override public boolean validatePassword(byte[] password) { return digestCredential.verifyHA1(password); } }); } } } }