X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/5b459737a50d83ff94490d86d1b9a4438d4b50a1..8d28f70b374d8291e5da94265ced333a801498b4:/IkiWiki/Plugin/loginselector.pm?ds=sidebyside 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