summaryrefslogtreecommitdiff
path: root/IkiWiki/CGI.pm
diff options
context:
space:
mode:
Diffstat (limited to 'IkiWiki/CGI.pm')
-rw-r--r--IkiWiki/CGI.pm35
1 files changed, 17 insertions, 18 deletions
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index 1522feb1e..8809e8510 100644
--- a/IkiWiki/CGI.pm
+++ b/IkiWiki/CGI.pm
@@ -20,7 +20,7 @@ sub printheader ($) { #{{{
}
} #}}}
-
+
sub showform ($$$$) { #{{{
my $form=shift;
my $buttons=shift;
@@ -60,12 +60,18 @@ sub check_canedit ($$$;$) { #{{{
run_hooks(canedit => sub {
return if defined $canedit;
my $ret=shift->($page, $q, $session);
- if (defined $ret && $ret eq "") {
- $canedit=1;
- }
- elsif (defined $ret) {
- $canedit=0;
- error($ret) unless $nonfatal;
+ if (defined $ret) {
+ if ($ret eq "") {
+ $canedit=1;
+ }
+ elsif (ref $ret eq 'CODE') {
+ $ret->() unless $nonfatal;
+ $canedit=0;
+ }
+ elsif (defined $ret) {
+ error($ret) unless $nonfatal;
+ $canedit=0;
+ }
}
});
return $canedit;
@@ -133,9 +139,7 @@ sub needsignin ($$) { #{{{
if (! defined $session->param("name") ||
! userinfo_get($session->param("name"), "regdate")) {
- if (! defined $session->param("postsignin")) {
- $session->param(postsignin => $ENV{QUERY_STRING});
- }
+ $session->param(postsignin => $ENV{QUERY_STRING});
cgi_signin($q, $session);
cgi_savesession($session);
exit;
@@ -195,9 +199,7 @@ sub cgi_postsignin ($$) { #{{{
exit;
}
else {
- # This can occur, for example, if a user went to the signin
- # url via a bookmark.
- redirect($q, $config{url});
+ error(gettext("login failed, perhaps you need to turn on cookies?"));
}
} #}}}
@@ -710,17 +712,14 @@ sub cgi (;$$) { #{{{
cgi_signin($q, $session);
cgi_savesession($session);
}
- elsif (defined $session->param("postsignin")) {
- cgi_postsignin($q, $session);
- }
elsif ($do eq 'prefs') {
cgi_prefs($q, $session);
}
elsif ($do eq 'create' || $do eq 'edit') {
cgi_editpage($q, $session);
}
- elsif ($do eq 'postsignin') {
- error(gettext("login failed, perhaps you need to turn on cookies?"));
+ elsif (defined $session->param("postsignin") || $do eq 'postsignin') {
+ cgi_postsignin($q, $session);
}
else {
error("unknown do parameter");