diff options
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/mail_format.sh | 51 | ||||
| -rwxr-xr-x | scripts/process_incoming.pl | 82 | 
2 files changed, 133 insertions, 0 deletions
diff --git a/scripts/mail_format.sh b/scripts/mail_format.sh new file mode 100755 index 0000000..79073fe --- /dev/null +++ b/scripts/mail_format.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +#    NetUseMod is a program to moderate Usenet posts via web interface. +#    Copyright (C) 2024  Salahuddin <salahuddin@member.fsf.org> +# +#    This program is free software: you can redistribute it and/or modify +#    it under the terms of the GNU General Public License as published by +#    the Free Software Foundation, either version 3 of the License, or +#    (at your option) any later version. +# +#    This program is distributed in the hope that it will be useful, +#    but WITHOUT ANY WARRANTY; without even the implied warranty of +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#    GNU General Public License for more details. +# +#    You should have received a copy of the GNU General Public License +#    along with this program.  If not, see <https://www.gnu.org/licenses/>. + +TMPFILE=$1 + +FALLBACK_NEWSGROUP='test.newsgroup' +ADMIN_APPROVAL="NetUseMod Approval Key <YOU_APPROVAL_KEY_EMAIL@YOUR_DOMAIN>" +PATH_SUFFIX="netusemod.YOUR_DOMAIN!robomod!not-for-mail" + +post_message() { +    echo Path: "$PATH_SUFFIX" +    cat $TMPFILE                                              \ +	| formail -f -a "Newsgroups: $FALLBACK_NEWSGROUP"     \ +		  -I Path:                                    \ +		  -I X-Moderate-For:                          \ +		  -I Return-Path:                             \ +		  -I X-Mailer:                                \ +		  -I "X-400-Received:"                        \ +		  -I Received:                                \ +		  -I "From "                                  \ +		  -a "Approved: $ADMIN_APPROVAL"                                                      \ +		  -a "X-SCRM-Policy: https://YOUR_DOMAIN/"                                            \ +		  -a "X-SCRM-Info-1: Send submissions to YOUR_USER@YOUR_DOMAIN"                       \ +		  -a "X-SCRM-Info-2: Send technical complaints to YOUR_USER@YOUR_DOMAIN"              \ +		  -a "X-SCRM-Info-3: Send complaints about policy to YOUR_USER@YOUR_DOMAIN"           \ +		  -a "X-Comment: moderators do not necessarily agree or disagree with this article."  \ +		  -a "X-Robomod: NETUSEMOD, YOUR_USER@YOUR_DOMAIN"                                    \ +		  -a "X-Moderation-1: NETUSEMOD moderation tool"                                      \ +		  -a "X-Moderation-2: See https://YOUR_DOMAIN/"                                       \ +		  -I Lines:                                                                           \ +		  -I Cc:                                                                              \ +		  -I Status: + +} + +post_message; diff --git a/scripts/process_incoming.pl b/scripts/process_incoming.pl new file mode 100755 index 0000000..27232f5 --- /dev/null +++ b/scripts/process_incoming.pl @@ -0,0 +1,82 @@ +#!/usr/bin/perl + +#    NetUseMod is a program to moderate Usenet posts via web interface. +#    Copyright (C) 2024  Salahuddin <salahuddin@member.fsf.org> +# +#    This program is free software: you can redistribute it and/or modify +#    it under the terms of the GNU General Public License as published by +#    the Free Software Foundation, either version 3 of the License, or +#    (at your option) any later version. +# +#    This program is distributed in the hope that it will be useful, +#    but WITHOUT ANY WARRANTY; without even the implied warranty of +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#    GNU General Public License for more details. +# +#    You should have received a copy of the GNU General Public License +#    along with this program.  If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +my $message_dir = 'YOUR_HOME_DIR/incoming_news/'; +my $noreply_mail = 'no-reply@YOUR_DOMAIN'; +my $send_rec_ack = 1; + +sub saveIncomingMessage { +    my $dir_location       = shift; +    # $$ - The process number of the Perl running this script +    my $message_number     = time . $$; +    my $filename           = $dir_location . $message_number; +    my $incoming_message  = ''; + +    open(INCOMING_FILE, '>', $filename) or die $!; +    while (<>) { +	$incoming_message .= $_; +	print INCOMING_FILE; +	chop; +    } +    close(INCOMING_FILE); +    return $incoming_message; +} + +sub parseFromAndSubject { +    my $message       = shift; +    my $from          = ''; +    my $subject       = ''; +    my @message_array = split(/\n/, $message); + +    foreach(@message_array) { +	# first empty line +	if(/^$/) { +	    last;	     +	} +	if( /^From: / ) { +	    $from = $_; +	    $from=~ s/^From: //i; +	} elsif( /^Subject: / ) { +	    $subject = $_; +	    $subject =~ s/^Subject: //i; +	} +    } + +    # trim                                                                                                                                                                                                         +    $from =~ s/^\s+|\s+$//g; +    $subject =~ s/^\s+|\s+$//g; +    return ($from, $subject); +} + +sub sendReceiveAck { +    my ($from, $subject) = @_; +    system('echo "Submission received." | mail -s "Re: ' .  $subject . '" -r ' . $noreply_mail . ' \'' . $from . '\''); +} + +# & needed to pass $_ +my $incoming_message = &saveIncomingMessage($message_dir); +#print "incoming_message: \n" . $incoming_message . "\n"; + +if ($send_rec_ack eq 1) { +    my ($from, $subject) = parseFromAndSubject($incoming_message); +    # TODO: check return value +    sendReceiveAck($from, $subject); +}  | 
