]> git.p6c8.net - selfforum.git/blobdiff - selfforum-cgi/user/fo_posting.pl
added error message for xml-parse-error.
[selfforum.git] / selfforum-cgi / user / fo_posting.pl
index 0bb18deb8b50ff1461f1e9db1493414a4f27e477..3126881d08c028735100323aca7d2b1697a4c373 100644 (file)
 ################################################################################
 
 use strict;
-use vars qw($Bin $Shared $Script $Config);
+use vars qw(
+  $Bin
+  $Shared
+  $Script
+  $Config
+  $VERSION
+);
 
 # locate the script
 #
@@ -21,12 +27,28 @@ BEGIN {
   $Shared  = "$Bin/../shared";
   $Config  = "$Bin/config";
   $Script  = ($null =~ /^.*\/(.*)$/)? $1 : $null;
+
+#  my $null = $0;
+#  $Bin     = ($null =~ /^(.*)\/.*$/)? $1 : '.';
+#  $Config  = "$Bin/../../daten/forum/config";
+#  $Shared  = "$Bin/../../cgi-shared";
+#  $Script  = ($null =~ /^.*\/(.*)$/)? $1 : $null;
 }
+
+# setting umask, remove or comment it, if you don't need
+#
+umask 006;
+
 use lib "$Shared";
 use CGI::Carp qw(fatalsToBrowser);
 
 use Conf;
 use Conf::Admin;
+use Posting::Cache;
+
+# Version check
+#
+$VERSION = do { my @r =(q$Revision$ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
 
 # load script configuration and admin default conf.
 #
@@ -49,6 +71,10 @@ $request -> handle_error or $request -> save;
 #
 $request -> response;
 
+# shorten the main file?
+#
+$request -> severance;
+
 #
 #
 ### main end ###################################################################
@@ -57,6 +83,7 @@ $request -> response;
 ### Posting::Request ###########################################################
 package Posting::Request;
 
+use Arc::Archive;
 use CheckRFC;
 use Encode::Plain; $Encode::Plain::utf8 = 1; # generally convert from UTF-8
 use Encode::Posting;
@@ -111,6 +138,21 @@ sub new {
   bless $self, $class;
 }
 
+sub severance {
+  my $self = shift;
+
+  my $stat = cut_tail ({
+    forumFile    => $self -> {conf} -> {forum_file_name},
+    messagePath  => $self -> {conf} -> {message_path},
+    archivePath  => $self -> {conf} -> {original} -> {files} -> {archivePath},
+    lockFile     => $self -> {conf} -> {original} -> {files} -> {sev_lock},
+    adminDefault => $self -> {conf} -> {admin},
+    cachePath    => $self -> {conf} -> {original} -> {files} -> {cachePath}
+  });
+#  die $stat->{(keys %$stat)[0]} if (%$stat);
+
+}
+
 ### sub response ###############################################################
 #
 # print the response to STDOUT
@@ -396,17 +438,17 @@ sub save {
             if (defined $q -> param ($formdata -> {$may{$_}} -> {name}));
         }
 
-        my ($stat, $xml, $mid);
+        my ($stat, $xml, $mid, $tid);
 
         # we've got a fup if it's a reply
         #
         if ($self -> {response} -> {reply}) {
           $pars -> {parentMessage} = $self -> {fup_mid};
           $pars -> {thread}        = $self -> {fup_tid};
-          ($stat, $xml, $mid) = write_reply_posting ($pars);
+          ($stat, $xml, $mid, $tid) = write_reply_posting ($pars);
         }
         else {
-          ($stat, $xml, $mid) = write_new_thread ($pars);
+          ($stat, $xml, $mid, $tid) = write_new_thread ($pars);
         }
 
         if ($stat) {
@@ -417,6 +459,13 @@ sub save {
           };
         }
         else {
+          my $cache = new Posting::Cache ($self->{conf}->{original}->{files}->{cachePath});
+          $cache -> add_posting (
+            { thread  => ($tid =~ /(\d+)/)[0],
+              posting => ($mid =~ /(\d+)/)[0]
+            }
+          );
+
           $self -> {check_success} = 1;
           my $thx = $self -> {conf} -> {show_posting} -> {thanx};
 
@@ -743,7 +792,7 @@ sub check_cgi {
     #
     my ($ftid, $fmid) = split /;/ => $q -> param ($formdata -> {followUp} -> {name}) => 2;
 
-    unless ($ftid =~ /\d+/ and $fmid =~ /\d+/) {
+    unless ($ftid =~ /^\d+$/ and $fmid =~ /^\d+$/) {
       $self -> {error} = {
         spec => 'unknown_followup',
         type => 'fatal'
@@ -797,6 +846,29 @@ sub check_cgi {
       #
       (my $val_ww = $val) =~ s/\s+//g;
 
+      if (exists ($formdata -> {$name {$_}} -> {type}) and $formdata -> {$name {$_}} -> {type} eq 'name') {
+        $val_ww =~ y/a-zA-Z//cd;
+
+        my @badlist = map {qr/\Q$_/i} qw (
+          # insert badmatchlist here
+        );
+
+        push @badlist => map {qr/\b\Q$_\E\b/i} qw(
+          # insert badwordlist here
+        );
+
+        for (@badlist) {
+          if ($val_ww =~ /$_/) {
+            $self -> {error} = {
+              spec => 'undesired',
+              desc => $name{$_},
+              type => 'fatal'
+            };
+            return;
+          }
+        }
+      }
+
       if (length $val_ww < $formdata -> {$name {$_}} -> {minlength}) {
         $self -> {error} = {
           spec => 'too_short',
@@ -837,6 +909,16 @@ sub check_cgi {
         };
         $self -> kill_param or return;
       }
+
+      elsif ($formdata -> {$name {$_}} -> {type} eq 'unique-id' and not may_id $val) {
+        $self -> {error} = {
+          spec => 'wrong_unique_id',
+          desc => $name{$_},
+          type => $formdata -> {$name {$_}} -> {errorType}
+        };
+          print STDERR "Manipuliert!";
+        $self -> kill_param or return;
+      }
     }
 
     if (exists ($formdata -> {$name {$_}} -> {values})

patrick-canterino.de