X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/5b459737a50d83ff94490d86d1b9a4438d4b50a1..refs/heads/debian/stretch:/IkiWiki/Plugin/loginselector.pm

diff --git a/IkiWiki/Plugin/loginselector.pm b/IkiWiki/Plugin/loginselector.pm
index b5e2056a4..17539ce8a 100644
--- a/IkiWiki/Plugin/loginselector.pm
+++ b/IkiWiki/Plugin/loginselector.pm
@@ -21,12 +21,13 @@ sub register_login_plugin ($$$$) {
 	# This sub is passed a cgi object, and should return true
 	# if it looks like the user is logging in using the plugin.
 	my $plugin_check_input=shift;
-	# This sub is passed a cgi object, a session object, and an error
-	# display callback, and should handle the actual authentication.
-	# It can either exit w/o returning, if it is able to handle
-	# auth, or it can pass an error message to the error display
-	# callback to make the openid selector form be re-disiplayed with
-	# an error message on it.
+	# This sub is passed a cgi object, a session object, an error
+	# display callback, and an info display callback, and should
+	# handle the actual authentication. It can either exit w/o
+	# returning, if it is able to handle auth, or it can pass an
+	# error message to the error display callback to make the
+	# openid selector form be re-disiplayed with an error message
+	# on it.
 	my $plugin_auth=shift;
 	$login_plugins{$plugin_name}={
 		setup => $plugin_setup,
@@ -56,6 +57,8 @@ sub login_selector {
 		if ($login_plugins{$plugin}->{check_input}->($q)) {
 			$login_plugins{$plugin}->{auth}->($q, $session, sub {
 				$template->param(login_error => shift());
+			}, sub {
+				$template->param(login_info => shift());
 			});
 			last;
 		}
@@ -77,6 +80,7 @@ sub import {
 	add_underlay("jquery");
 	hook(type => "getsetup", id => "loginselector",  call => \&getsetup);
 	hook(type => "checkconfig", id => "loginselector", call => \&checkconfig);
+	hook(type => "auth", id => "loginselector", call => \&authstub);
 }
 
 sub checkconfig () {
@@ -90,17 +94,20 @@ sub checkconfig () {
 		my $real_cgi_signin;
 		my $otherform_label=gettext("Other");
 		if (keys %{$IkiWiki::hooks{auth}} > 1) {
-			$real_cgi_signin=\&IkiWiki::cgi_signin;
+			# Special case to avoid labeling password auth as
+			# "Other" when it's the only auth plugin not
+			# integrated with the loginselector.
 			my %h=%{$IkiWiki::hooks{auth}};
 			foreach my $p (keys %login_plugins) {
 				delete $h{$p};
 			}
-			# Special case to avoid labeling password auth as
-			# "Other" when it's the only auth plugin not
-			# integrated with the loginselector.
+			delete $h{loginselector};
 			if (keys %h == 1 && exists $h{passwordauth}) {
 				$otherform_label=gettext("Password");
 			}
+			if (keys %h > 0) {
+				$real_cgi_signin=\&IkiWiki::cgi_signin;
+			}
 		}
 		inject(name => "IkiWiki::cgi_signin", call => sub ($$) {
 			login_selector($real_cgi_signin, $otherform_label, @_);
@@ -118,4 +125,10 @@ sub getsetup () {
 		},
 }
 
+sub authstub ($$) {
+	# While this hook is not currently used, it needs to exist
+	# so ikiwiki knows that the wiki supports logins, and will
+	# enable the Preferences page.
+}
+
 1