summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/openid.pm
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-11-20 20:37:27 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-11-20 20:37:27 +0000
commit3e593eb9c0edd3f5cce7381ca145c0889441d719 (patch)
treeecca037124400a34803e8baefadb3179c296aac9 /IkiWiki/Plugin/openid.pm
parent74cb86fbb79b011014958712325112d65bea5f12 (diff)
* Add "last" parameter to hook function. Very basic ordering, and hopefully
nothing more spohisticated will be needed. * Add formbuilder_setup and formbuilder hooks. * Split out a passwordauth module, that holds all the traditional password based authentication etc code. It's enabled by default, but can be disabled if you want only openid or some other auth method.
Diffstat (limited to 'IkiWiki/Plugin/openid.pm')
-rw-r--r--IkiWiki/Plugin/openid.pm95
1 files changed, 64 insertions, 31 deletions
diff --git a/IkiWiki/Plugin/openid.pm b/IkiWiki/Plugin/openid.pm
index 43ce8fd31..7ea67c5ca 100644
--- a/IkiWiki/Plugin/openid.pm
+++ b/IkiWiki/Plugin/openid.pm
@@ -8,8 +8,9 @@ use IkiWiki;
sub import { #{{{
hook(type => "getopt", id => "openid", call => \&getopt);
- hook(type => "checkconfig", id => "openid", call => \&checkconfig);
hook(type => "auth", id => "openid", call => \&auth);
+ hook(type => "formbuilder_setup", id => "openid",
+ call => \&formbuilder_setup, last => 1);
} # }}}
sub getopt () { #{{{
@@ -19,37 +20,43 @@ sub getopt () { #{{{
GetOptions("openidsignup=s" => \$config{openidsignup});
} #}}}
-sub checkconfig () { #{{{
- # Currently part of the OpenID code is in CGI.pm, and is enabled by
- # this setting.
- # TODO: modularise it all out into this plugin..
- $config{openid}=1;
-} #}}}
-
-sub auth ($$) { #{{{
- my $q=shift;
- my $session=shift;
-
- if (defined $q->param('openid.mode')) {
- my $csr=getobj($q, $session);
-
- if (my $setup_url = $csr->user_setup_url) {
- IkiWiki::redirect($q, $setup_url);
+sub formbuilder_setup (@) { #{{{
+ my %params=@_;
+
+ my $form=$params{form};
+ my $session=$params{session};
+ my $cgi=$params{cgi};
+
+ if ($form->title eq "signin") {
+ $form->field(
+ name => "openid_url",
+ label => "OpenID",
+ size => 30,
+ comment => '('.
+ htmllink("", "", "OpenID", 1, 0, "What's this?")
+ .($config{openidsignup} ? " | <a href=\"$config{openidsignup}\">Get an OpenID</a>" : "")
+ .')'
+ );
+
+ # Handle submission of an OpenID as validation.
+ if ($form->submitted && $form->submitted eq "Login" &&
+ defined $form->field("openid_url") &&
+ length $form->field("openid_url")) {
+ $form->field(
+ name => "openid_url",
+ validate => sub {
+ validate($cgi, $session, shift, $form);
+ },
+ );
+ # Skip all other required fields in this case.
+ foreach my $field ($form->field) {
+ next if $field eq "openid_url";
+ $form->field(name => $field, required => 0,
+ validate => '/.*/');
+ }
}
- elsif ($csr->user_cancel) {
- IkiWiki::redirect($q, $config{url});
- }
- 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 ($$$;$) { #{{{
my $q=shift;
@@ -77,11 +84,37 @@ sub validate ($$$;$) { #{{{
delayed_return => 1,
);
# Redirect the user to the OpenID server, which will
- # eventually bounce them back to auth() above.
+ # eventually bounce them back to auth()
IkiWiki::redirect($q, $check_url);
exit 0;
} #}}}
+sub auth ($$) { #{{{
+ my $q=shift;
+ my $session=shift;
+
+ if (defined $q->param('openid.mode')) {
+ my $csr=getobj($q, $session);
+
+ if (my $setup_url = $csr->user_setup_url) {
+ IkiWiki::redirect($q, $setup_url);
+ }
+ elsif ($csr->user_cancel) {
+ IkiWiki::redirect($q, $config{url});
+ }
+ elsif (my $vident = $csr->verified_identity) {
+ $session->param(name => $vident->url);
+ }
+ else {
+ error("OpenID failure: ".$csr->err);
+ }
+ }
+ elsif (defined $q->param('openid_identifier')) {
+ # myopenid.com affiliate support
+ validate($q, $session, $q->param('openid_identifier'));
+ }
+} #}}}
+
sub getobj ($$) { #{{{
my $q=shift;
my $session=shift;