package org.jboss.naming.remote; import java.io.IOException; import java.security.Principal; import java.util.Collection; 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.jboss.remoting3.security.AuthorizingCallbackHandler; import org.jboss.remoting3.security.ServerAuthenticationProvider; import org.jboss.remoting3.security.SimpleUserInfo; import org.jboss.remoting3.security.UserInfo; import org.xnio.OptionMap; import org.xnio.Property; import org.xnio.Sequence; import static org.xnio.Options.SASL_MECHANISMS; import static org.xnio.Options.SASL_POLICY_NOANONYMOUS; import static org.xnio.Options.SASL_PROPERTIES; import static org.xnio.Options.SSL_ENABLED; /** * @author Stuart Douglas */ public class TestUtils { public static final String ANONYMOUS = "ANONYMOUS"; public static OptionMap createOptionMap() { OptionMap.Builder builder = OptionMap.builder(); builder.set(SSL_ENABLED, false); builder.set(SASL_MECHANISMS, Sequence.<String>of(ANONYMOUS)); builder.set(SASL_PROPERTIES, Sequence.<Property>empty()); builder.set(SASL_POLICY_NOANONYMOUS, false); return builder.getMap(); } public static OptionMap createOptionNoAuthMechanismMap() { OptionMap.Builder builder = OptionMap.builder(); builder.set(SSL_ENABLED, false); builder.set(SASL_MECHANISMS, Sequence.<String>of("null")); builder.set(SASL_PROPERTIES, Sequence.<Property>empty()); builder.set(SASL_POLICY_NOANONYMOUS, false); return builder.getMap(); } public static class DefaultAuthenticationHandler implements ServerAuthenticationProvider { @Override public AuthorizingCallbackHandler getCallbackHandler(String mechanismName) { if (mechanismName.equals(ANONYMOUS)) { return new AuthorizingCallbackHandler() { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback current : callbacks) { throw new UnsupportedCallbackException(current, "ANONYMOUS mechanism so not expecting a callback"); } } @Override public UserInfo createUserInfo(Collection<Principal> remotingPrincipals) throws IOException { if (remotingPrincipals == null) { return null; } return new SimpleUserInfo(remotingPrincipals); } }; } return null; } } public static class AnonymousCallbackHandler implements CallbackHandler { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback current : callbacks) { if (current instanceof NameCallback) { NameCallback ncb = (NameCallback) current; ncb.setName(ANONYMOUS); } else { throw new UnsupportedCallbackException(current); } } } } }