aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@debian.org>2014-10-05 23:06:48 +0100
committerSimon McVittie <smcv@debian.org>2014-10-05 23:49:37 +0100
commit3b8da667cc1514a9589190b614307c0a76af532a (patch)
tree48d4d35e0c6cd9f68f0e2cace61f1ad79e8473ea
parentd712389ae3e8351c1416aa81d4b85586cf98f002 (diff)
downloadikiwiki-3b8da667cc1514a9589190b614307c0a76af532a.tar
ikiwiki-3b8da667cc1514a9589190b614307c0a76af532a.tar.gz
Add reverse_proxy option which hard-codes cgiurl in CGI output
This solves several people's issues with the CGI trying to be too clever when IkiWiki is placed behind a reverse-proxy.
-rw-r--r--IkiWiki.pm8
-rw-r--r--IkiWiki/CGI.pm10
-rwxr-xr-xt/relativity.t6
3 files changed, 16 insertions, 8 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index 38b91ae1d..570c185ad 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -108,6 +108,14 @@ sub getsetup () {
safe => 1,
rebuild => 1,
},
+ reverse_proxy => {
+ type => "boolean",
+ default => 0,
+ description => "do not adjust cgiurl if CGI is accessed via different URL",
+ advanced => 0,
+ safe => 1,
+ rebuild => 0, # only affects CGI requests
+ },
cgi_wrapper => {
type => "string",
default => '',
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index b6f47a3a7..70e3b7134 100644
--- a/IkiWiki/CGI.pm
+++ b/IkiWiki/CGI.pm
@@ -59,7 +59,7 @@ sub cgitemplate ($$$;@) {
my $template=template("page.tmpl");
my $topurl = $config{url};
- if (defined $cgi && ! $config{w3mmode}) {
+ if (defined $cgi && ! $config{w3mmode} && ! $config{reverse_proxy}) {
$topurl = $cgi->url;
}
@@ -93,7 +93,13 @@ sub cgitemplate ($$$;@) {
sub redirect ($$) {
my $q=shift;
eval q{use URI};
- my $url=URI->new(urlabs(shift, $q->url));
+
+ my $topurl;
+ if (defined $q && ! $config{w3mmode} && ! $config{reverse_proxy}) {
+ $topurl = $q->url;
+ }
+
+ my $url=URI->new(urlabs(shift, $topurl));
if (! $config{w3mmode}) {
print $q->redirect($url);
}
diff --git a/t/relativity.t b/t/relativity.t
index 675efc903..86b807b5b 100755
--- a/t/relativity.t
+++ b/t/relativity.t
@@ -571,11 +571,8 @@ run(["./t/tmp/ikiwiki.cgi"], \undef, \$content, init => sub {
%bits = parse_cgi_content($content);
like($bits{tophref}, qr{^(?:/wiki|\.)/$});
like($bits{cgihref}, qr{^(?:(?:https:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
-TODO: {
-local $TODO = "reverse-proxy support needed";
is($bits{basehref}, "https://example.com/wiki/");
like($bits{stylehref}, qr{^(?:(?:https:)?//example.com)?/wiki/style.css$});
-}
# previewing a page
$in = 'do=edit&page=a/b/c&Preview';
@@ -589,10 +586,7 @@ run(["./t/tmp/ikiwiki.cgi"], \$in, \$content, init => sub {
%bits = parse_cgi_content($content);
like($bits{tophref}, qr{^(?:/wiki|\.\./\.\./\.\.)/$});
like($bits{cgihref}, qr{^(?:(?:https:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
-TODO: {
-local $TODO = "reverse-proxy support needed";
is($bits{basehref}, "https://example.com/wiki/a/b/c/");
like($bits{stylehref}, qr{^(?:(?:https:)?//example.com)?/wiki/style.css$});
-}
done_testing;