package com.sissi.pipeline.in.auth.impl; import java.util.HashMap; import java.util.Map; import java.util.Set; import com.sissi.context.JIDContext; import com.sissi.pipeline.in.ProxyProcessor; import com.sissi.pipeline.in.auth.AuthCallback; import com.sissi.protocol.Protocol; import com.sissi.protocol.Stream; import com.sissi.protocol.iq.auth.Auth; import com.sissi.protocol.iq.auth.Failure; /** * @author kim 2013-10-24 */ public class AuthMechanismProcessor extends ProxyProcessor { private final Map<String, AuthCallback> authCallbacks = new HashMap<String, AuthCallback>(); public AuthMechanismProcessor(Set<AuthCallback> authCallbacks) { super(); for (AuthCallback authCallback : authCallbacks) { this.authCallbacks.put(authCallback.support(), authCallback); } } @Override public boolean input(JIDContext context, Protocol protocol) { Auth auth = protocol.cast(Auth.class); AuthCallback callback = this.authCallbacks.get(auth.getMechanism()); return callback != null ? !callback.auth(auth, context) : !context.write(Failure.INSTANCE_INVALIDMECHANISM).write(Stream.closeGraceFully()).close(); } }