package com.sissi.pipeline.in.auth.impl;
import javax.security.sasl.SaslServer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.sissi.commons.Trace;
import com.sissi.context.JIDContext;
import com.sissi.pipeline.Input;
import com.sissi.pipeline.in.ProxyProcessor;
import com.sissi.pipeline.in.auth.SaslServers;
import com.sissi.protocol.Protocol;
import com.sissi.protocol.iq.auth.Response;
import com.sissi.protocol.iq.auth.Success;
/**
* @author kim 2013年11月26日
*/
public class DigestAuthProcessor extends ProxyProcessor {
private final Log log = LogFactory.getLog(this.getClass());
private final SaslServers saslServers;
private final Input proxy;
public DigestAuthProcessor(SaslServers saslServers, Input proxy) {
super();
this.saslServers = saslServers;
this.proxy = proxy;
}
@Override
public boolean input(JIDContext context, Protocol protocol) {
try {
SaslServer sasl = null;
try {
return (sasl = this.saslServers.pull(context)) != null ? context.write(new Success(sasl.evaluateResponse(protocol.cast(Response.class).getResponse()))).auth(true).auth() : false;
} finally {
if (sasl != null) {
sasl.dispose();
}
}
} catch (Exception e) {
this.log.debug(e.toString());
Trace.trace(this.log, e);
return this.proxy.input(context, protocol);
}
}
}