#!/usr/bin/perl
use strict;
use warnings;

# CONFIG SECTION -------------------------------------------------------
my $SENDMAIL = '/usr/lib/sendmail -t -oi';         # Sendmail-Konfig.
my $SENDTO   = 'webmaster@netzmafia.de';           # Default-Empfaenger
my $SENTFROM = 'feedback-formular@netzmafia.de';   # Standard-Absender

# Dankeschoen-Seite und Fehlerseiten
my $ANTWORT       = 'http://www.netzmafia.de/dialog/antwort.html';
my $REFERER_ERROR = 'http://www.netzmafia.de/dialog/referer_error.html';
my $SYSTEM_ERROR  = 'http://www.netzmafia.de/dialog/system_error.html';
my @referers =                                     # zugelassene Referrer
    ( "www.netzmafia.de",
      "www.ee.hm.edu",
    );
# ----------------------------------------------------------------------

my $SUBJECT = 'Ausgabe des FEEDBACK-Formulars';
my $query_string = '';  # Formulareingabe auswerten
my ($key, $value);      #     -"-
my $EINGABE = '';       # Alle Formulardaten aufbereitet
my $referer = '';       # fuer Pruefung Referrer

# Formular einlesen, diesmal aber Spezialvariablen gesondert ueberpruefen
if ($ENV{'REQUEST_METHOD'} eq "GET")
  { $query_string = $ENV{'QUERY_STRING'}; }
elsif ($ENV{'REQUEST_METHOD'} eq "POST")
  { read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); }

foreach (split(/\&/,$query_string))
  {
  ($key,$value) = split(/=/,$_);
  $key =~ tr/\+/ /;
  $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ s/<!--(.|\n)*-->//g;

  if ("$key" eq "FORM_SUBJECT")   { $SUBJECT   = $value; next; }
  if ("$key" eq "FORM_SENTFROM")  { $SENTFROM  = $value; next; }
  if ("$key" eq "FORM_NEXT")      { $ANTWORT   = $value; next; }
  $EINGABE .= "$key: $value\n";
  }

# Ueberpruefen des Referrers,  nur Domain betrachten
$referer = $ENV{'HTTP_REFERER'};
$referer =~ s|^.*http://||;
$referer =~ s|/.*$||;
unless (($referer ne "") && grep(/$referer/,@referers))
  { print "Location: $REFERER_ERROR\n\n"; exit 0; }

# noch ein paar Statusinfos hinzufuegen
$EINGABE .= "\n\n
HTTP-Referer:   $ENV{'HTTP_REFERER'}
Remote-Host:    $ENV{'REMOTE_HOST'} 
Remote-Address: $ENV{'REMOTE_ADDR'}
";

# Absenden per Email
if (! open(MAIL, "| $SENDMAIL"))
  { print "Location: $SYSTEM_ERROR\n\n"; exit 0; }
print MAIL "From: $SENTFROM\n";
print MAIL "To: $SENDTO\n";
print MAIL "Subject: $SUBJECT\n";
print MAIL "Mime-Version: 1.0\n";
print MAIL "Content-Type: text/plain; charset=iso-8859-1\n";
print MAIL "Content-Transfer-Encoding: 8bit\n";
print MAIL "\n";
print MAIL $EINGABE;
close(MAIL);

# Alles ging gut - Dankeschoen-Seite aufrufen
print "Location: $ANTWORT\n\n";
