summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/openid.pm
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-11-20 09:40:09 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-11-20 09:40:09 +0000
commite43cd269d2b492da6fc4bfdc3d6930e88f1dfa0c (patch)
treef2d35f1afef0ef747836ce85de25f336c3745d4e /IkiWiki/Plugin/openid.pm
parentd842a1c741b8e3636d3e46492c9e085fb00cd663 (diff)
* Add openidsignup config option.
* Make the openid plugin support the callbacks from myopenid.com via its affiliate program. * Change how post signin actions are propigated through the signin process; they're now stored in the session.
Diffstat (limited to 'IkiWiki/Plugin/openid.pm')
-rw-r--r--IkiWiki/Plugin/openid.pm42
1 files changed, 28 insertions, 14 deletions
diff --git a/IkiWiki/Plugin/openid.pm b/IkiWiki/Plugin/openid.pm
index 55b1c4b17..43ce8fd31 100644
--- a/IkiWiki/Plugin/openid.pm
+++ b/IkiWiki/Plugin/openid.pm
@@ -7,10 +7,18 @@ use strict;
use IkiWiki;
sub import { #{{{
- hook(type => "checkconfig", id => "smiley", call => \&checkconfig);
- hook(type => "auth", id => "skeleton", call => \&auth);
+ hook(type => "getopt", id => "openid", call => \&getopt);
+ hook(type => "checkconfig", id => "openid", call => \&checkconfig);
+ hook(type => "auth", id => "openid", call => \&auth);
} # }}}
+sub getopt () { #{{{
+ eval q{use Getopt::Long};
+ error($@) if $@;
+ Getopt::Long::Configure('pass_through');
+ GetOptions("openidsignup=s" => \$config{openidsignup});
+} #}}}
+
sub checkconfig () { #{{{
# Currently part of the OpenID code is in CGI.pm, and is enabled by
# this setting.
@@ -34,31 +42,37 @@ sub auth ($$) { #{{{
elsif (my $vident = $csr->verified_identity) {
$session->param(name => $vident->url);
}
+ else {
+ error("OpenID failure: ".$csr->err);
+ }
+ }
+ elsif (defined $q->param('openid_identifier')) {
+ validate($q, $session, $q->param('openid_identifier'));
}
} #}}}
-sub validate ($$$$) { #{{{
+sub validate ($$$;$) { #{{{
my $q=shift;
my $session=shift;
- my $form=shift;
my $openid_url=shift;
+ my $form=shift;
my $csr=getobj($q, $session);
my $claimed_identity = $csr->claimed_identity($openid_url);
if (! $claimed_identity) {
- # Put the error in the form and fail validation.
- $form->field(name => "openid_url", comment => $csr->err);
- return 0;
+ if ($form) {
+ # Put the error in the form and fail validation.
+ $form->field(name => "openid_url", comment => $csr->err);
+ return 0;
+ }
+ else {
+ error($csr->err);
+ }
}
+
my $check_url = $claimed_identity->check_url(
- return_to => IkiWiki::cgiurl(
- do => $form->field("do"),
- page => $form->field("page"),
- title => $form->field("title"),
- from => $form->field("from"),
- subpage => $form->field("subpage")
- ),
+ return_to => IkiWiki::cgiurl(do => "postsignin"),
trust_root => $config{cgiurl},
delayed_return => 1,
);