X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/04a9dbfe7daa9c352ae4e9af17df8134248f3806..a460a01134a9e47308476d4830bfbe4ccf426011:/IkiWiki/CGI.pm?ds=sidebyside diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index 1caea99a4..d00de740a 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -168,6 +168,7 @@ sub cgi_postsignin ($$) { #{{{ my $postsignin=CGI->new($session->param("postsignin")); $session->clear("postsignin"); cgi($postsignin, $session); + cgi_savesession($session); exit; } else { @@ -273,15 +274,8 @@ sub cgi_editpage ($$) { #{{{ my @fields=qw(do rcsinfo subpage from page type editcontent comments); my @buttons=("Save Page", "Preview", "Cancel"); - eval q{use CGI::FormBuilder; use CGI::FormBuilder::Template::HTML}; + eval q{use CGI::FormBuilder}; error($@) if $@; - my $renderer=CGI::FormBuilder::Template::HTML->new( - fields => \@fields, - template_params("editpage.tmpl"), - ); - run_hooks(pagetemplate => sub { - shift->(page => "", destpage => "", template => $renderer->engine); - }); my $form = CGI::FormBuilder->new( fields => \@fields, header => 1, @@ -295,7 +289,8 @@ sub cgi_editpage ($$) { #{{{ params => $q, action => $config{cgiurl}, table => 0, - template => $renderer, + template => (-e "$config{templatedir}/editpage.tmpl" ? + {template_params("editpage.tmpl")} : ""), ); run_hooks(formbuilder_setup => sub { @@ -523,12 +518,35 @@ sub cgi_editpage ($$) { #{{{ } } #}}} +sub cgi_getsession ($) { #{{{ + my $q=shift; + + eval q{use CGI::Session}; + CGI::Session->name("ikiwiki_session_".encode_utf8($config{wikiname})); + + my $oldmask=umask(077); + my $session = CGI::Session->new("driver:DB_File", $q, + { FileName => "$config{wikistatedir}/sessions.db" }); + umask($oldmask); + + return $session; +} #}}} + +sub cgi_savesession ($) { #{{{ + my $session=shift; + + # Force session flush with safe umask. + my $oldmask=umask(077); + $session->flush; + umask($oldmask); +} + sub cgi (;$$) { #{{{ my $q=shift; my $session=shift; if (! $q) { - eval q{use CGI; use CGI::Session}; + eval q{use CGI}; error($@) if $@; $q=CGI->new; @@ -560,12 +578,7 @@ sub cgi (;$$) { #{{{ lockwiki(); if (! $session) { - CGI::Session->name("ikiwiki_session_".encode_utf8($config{wikiname})); - - my $oldmask=umask(077); - $session = CGI::Session->new("driver:DB_File", $q, - { FileName => "$config{wikistatedir}/sessions.db" }); - umask($oldmask); + $session=cgi_getsession($q); } # Auth hooks can sign a user in. @@ -595,12 +608,7 @@ sub cgi (;$$) { #{{{ $session->param(postsignin => $ENV{QUERY_STRING}); } cgi_signin($q, $session); - - # Force session flush with safe umask. - my $oldmask=umask(077); - $session->flush; - umask($oldmask); - + cgi_savesession($session); return; } elsif (defined $session->param("postsignin")) { @@ -611,6 +619,7 @@ sub cgi (;$$) { #{{{ print $q->header(-status => "403 Forbidden"); $session->delete(); print "You are banned."; + cgi_savesession($session); exit; }