sub import {
hook(type => "getsetup", id => "httpauth", call => \&getsetup);
hook(type => "auth", id => "httpauth", call => \&auth);
+ hook(type => "canedit", id => "httpauth", call => \&canedit,
+ last => 1);
+ hook(type => "formbuilder_setup", id => "httpauth",
+ call => \&formbuilder_setup);
}
sub getsetup () {
safe => 1,
rebuild => 0,
},
+ cgiauthurl => {
+ type => "string",
+ example => "http://example.com/wiki/auth/ikiwiki.cgi",
+ description => "url to redirect to when authentication is needed",
+ safe => 1,
+ rebuild => 0,
+ },
+}
+
+sub redir_cgiauthurl ($$) {
+ my $cgi=shift;
+ my $params=shift;
+
+ IkiWiki::redirect($cgi, $config{cgiauthurl}.'?'.$params);
+ exit;
}
sub auth ($$) {
}
}
+sub canedit ($$$) {
+ my $page=shift;
+ my $cgi=shift;
+ my $session=shift;
+
+ if (! defined $cgi->remote_user() && defined $config{cgiauthurl}) {
+ return sub { redir_cgiauthurl($cgi, $cgi->query_string()) };
+ }
+ else {
+ return undef;
+ }
+}
+
+sub formbuilder_setup (@) {
+ my %params=@_;
+
+ my $form=$params{form};
+ my $session=$params{session};
+ my $cgi=$params{cgi};
+ my $buttons=$params{buttons};
+
+ if ($form->title eq "signin" &&
+ ! defined $cgi->remote_user() && defined $config{cgiauthurl}) {
+ my $button_text="Login with HTTP auth";
+ push @$buttons, $button_text;
+
+ if ($form->submitted && $form->submitted eq $button_text) {
+ redir_cgiauthurl($cgi, "do=postsignin");
+ exit;
+ }
+ }
+}
+
1