3 # This library of functions is used for filtering messages.
7 # processes approval decision.
11 # Subject, newsgroup, ShortDirectoryName, decision, comment
13 sub process_approval_decision {
14 my $cathow = @_>=6 ? pop(@_) : "UNKNOWN";
15 my $comment = pop( @_ );
16 my $decision = pop( @_ );
17 my $ShortDirectoryName = pop( @_ );
18 my $newsgroup = pop( @_ );
19 my $Subject = pop( @_ );
22 my $address = $newsgroups_index{$newsgroup};
24 my $message = "To: $newsgroups_index{$newsgroup}\n" .
25 "Subject: $Subject\n" .
26 "Organization: http://www.algebra.com/~ichudov/stump\n";
28 $message .= "\n# $cathow\n";
29 $message .= "\n$decision\n";
30 $message .= "comment $comment\n" if $comment;
31 &email_message( $message, $address );
33 my $sanisubj= $Subject;
34 $sanisubj =~ s/.*\:\://;
36 print STDERR "DECISION: $newsgroup | $ShortDirectoryName | $decision | $cathow | $now | $sanisubj\n";
38 &rmdir_rf( &article_file_name( $ShortDirectoryName ) );
43 ###################################################################### checkAck
44 # checks the string matches one of the substrings. A name is matched
45 # against the substrings as regexps and substrings as literal substrings.
47 # Arguments: address, listname
49 sub name_is_in_list { # address, listname
50 my $listName = pop( @_ );
51 my $address = pop( @_ );
56 open( LIST, &full_config_file_name( $listName ) ) || return "";
58 while( $item = <LIST> ) {
62 next unless $item =~ /\S/;
63 next if $item =~ /^\s*\#/;
65 if ($listName eq 'good.posters.list') {
66 if( lc $address eq lc $item ) {
70 if( eval { $address =~ /$item/i; } ) {
81 ######################################################################
82 # reviews incoming message and decides: approve, reject, keep
83 # in queue for human review
85 # Arguments: Newsgroup, From, Subject, Message, Dir
87 # RealSubject is the shorter subject from original posting
88 sub review_incoming_message { # Newsgroup, From, Subject, RealSubject, Message, Dir
90 my $message = pop( @_ );
91 my $real_subject = pop( @_ );
92 my $subject = pop( @_ );
94 my $newsgroup = pop( @_ );
96 if( &name_is_in_list( $from, "bad.posters.list" ) ) {
97 &process_approval_decision( $subject, $newsgroup, $dir, "reject blocklist", "", "auto bad poster" );
101 if( &name_is_in_list( $real_subject, "bad.subjects.list" ) ) {
102 &process_approval_decision( $subject, $newsgroup, $dir, "reject thread", "", "auto bad subject" );
106 if( &name_is_in_list( $message, "bad.words.list" ) ) {
107 &process_approval_decision( $subject, $newsgroup, $dir, "reject charter",
108 "Your message has been autorejected because it appears to be off topic
109 based on our filtering criteria. Like everything, filters do not
110 always work perfectly and you can always appeal this decision.",
115 my $warning_file = &article_file_name( $dir ) . "/stump-warning.txt";
118 $ignore_demo_mode = 1;
120 if( $match = &name_is_in_list( $from, "watch.posters.list" ) ) {
121 &append_to_file( $warning_file, "Warning: poster '$from' matches '$match' from the list of suspicious posters\n" );
122 print STDERR "Filing Article for review because poster '$from' matches '$match'\n";
123 return; # file message
126 if( $match = &name_is_in_list( $real_subject, "watch.subjects.list" ) ) {
127 &append_to_file( $warning_file, "Warning: subject '$real_subject' matches '$match' from the list of suspicious subjects\n" );
128 print STDERR "Filing Article for review because subject '$subject' matches '$match'\n";
129 return; # file message
132 if( $match = &name_is_in_list( $message, "watch.words.list" ) ) {
133 &append_to_file( $warning_file, "Warning: article matches '$match' from the list of suspicious words\n" );
134 print STDERR "Filing Article for review because article matches '$match'\n";
135 return; # file message
138 if( &name_is_in_list( $from, "good.posters.list" ) ) {
139 &process_approval_decision( $subject, $newsgroup, $dir, "approve", "",
140 "auto good poster" );
144 if( &name_is_in_list( $real_subject, "good.subjects.list" ) ) {
145 &process_approval_decision( $subject, $newsgroup, $dir, "approve", "",
146 "auto good subject" );
150 # if the message remains here, it is stored for human review.