package hudson.plugins.ec2.win.winrm;
import org.apache.http.Header;
import org.apache.http.HttpRequest;
import org.apache.http.auth.*;
import org.apache.http.client.params.AuthPolicy;
import org.apache.http.impl.auth.NTLMScheme;
import org.apache.http.message.BufferedHeader;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.CharArrayBuffer;
public class NegotiateNTLMSchemaFactory implements AuthSchemeFactory, AuthSchemeProvider {
public AuthScheme newInstance(HttpParams params) {
return new NegotiateNTLM();
}
public AuthScheme create(HttpContext context) {
return new NegotiateNTLM();
}
public static class NegotiateNTLM extends NTLMScheme {
@Override
public String getSchemeName() {
return AuthPolicy.SPNEGO;
}
@Override
public Header authenticate(Credentials credentials, HttpRequest request) throws AuthenticationException {
Credentials ntCredentials = credentials;
if (!(credentials instanceof NTCredentials)) {
ntCredentials = new NTCredentials(credentials.getUserPrincipal().getName() + ":" + credentials.getPassword());
}
Header header = super.authenticate(ntCredentials, request);
//need replace NTLM with Negotiate
CharArrayBuffer buffer = new CharArrayBuffer(512);
buffer.append(header.getName());
buffer.append(": ");
buffer.append(header.getValue().replaceFirst("NTLM", "Negotiate"));
return new BufferedHeader(buffer);
}
}
}