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$decision\n";
29 $message .= "comment $comment\n" if $comment;
30 &email_message( $message, $address );
32 my $sanisubj= $Subject;
33 $sanisubj =~ s/.*\:\://;
35 print STDERR "DECISION: $newsgroup | $ShortDirectoryName | $decision | $cathow | $now | $sanisubj\n";
37 &rmdir_rf( &article_file_name( $ShortDirectoryName ) );
42 ###################################################################### checkAck
43 # checks the string matches one of the substrings. A name is matched
44 # against the substrings as regexps and substrings as literal substrings.
46 # Arguments: address, listname
48 sub name_is_in_list { # address, listname
49 my $listName = pop( @_ );
50 my $address = pop( @_ );
55 open( LIST, &full_config_file_name( $listName ) ) || return "";
57 while( $item = <LIST> ) {
61 next unless $item =~ /\S/;
62 next if $item =~ /^\s*\#/;
64 if ($listName eq 'good.posters.list') {
65 if( lc $address eq lc $item ) {
69 if( eval { $address =~ /$item/i; } ) {
80 ######################################################################
81 # reviews incoming message and decides: approve, reject, keep
82 # in queue for human review
84 # Arguments: Newsgroup, From, Subject, Message, Dir
86 # RealSubject is the shorter subject from original posting
87 sub review_incoming_message { # Newsgroup, From, Subject, RealSubject, Message, Dir
89 my $message = pop( @_ );
90 my $real_subject = pop( @_ );
91 my $subject = pop( @_ );
93 my $newsgroup = pop( @_ );
95 if( &name_is_in_list( $from, "bad.posters.list" ) ) {
96 &process_approval_decision( $subject, $newsgroup, $dir, "reject blocklist", "", "auto bad poster" );
100 my $warning_file = &article_file_name( $dir ) . "/stump-warning.txt";
103 $ignore_demo_mode = 1;
105 if( $match = &name_is_in_list( $message, "watch.words.list" ) ) {
106 &append_to_file( $warning_file, "Warning: article matches '$match' from the list of suspicious words\n" );
107 print STDERR "Filing Article for review because article matches '$match'\n";
108 return; # file message
111 if( &name_is_in_list( $from, "good.posters.list" ) ) {
112 &process_approval_decision( $subject, $newsgroup, $dir, "approve", "",
113 "auto good poster" );
117 # if the message remains here, it is stored for human review.