/*******************************************************************************
*
* Copyright (c) 2010, InfraDNA, Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*
*
*
*
*******************************************************************************/
package hudson.diagnosis;
import hudson.Extension;
import hudson.model.AdministrativeMonitor;
import hudson.util.FormValidation;
import org.kohsuke.stapler.HttpRedirect;
import org.kohsuke.stapler.HttpResponse;
import org.kohsuke.stapler.HttpResponses;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.WebMethod;
import java.io.IOException;
/**
* Looks out for a broken reverse proxy setup that doesn't rewrite the location
* header correctly.
*
* <p> Have the JavaScript make an AJAX call, to which we respond with 302
* redirect. If the reverse proxy is done correctly, this will be handled by
* {@link #doFoo()}, but otherwise we'll report that as an error. Unfortunately,
* {@code XmlHttpRequest} doesn't expose properties that allow the client-side
* JavaScript to learn the details of the failure, so we have to make do with
* limited information.
*
* @author Kohsuke Kawaguchi
*/
@Extension
public class ReverseProxySetupMonitor extends AdministrativeMonitor {
@Override
public boolean isActivated() {
// return true to always inject an HTML fragment to perform a test
return true;
}
public HttpResponse doTest() {
return new HttpRedirect("test-for-reverse-proxy-setup");
}
@WebMethod(name = "test-for-reverse-proxy-setup")
public FormValidation doFoo() {
return FormValidation.ok();
}
/**
* Depending on whether the user said "yes" or "no", send him to the right
* place.
*/
public HttpResponse doAct(@QueryParameter String no) throws IOException {
if (no != null) { // dismiss
disable(true);
// of course the irony is that this redirect won't work
return HttpResponses.redirectViaContextPath("/manage");
} else {
return new HttpRedirect("http://wiki.hudson-ci.org/display/HUDSON/Running+Hudson+behind+Apache#RunningHudsonbehindApache-modproxywithHTTPS");
}
}
}