X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/046095552ac231366d71a3c7a84bdc6d46662212..d98296d1db02febfa7cc4fbe7f304ca2a9858fef:/IkiWiki/Plugin/httpauth.pm?ds=inline

diff --git a/IkiWiki/Plugin/httpauth.pm b/IkiWiki/Plugin/httpauth.pm
index d0d4da0b7..478f67446 100644
--- a/IkiWiki/Plugin/httpauth.pm
+++ b/IkiWiki/Plugin/httpauth.pm
@@ -9,10 +9,10 @@ use IkiWiki 3.00;
 sub import {
 	hook(type => "getsetup", id => "httpauth", call => \&getsetup);
 	hook(type => "auth", id => "httpauth", call => \&auth);
-	hook(type => "canedit", id => "httpauth", call => \&canedit,
-		last => 1);
 	hook(type => "formbuilder_setup", id => "httpauth",
 		call => \&formbuilder_setup);
+	hook(type => "canedit", id => "httpauth", call => \&canedit,
+		first => 1);
 }
 
 sub getsetup () {
@@ -20,6 +20,7 @@ sub getsetup () {
 		plugin => {
 			safe => 1,
 			rebuild => 0,
+			section => "auth",
 		},
 		cgiauthurl => {
 			type => "string",
@@ -28,13 +29,22 @@ sub getsetup () {
 			safe => 1,
 			rebuild => 0,
 		},
+		httpauth_pagespec => {
+			type => "pagespec",
+			example => "!*/Discussion",
+			description => "PageSpec of pages where only httpauth will be used for authentication",
+			safe => 0,
+			rebuild => 0,
+		},
 }
 			
-sub redir_cgiauthurl ($$) {
+sub redir_cgiauthurl ($;@) {
 	my $cgi=shift;
-	my $params=shift;
 
-	IkiWiki::redirect($cgi, $config{cgiauthurl}.'?'.$params);
+	IkiWiki::redirect($cgi, 
+		@_ > 1 ? IkiWiki::cgiurl(cgiurl => $config{cgiauthurl}, @_)
+		       : $config{cgiauthurl}."?@_"
+	);
 	exit;
 }
 
@@ -47,19 +57,6 @@ sub auth ($$) {
 	}
 }
 
-sub canedit ($$$) {
-	my $page=shift;
-	my $cgi=shift;
-	my $session=shift;
-
-	if (! defined $cgi->remote_user() && defined $config{cgiauthurl}) {
-		return sub { redir_cgiauthurl($cgi, $cgi->query_string()) };
-	}
-	else {
-		return undef;
-	}
-}
-
 sub formbuilder_setup (@) {
 	my %params=@_;
 
@@ -74,10 +71,38 @@ sub formbuilder_setup (@) {
 		push @$buttons, $button_text;
 
 		if ($form->submitted && $form->submitted eq $button_text) {
-			redir_cgiauthurl($cgi, "do=postsignin");
-			exit;
+			# bounce thru cgiauthurl and then back to
+			# the stored postsignin action
+			redir_cgiauthurl($cgi, do => "postsignin");
 		}
 	}
 }
 
+sub test_httpauth_pagespec ($) {
+	my $page=shift;
+
+	return (
+       );
+}
+
+sub canedit ($$$) {
+	my $page=shift;
+	my $cgi=shift;
+	my $session=shift;
+
+	if (! defined $cgi->remote_user() &&
+	    defined $config{httpauth_pagespec} &&
+	    length $config{httpauth_pagespec} &&
+	    defined $config{cgiauthurl} &&
+	    pagespec_match($page, $config{httpauth_pagespec})) {
+		return sub {
+			# bounce thru cgiauthurl and back to edit action
+			redir_cgiauthurl($cgi, $cgi->query_string());
+		};
+	}
+	else {
+		return undef;
+	}
+}
+
 1