]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/CGI.pm
add a poll plugin
[ikiwiki.git] / IkiWiki / CGI.pm
index b90b43d8dc37a825ec680ca0a763330d66ca52d1..3e324ae1cbdcc834e467b131114006d17a07ed44 100644 (file)
@@ -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 {
@@ -478,20 +479,13 @@ sub cgi_editpage ($$) { #{{{
                $content=~s/\r/\n/g;
                writefile($file, $config{srcdir}, $content);
                
-               my $message="web commit ";
-               if (defined $session->param("name") && 
-                   length $session->param("name")) {
-                       $message.="by ".$session->param("name");
-               }
-               else {
-                       $message.="from $ENV{REMOTE_ADDR}";
-               }
-               if (defined $form->field('comments') &&
-                   length $form->field('comments')) {
-                       $message.=": ".$form->field('comments');
-               }
-               
                if ($config{rcs}) {
+                       my $message="";
+                       if (defined $form->field('comments') &&
+                           length $form->field('comments')) {
+                               $message=$form->field('comments');
+                       }
+                       
                        if ($newfile) {
                                rcs_add($file);
                        }
@@ -500,7 +494,8 @@ sub cgi_editpage ($$) { #{{{
                        # presumably the commit will trigger an update
                        # of the wiki
                        my $conflict=rcs_commit($file, $message,
-                               $form->field("rcsinfo"));
+                               $form->field("rcsinfo"),
+                               $session->param("name"), $ENV{REMOTE_ADDR});
                
                        if (defined $conflict) {
                                $form->field(name => "rcsinfo", value => rcs_prepedit($file),
@@ -529,12 +524,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;
@@ -566,12 +584,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.
@@ -601,12 +614,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")) {
@@ -617,6 +625,7 @@ sub cgi (;$$) { #{{{
                print $q->header(-status => "403 Forbidden");
                $session->delete();
                print "You are banned.";
+               cgi_savesession($session);
                exit;
        }