summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin
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
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')
-rw-r--r--IkiWiki/Plugin/openid.pm95
-rw-r--r--IkiWiki/Plugin/skeleton.pm14
2 files changed, 78 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;
diff --git a/IkiWiki/Plugin/skeleton.pm b/IkiWiki/Plugin/skeleton.pm
index f3244ae14..feb0f7419 100644
--- a/IkiWiki/Plugin/skeleton.pm
+++ b/IkiWiki/Plugin/skeleton.pm
@@ -21,6 +21,8 @@ sub import { #{{{
hook(type => "change", id => "skeleton", call => \&change);
hook(type => "cgi", id => "skeleton", call => \&cgi);
hook(type => "auth", id => "skeleton", call => \&auth);
+ hook(type => "formbuilder_setup", id => "skeleton", call => \&formbuilder_setup);
+ hook(type => "formbuilder", id => "skeleton", call => \&formbuilder);
hook(type => "savestate", id => "savestate", call => \&savestate);
} # }}}
@@ -103,6 +105,18 @@ sub auth ($$) { #{{{
debug("skeleton plugin running in auth");
} #}}}
+sub formbuilder_setup (@) { #{{{
+ my %params=@_;
+
+ debug("skeleton plugin running in formbuilder_setup");
+} # }}}
+
+sub formbuilder (@) { #{{{
+ my %params=@_;
+
+ debug("skeleton plugin running in formbuilder");
+} # }}}
+
sub savestate () { #{{{
debug("skeleton plugin running in savestate");
} #}}}