aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/openid.pm
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2015-05-13 23:38:56 -0400
committerJoey Hess <joeyh@joeyh.name>2015-05-13 23:38:56 -0400
commitcfb2c22906f41d4a4dd1c3404e8e430a35c1cd41 (patch)
treeb2f0271a5fa334530b3ac3051ad42bc02172a708 /IkiWiki/Plugin/openid.pm
parentee2905ae0a2786fd5f195fdc1779a34b5f62c1d9 (diff)
parentbf8b7fe2d1602827f7419521d140bac4be6200a8 (diff)
downloadikiwiki-cfb2c22906f41d4a4dd1c3404e8e430a35c1cd41.tar
ikiwiki-cfb2c22906f41d4a4dd1c3404e8e430a35c1cd41.tar.gz
Merge branch 'emailauth'
Diffstat (limited to 'IkiWiki/Plugin/openid.pm')
-rw-r--r--IkiWiki/Plugin/openid.pm82
1 files changed, 29 insertions, 53 deletions
diff --git a/IkiWiki/Plugin/openid.pm b/IkiWiki/Plugin/openid.pm
index 00652ebb7..cc4b4ba3d 100644
--- a/IkiWiki/Plugin/openid.pm
+++ b/IkiWiki/Plugin/openid.pm
@@ -7,35 +7,17 @@ use strict;
use IkiWiki 3.00;
sub import {
- add_underlay("openid-selector");
- add_underlay("jquery");
- hook(type => "checkconfig", id => "openid", call => \&checkconfig);
hook(type => "getsetup", id => "openid", call => \&getsetup);
hook(type => "auth", id => "openid", call => \&auth);
hook(type => "formbuilder_setup", id => "openid",
call => \&formbuilder_setup, last => 1);
-}
-
-sub checkconfig () {
- if ($config{cgi}) {
- # Intercept normal signin form, so the openid selector
- # can be displayed.
- #
- # When other auth hooks are registered, give the selector
- # a reference to the normal signin form.
- require IkiWiki::CGI;
- my $real_cgi_signin;
- my $nonopenidform_label=gettext("Other");
- if (keys %{$IkiWiki::hooks{auth}} > 1) {
- $real_cgi_signin=\&IkiWiki::cgi_signin;
- if (keys %{$IkiWiki::hooks{auth}} == 2 && exists $IkiWiki::hooks{auth}->{passwordauth}) {
- $nonopenidform_label=gettext("Password");
- }
- }
- inject(name => "IkiWiki::cgi_signin", call => sub ($$) {
- openid_selector($real_cgi_signin, $nonopenidform_label, @_);
- });
- }
+ IkiWiki::loadplugin("loginselector");
+ IkiWiki::Plugin::loginselector::register_login_plugin(
+ "openid",
+ \&openid_setup,
+ \&openid_check_input,
+ \&openid_auth,
+ );
}
sub getsetup () {
@@ -59,40 +41,34 @@ sub getsetup () {
},
}
-sub openid_selector {
- my $real_cgi_signin=shift;
- my $nonopenidform_label=shift;
- my $q=shift;
- my $session=shift;
-
- my $openid_url=$q->param('openid_identifier');
- my $openid_error;
+sub openid_setup ($$) {
+ my $q=shift;
+ my $template=shift;
- if (! load_openid_module()) {
- if ($real_cgi_signin) {
- $real_cgi_signin->($q, $session);
- exit;
+ if (load_openid_module()) {
+ my $openid_url=$q->param('openid_identifier');
+ if (defined $openid_url) {
+ $template->param(openid_url => $openid_url);
}
- error(sprintf(gettext("failed to load openid module: "), @_));
+ return 1;
}
- elsif (defined $q->param("action") && $q->param("action") eq "verify") {
- validate($q, $session, $openid_url, sub {
- $openid_error=shift;
- });
+ else {
+ return 0;
}
+}
- my $template=IkiWiki::template("openid-selector.tmpl");
- $template->param(
- cgiurl => IkiWiki::cgiurl(),
- (defined $openid_error ? (openid_error => $openid_error) : ()),
- (defined $openid_url ? (openid_url => $openid_url) : ()),
- ($real_cgi_signin ? (nonopenidform => $real_cgi_signin->($q, $session, 1)) : ()),
- nonopenidform_label => $nonopenidform_label,
- );
+sub openid_check_input ($) {
+ my $q=shift;
+ my $openid_url=$q->param('openid_identifier');
+ defined $q->param("action") && $q->param("action") eq "verify" && defined $openid_url && length $openid_url;
+}
- IkiWiki::printheader($session);
- print IkiWiki::cgitemplate($q, "signin", $template->output);
- exit;
+sub openid_auth ($$$$) {
+ my $q=shift;
+ my $session=shift;
+ my $errordisplayer=shift;
+ my $openid_url=$q->param('openid_identifier');
+ validate($q, $session, $openid_url, $errordisplayer);
}
sub formbuilder_setup (@) {