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

diff --git a/IkiWiki/Plugin/httpauth.pm b/IkiWiki/Plugin/httpauth.pm
index 5b7d65253..cb488449d 100644
--- a/IkiWiki/Plugin/httpauth.pm
+++ b/IkiWiki/Plugin/httpauth.pm
@@ -11,8 +11,8 @@ sub import {
 	hook(type => "auth", id => "httpauth", call => \&auth);
 	hook(type => "formbuilder_setup", id => "httpauth",
 		call => \&formbuilder_setup);
-	hook(type => "canedit", id => "httpauth", call => \&canedit);
-	hook(type => "pagetemplate", id => "httpauth", call => \&pagetemplate);
+	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",
@@ -41,7 +42,9 @@ sub redir_cgiauthurl ($;@) {
 	my $cgi=shift;
 
 	IkiWiki::redirect($cgi, 
-		IkiWiki::cgiurl(cgiurl => $config{cgiauthurl}, @_));
+		@_ > 1 ? IkiWiki::cgiurl(cgiurl => $config{cgiauthurl}, @_)
+		       : $config{cgiauthurl}."?@_"
+	);
 	exit;
 }
 
@@ -75,30 +78,21 @@ sub formbuilder_setup (@) {
 	}
 }
 
-sub need_httpauth_pagespec () {
-	return defined $config{httpauth_pagespec} &&
-	       length $config{httpauth_pagespec} &&
-	       defined $config{cgiauthurl};
-}
-
-sub test_httpauth_pagespec ($) {
-	my $page=shift;
-
-	pagespec_match($page, $config{httpauth_pagespec});
-}
-
 sub canedit ($$$) {
 	my $page=shift;
 	my $cgi=shift;
 	my $session=shift;
 
 	if (! defined $cgi->remote_user() &&
-	    need_httpauth_pagespec() &&
-    	    ! test_httpauth_pagespec($page)) {
+	    (! defined $session->param("name") ||
+             ! IkiWiki::userinfo_get($session->param("name"), "regdate")) &&
+	    defined $config{httpauth_pagespec} &&
+	    length $config{httpauth_pagespec} &&
+	    defined $config{cgiauthurl} &&
+	    pagespec_match($page, $config{httpauth_pagespec})) {
 		return sub {
-			IkiWiki::redirect($cgi, 
-				$config{cgiauthurl}.'?'.$cgi->query_string());
-			exit;
+			# bounce thru cgiauthurl and back to edit action
+			redir_cgiauthurl($cgi, $cgi->query_string());
 		};
 	}
 	else {
@@ -106,19 +100,4 @@ sub canedit ($$$) {
 	}
 }
 
-sub pagetemplate (@_) {
-	my %params=@_;
-	my $template=$params{template};
-
-	if ($template->param("editurl") &&
-	    need_httpauth_pagespec() &&
-	    test_httpauth_pagespec($params{page})) {
-		# go directly to cgiauthurl when editing a page matching
-		# the pagespec
-		$template->param(editurl => IkiWiki::cgiurl(
-			cgiurl => $config{cgiauthurl},
-			do => "edit", page => $params{page}));
-	}
-}
-
 1