package org.jabox.cis.hudson;
import java.io.IOException;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.validator.UrlValidator;
public class HudsonLoginValidator extends UrlValidator {
private static final long serialVersionUID = 2635593287132542621L;
private final TextField<String> _url;
private final TextField<String> _username;
private final PasswordTextField _password;
public HudsonLoginValidator(final TextField<String> url,
final TextField<String> username,
final PasswordTextField password) {
_url = url;
_username = username;
_password = password;
}
@Override
protected void onValidate(final IValidatable<String> validatable) {
if (!_url.isValid() || !_username.isValid()
|| !_password.isValid()) {
return;
}
HttpClient client = new HttpClient();
Credentials creds =
new UsernamePasswordCredentials(_username.getValue(),
_password.getValue());
client.getState().setCredentials(null, null, creds);
client.getState().setAuthenticationPreemptive(true);
GetMethod get = new GetMethod(_url.getValue());
try {
int result = client.executeMethod(get);
if (result == 401) {
error(validatable);
}
} catch (HttpException e) {
error(validatable);
e.printStackTrace();
} catch (IOException e) {
error(validatable);
e.printStackTrace();
} finally {
get.releaseConnection();
}
}
}