DE | EN
Sitemap | Impressum
web2.0 Diaspora Vimeo Wir in der taz Wir bei Mastodon A-FsA Song RSS Twitter Youtube Unsere Artikel bei Tumblr Unsere Bilder bei Flickr Aktion FsA bei Wikipedia Spenden Facebook Bitmessage Spenden über Betterplace Zugriff im Tor-Netzwerk https-everywhere
Listing der Skripte für das Abstimmungstool

Online Abstimmungen und Umfragen

Listing der verwendeten Skripte

Diese Dateien stehen unter Creative Commons Lizenz CC BY-NC-SA 3.0, d.h. man/frau kann den Inhalt vervielfältigen, verbreiten und öffentlich zugänglich machen,Abwandlungen und Bearbeitungen des Werkes bzw. Inhaltes anfertigen bei Namensnennung, keine kommerzielle Nutzung und Weitergabe unter gleichen Bedingungen.

Zurück zu Online-Abstimmungen und Umfragen


 

Das Skript configWahl

#!/usr/bin/perl
#
# --- --- --- --- --- --- --- -------
#
#     Eine Abstimmung erzeugen
#
#    Dem Veranstalter der Abstimmung werden rechtliche Hinweise gegeben und die
#    möglichen Wahloptionen dargestellt. Er muss seinen Namen und seine Mailadresse
#    angeben. Er muss eine Endedatum für die Abstimung festlegen.
#    Er kann wählen ob die Abstimmungsberechtigten das Ergebnis zugeschickt bekommmen.
#    Er kann die Namen und Maildressen von bis zu 20 Wählern angeben und
#    einen Erläuterungstext für die zu verschickenden Mails eingeben.
#    Es gibt die Wahl-Möglichkeit des [x] ankreuzen (Checkbox) und der Abstimmung
#    mit Auswahl (o) ja-nein-enthalten (RadioButton).
#    Dann kann er bis zu 9 Optionen, Fragen, Kandidaten zur Abstimmung stellen.
#    Nach Absenden des Formulars werden für jeden Abstimmungsberechtigten ein
#    eineindeutiger Token erzeugt und dieser per Mail verschickt.
#    Dem Veranstalter der Abstimmung werden die ausgewählten Abtsimmungsoptionen
#    zur Kontrolle angezeigt.
#    Das Ergebnis der Abstimmung wird ihm nach Ablauf des Endedatums per Mail zugeschickt.
#
#    (CC BY-NC-SA 3.0) R. Hammerschmidt, Aktion Freiheit statt Angst e.V., Juni 2011
#
# --- --- --- --- --- --- --- -------
#    
{    
# --    Unterprogramme
# --    Einige Standardausgaben für die Webseite aufbauen
#
 sub Header
 {    print "Content-type: text/html\n\n";
    print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
    print "<html>\n";
    print "<head>\n";
    print "<title>Abstimmung erzeugen</title>\n";
    print "</head>\n";
    print "<body bgcolor=\"#E5FFE0\" text=\"#000000\" link=\"#0000FF\" vlink=\"#3080FF\"alink=\"#aa00aa\">\n";
    print "<span style=\"font-size: 12px;font-family:'sans-serif'\">\n";
    print "<img src=\"/images/icons/201107rechenbrett.jpg\" width=\"80\">\n";
    print "<a href=\"http://www.aktion-freiheitstattangst.org/\"><img src=\"/images/logo/logo_fsa_01.jpg\" width=\"400\"></a>\n";
    print "<img src=\"/images/icons/201107rechenbrett.jpg\" width=\"80\">\n";
    print "<hr>\n";
    print "<h3>Abstimmungen / Umfragen leicht gemacht.</h3>\n";
    print "Dieses Tool soll Ihnen erm&ouml;glichen zu beliebigen Themen Umfragen oder Abstimmungen zu gestalten.\n";
    print "Da wir uns f&uuml;r den Datenschutz einsetzen, haben wir versucht das Tool sicher und anonym zu gestalten.<p>\n";
    print "Folgende M&ouml;glichkeiten stehen zur Verf&uuml;gung:<br>\n";
    print "<ul><li>Es k&ouml;nnen bis zu 20 Teilnehmer befragt werden. (Die Begrenzung ist als Spam-Schutz gedacht.)\n";
    print "<li>Es k&ouml;nnen bis zu 9 Optionen/Kandidaten abgefragt werden.\n";
    print "<li>Als Antworten k&ouml;nnen \"ja-nein-enthalten\" (Radio Button) oder \"ankreuzen\" (Checkbox) ausgew&auml;hlt werden.\n";
    print "<li>Die Befragten bekommen eine Mail mit einem eindeutigen Token, der nur eine Abstimmung zul&auml;sst.\n";
    print "<li>Mehrmaliges W&auml;hlen ist nicht m&ouml;glich.\n";
    print "<li>Der Veranstalter der Abstimmung erh&auml;t nach Ablauf der Abstimmung eine Mail mit dem Ergebnis.\n";
    print "<li>Die Befragten bekommen den Stand der Befragung weder beim W&auml;hlen noch im Nachhinein zur Kenntnis.\n";
    print "<li>Die Befragten erhalten keine Kenntniss &uuml;ber ihre Mitw&auml;hler oder deren Wahlverhalten.\n";
    print "<li>Der Stand der Wahl oder das Ergebnis werden von keinem Mitarbeiter von Aktion FsA e.V. angeschaut. Nach dem Ende der Wahl und dem Verschicken per Mail an den Veranstalter der Abstimmung wird die Ergebnisdatei gel&ouml;scht.  \n";
    print "<li><b>Haftungsausschlu&szlig;:</b> Aktion FsA e.V. stellt lediglich dieses Tool zur Verf&uuml;gung und &uuml;bernimmt keine Garantie f&uuml;r die Richtigkeit und Vollst&auml;ndigkeit der Ergebnisse der Umfrage, noch f&uuml;r Folgen daraus.\n";
    print "<li>Aktion FsA e.V. bem&uuml;ht sich den Service dauerhaft anzubieten, &uuml;bernimmt jedoch keine Garantie f&uuml;r die Funktion &uuml;ber den gesamten Abtsimmungszeitraum.\n";
    print "<li>Der Nutzer des Tools verpflichtet sich damit keine Inhalte zu verbreiten, die rechtswidrig, sch&auml;digend, bedrohend, missbr&auml;uchlich, bel&auml;stigend, unerlaubt, verleumderisch, vulg&auml;r, obsz&ouml;n, unanst&auml;ndig, pers&ouml;nlichkeitsrechtsverletzend, hasserf&uuml;llt oder rassisch, ethnisch oder anderweitig anst&ouml;&szlig;ig sind.\n";
    print "<li><b>Der Nutzer best&auml;tigt die Kenntnisnahme dieser Bedingungen mit dem Absenden des Abstimmungsformulars.</b>\n";
    print "<li>Aktion FsA w&uuml;nscht viel Erfolg und freut sich &uuml;ber jede Form der R&uuml;ckmeldung, z.B. per Mail an <a href=mailto:kontakt\@aktion-fsa.de>kontakt\@aktion-fsa.de</a> oder\n";
        print "schreiben Sie uns Ihre Meinung zu diesem Tool direkt unter <a href=\"http://www.aktion-freiheitstattangst.org/kampagnen/76-anti-ueberwachung/2235-anonyme-abstimmungen-und-umfragen\">Anonyme Abstimmungen und Umfragen</a><br>\n";
    print "</ul><hr>\n";
 }
#
# --    Webseite abschliessen
#
 sub Tail
  {    print "</span>\n";
    print "</body>\n";
    print "</html>\n";
 }
#
# --    Formular Webseite anzeigen
#
 sub Formular
 {    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
    $year=$year-100; $mon=sprintf("%.2d",$mon+1); $mday=sprintf("%.2d",$mday);
    $startdat=join('.',$mday,$mon,$year);
# --    Eingabe Formular darstellen    
    Header;
    print "<form action=\"configWahl.pl\" method=\"post\" >\n";
    print "<h3>Abstimmung starten</h3> <p>\n";
    print "Die Abstimmung startet heute ($startdat) mit dem Abschicken des Formulars.<p>\n";
    print "<input type=\"hidden\" name=\"startdat\" size=\"3\" maxlength=\"30\" value=\"$startdat\"> \n";
    print "<b>Name und Mailadresse des f&uuml;r die Wahl Verantwortlichen</b><br> \n";
    print "Name: <input type=\"text\" name=\"nammast\" size=\"30\" maxlength=\"60\"><p> \n";
    print "Mailadresse des f&uuml;r die Wahl Verantwortlichen:<br> \n";
    print "<input type=\"text\" name=\"master\" size=\"40\" maxlength=\"60\"><br> \n";
    print "An diese Mailadresse wird das Ergebnis nach Ablauf der Wahl geschickt.<p> \n";
    print "Bitte ankreuzen, wenn das Abstimmungsergebnis zus&auml;tzlich an alle Beteiligten verschickt werden soll. \n";
        print "<input type=\"checkbox\" name=\"alleMail\"> <p> \n";
    print "Welches soll der letzte Tag der Abstimmung sein (dd.mm.yy)? \n";
    print "<input type=\"text\" name=\"enddat\" size=\"8\" maxlength=\"8\"><p> \n";
    print "Nun bitte die Abstimmungsberechtigten angeben.<br> \n";
    print "Bitte bis zu $anzPers Teilnehmer mit Anrede, Name, Mailadresse eingeben. (Anrede ist optional)<p>\n";
    print "<table style=\"font-size: 12px;\">\n";
    print "<tr><td></td><td>Anrede</td><td>Name</td><td>E-Mail</td></tr>\n";
    for($i=1; $i<=$anzPers; $i++ )
    { $nr=sprintf("%.2d",$i);  $Anr=join('',"anr",$nr);
      $Nam=join('',"nam",$nr); $Mailad=join('',"mailadr",$nr);
      print "<tr><td>$nr</td><td><input type=\"text\" name=\"$Anr\" size=\"5\" maxlength=\"10\" </td>\n";
      print "<td><input type=\"text\" name=\"$Nam\" size=\"40\" maxlength=\"40\"</td> \n";
      print "<td><input type=\"text\" name=\"$Mailad\" size=\"40\" maxlength=\"60\"</td></tr> \n";
    }
    print "</table><br>\n";
    print "<p>Mailtext zur Erl&auml;uterung der Abstimmung (am besten mit einem erkl&auml;renden Titel)<br>\n";
#    print "<input type=\"text\" name=\"txt\" size=\"80\" maxlength=\"800\" \n";
    print "<textarea name=\"txt\" cols=\"70\" rows=\"10\"></textarea>\n";

    print "<p><b>Art der Wahl</b><br>(Sollen nur Optionen beliebig angekreuzt werden oder bei jeder Option Ja-Nein-Enthaltung?)<br>\n";
    print "<p>[X] CheckBox oder (o) RadioButton mit Ja-Nein-Enthaltung?<br>\n";
    print "<input type=\"radio\" name=\"art\" value=\"cb\"> als CheckBox<br> \n";
    print "<input type=\"radio\" name=\"art\" value=\"rb\" checked> als RadioButton<p>\n";
    print "<b>Die Wahloptionen,</b> bzw. eine Frage, Behauptung oder ein Kandidat (max. 80 Zeichen)<br>\n";
    print "1 <input type=\"text\" name=\"op1\" size=\"40\" maxlength=\"80\"><br> \n";
    print "2 <input type=\"text\" name=\"op2\" size=\"40\" maxlength=\"80\"><br> \n";
    print "3 <input type=\"text\" name=\"op3\" size=\"40\" maxlength=\"80\"><br> \n";
    print "4 <input type=\"text\" name=\"op4\" size=\"40\" maxlength=\"80\"><br> \n";
    print "5 <input type=\"text\" name=\"op5\" size=\"40\" maxlength=\"80\"><br> \n";
    print "6 <input type=\"text\" name=\"op6\" size=\"40\" maxlength=\"80\"><br> \n";
    print "7 <input type=\"text\" name=\"op7\" size=\"40\" maxlength=\"80\"><br> \n";
    print "8 <input type=\"text\" name=\"op8\" size=\"40\" maxlength=\"80\"><br> \n";
    print "9 <input type=\"text\" name=\"op9\" size=\"40\" maxlength=\"80\"><br> \n";

    print "<input type=\"submit\" value=\"Absenden und Abstimmung starten\"> \n";
    print "<input type=\"reset\" value=\"Abbrechen\"> \n";
    print "</form><br>\n";
    print "Hiermit best&auml;tige ich die Kenntnisnahme und Einhaltung der oben genannten Bedingungen.</b><br>\n";
    print "(Bitte Geduld, es dauert 1 Sekunde pro Abstimmenden um die Token zu berechnen.)\n";
    Tail;

 }

# --- --- --- --- --- --- ------
#
# -- Mails mit Einladung zur Abstimmung verschicken an alle Teilnehmer mit einem
# -- Einladungstext und einem eineindeutigen Token verschicken
#
  sub sendMail
  { print "<hr>\n"; $anz=0;
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
    $year=$year+1900;
    $min=sprintf("%.2d",$min);
    $sec=sprintf("%.2d",$sec);
    $hour=sprintf("%.2d",$hour);
    my @monNam = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
    my @dayNam = qw( Sun Mon Tue Wed Thu Fri Sat );
#    $now = localtime;
    for($i=0; $i<=$#ma; $i++)
    {   
       ($hasi,$tmp)=split(' ',$has[$i],2); $hasi=~ s/\n//; $anz++;
       print "$anz: Eine Mail an $an[$i] $na[$i] mit Adresse $ma[$i] wurde verschickt.<br>\n";
       open(MAIL,"|/maildat/sendmail -bs >/dev/null") || die;
       print MAIL "HELO mail.aktion-fsa.de\n";
       print MAIL "MAIL FROM: kontakt\@aktion-fsa.de\n";
       print MAIL "RCPT TO:  $ma[$i]\n";
       print MAIL "DATA\n";
#    print MAIL "Date: $now +0200\r\n";    
    print MAIL "Date: $dayNam[$wday], $mday $monNam[$mon] $year $hour:$min:$sec +0200\r\n";
       print MAIL "From: rh\@aktion-fsa.de\r\n";
       print MAIL "Subject: Aufruf zur Abstimmung fuer \"$na[$i]\" \r\n";
       print MAIL "To:  $ma[$i]\r\n";
#      print MAIL "Content-Type: text/plain; charset=UTF-8\r\n";
       print MAIL "Content-Type: text/plain; charset=ISO-8859-1\r\n";
       print MAIL "Content-Transfer-Encoding: 8bit\r\n";
       print MAIL "\r\n";
       print MAIL "$nammast mit der Mailadresse $mastermail hat Sie zur Abstimmung, bzw. Umfrage \"$survey\" eingeladen:\r\n";
       print MAIL "\r\n";
       print MAIL "$mailtxt\r\n";
       print MAIL "\r\n";
       print MAIL "\r\n";
       print MAIL "Um an der Abstimmung teilzunehmen, muss der nachfolgende Link angeklickt werden.\r\n";
       print MAIL "Achtung! Der Link sollte nur aus einer Zeile ohne Zeilenwechsel bestehen.\r\n";
       print MAIL "<http://aktion-freiheitstattangst.org/cgi-bin/makeWahl.pl?S=$survey&H=$hasi> \r\n";
       print MAIL "\r\n";
       print MAIL "-- \r\n";
       print MAIL "Sollten Sie den Absender der Mail $mastermail nicht kennen, so ignorieren Sie diese Nachricht.\r\n";
       print MAIL "Aktion Freiheit statt Angst e.V. stellt lediglich das verwendete Umfragetool kostenlos bereit.\r\n";
       print MAIL "Sollten Sie wiederholt unverlangt Mails mit diesem Tool bekommen, so teilen Sie uns dies bitte mit.\r\n";
       print MAIL "kontakt\@aktion-fsa.de</a>\r\n";
       print MAIL "\r\n";
       print MAIL ".\r\n";
       close(MAIL);
     }
  }                        # Subroutine fertig
#
# --- --- --- --- --- ----------
  sub Umlaute            # UTF-8 Umlaute    umwandeln (wird nicht benötigt)
  {  
          $ae=join('',chr(195),chr(164));            # À
              $oe=join('',chr(195),chr(182));            # ö
              $ue=join('',chr(195),chr(188));            # ÃŒ
              $Ae=join('',chr(195),chr(132));            # Ä
              $Oe=join('',chr(195),chr(150));            # Ö
              $Ue=join('',chr(195),chr(144));            # Ü
              $wae=join('',chr(228));            # ÃŒ
              $woe=join('',chr(246));            # ÃŒ
              $wue=join('',chr(252));            # ÃŒ
              $wAe=join('',chr(196));            # ÃŒ
              $wOe=join('',chr(214));            # ÃŒ
              $wUe=join('',chr(220));            # ÃŒ
              $wss=join('',chr(223));            # ss
          $_ =~ s/$ae/ae/g;    # Umlaute korr.
                  $_ =~ s/$oe/oe/g;
                  $_ =~ s/$ue/ue/g;
                  $_ =~ s/$Ae/Ae/g;
                  $_ =~ s/$Oe/Oe/g;
                  $_ =~ s/$Ue/Ue/g;
                  $_ =~ s/$wae/ae/g;
                  $_ =~ s/$woe/oe/g;
                  $_ =~ s/$wue/ue/g;
                  $_ =~ s/$wAe/Ae/g;
                  $_ =~ s/$wOe/Oe/g;
                  $_ =~ s/$wUe/Ue/g;
                  $_ =~ s/$wss/ss/g;
  }                        # Subroutine fertig
#
# --- --- --- --- --- ----------
  sub Ausgabe                    # Bestätigung des Wahlbeginns
  {  
    print "<br>Es darf nun gew&auml;hlt werden.<br> \n";
    print "<p><b>Zur&uuml;ck zu <a href=\"http://aktion-freiheitstattangst.org\">Aktion Freiheit statt Angst</a> \n";
  }                        # Subroutine fertig
#
# --- --- --- --- --- ---------
# --    Hauptprogramm
#
    $anzPers=20; $anzOpt=9;            # z.Zt. max. 20 Wähler und max. 9 Optionen
#
# --    ankommende Argumente beim Aufruf des Skripts lesen
        if($ENV{'REQUEST_METHOD'} eq 'GET') {    $Daten = $ENV{'QUERY_STRING'} }
        else         {    read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});     }  
        @Formularfelder = split(/&/, $Daten);
    $anz=0;
        foreach $Feld (@Formularfelder)
        {    $anz++; ($name, $value) = split(/=/, $Feld);
                $value =~ tr/+/ /;
                $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
                $value =~ s/<!--(.|\n)*-->//g;
                push(@nlist,$name);
                push(@vlist,$value);
        }                    # end of saving parameter
    if($#nlist < 0)             # wenn keine Parameter, dann
# --    Formular  anzeigen und ausfüllen lassen
    { Formular }
    else     
# --    Daten für die Abstimmung anzeigen und Abstimmung starten
    {    Header;                # HTML Header aufbauen
#        print "$anz :: $#nlist<br>";
#        for($i=0; $i<=$#nlist; $i++ ) {print "$nlist[$i] : $vlist[$i]<br>\n"}
# --        Parameterübergabe und Ausgabe
        for($i=0; $i<=$#nlist; $i++ )
        { $_=$nlist[$i];
          if(/startdat/)
            { $startdat=$vlist[$i] }
          if(/enddat/)
            { $enddat=$vlist[$i];
              ($mday,$mon,$year)=split('\.',$enddat);
              $mon=sprintf("%.2d",$mon); $mday=sprintf("%.2d",$mday);
              $enddat=join('.',$mday,$mon,$year);
            }
          if(/alleMail/) {$alleMail=$vlist[$i]}
          if(/nammast/) {$nammast=$vlist[$i]}
          if(/master/) {$mastermail=$vlist[$i]}
          if((/mailadr/)and($vlist[$i] ne ""))
            { push(@an, $vlist[$i-2]);  
              push(@na, $vlist[$i-1]); push(@ma, $vlist[$i]);
            }
#          if(/txt/) {$_=$vlist[$i]; Umlaute; $mailtxt=$_ }    # nicht nötig, keine UTF-8 Umlaute
          if(/txt/) {$_=$vlist[$i]; $mailtxt=$_ }
          if(/art/) {$art=$vlist[$i]}
          if((/op/)and($vlist[$i] ne ""))
            { push(@op, $vlist[$i])
            }
        }
        for(@ma) { $adr=$_; sleep 1;         # 1 Sek. Zeit vergehen lassen, für verschiedene Token
               $timestamp = join(':',localtime);
               open(TXT, ">/somewhere/tmp.tmp");
               print TXT "$adr $timestamp\n";
               close(TXT);            # Token bilden
               system("/usr/bin/md5sum /somewhere/tmp.tmp > /somewhere/tmp2.tmp");
               open(TXT, "</somewhere/tmp2.tmp");
               while(<TXT>) { push(@has,$_);
                    }         Token abspeichern
               close(TXT);
               $_=$adr;
             }
# --        alle temporären Dateien löschen
        system("/bin/rm /somewhere/tmp*.tmp");
# --        für Survey eindeutigen Namen festlegen
#        dazu Nr. der Umfrage um 1 erhöhen und mit Datum versehen
           open(TXT, "</somewhere/SurvNr.txt");
           while(<TXT>) {$snr=$_}
           close(TXT);
        $survey=join('-',"Survey",$startdat,$enddat,$snr);
        $optidat=join('',$survey,".opti");
        $optidat=join('/',"/somewhere",$optidat);
        $hashdat=join('',$survey,".hash");
        $hashdat=join('/',"/somewhere",$hashdat);
        $snr++;
           open(TXT, ">/somewhere/SurvNr.txt");
           print TXT $snr;
           close(TXT);
        $wae=$#ma+1; $wop=$#op+1;
#
# --        Alle gewählten Wahloptionen dem Veranstalter anzeigen
        print "<h3>Die Abstimmung wurde gestartet</h3>\n";
        print "Bezeichnung der Abstimmung:<b> $survey</b><br> mit $wae W&auml;hler(n) und $wop Wahloption(en)<hr><br>\n";
        print "<b>verschickter Mailtext:</b> <p>$mailtxt<br><hr><b>Art der Wahl: </b>\n";
        if($art=~ s/rb/rb/)
        { print "Abstimmung mit RadioButton <p>\n";
        } else
        { print "Abstimmung mit Checkbox <p>\n";
        }
        print "<b>Die Wahloptionen lauten:</b> <p>\n";
        for(@op)
        { # Umlaute;            # nicht nötig, keine UTF-8 Umlaute
          print "$_ <br>\n"
        }
        $allemail=$mastermail;
        if($alleMail eq "on")        # Das Ergebnis der Wahl soll an alle Wähler verschickt werden
        { print "Das Ergebnis der Abstimmung wird am Wahlabend an alle W&auml;hler verschickt.<br>\n";
          $allemail=join(':',$mastermail,@ma);
        }
# --        Wahl vorbereiten
        open(TXT, ">$optidat");        # Optionen ablegen
#                        # art AnzWaehler 0=schon gewaehlt Leitername  LeiterMail+ua
        print TXT "$art    $wae    0    $nammast    $allemail\n";
        for(@op) { print TXT "$_    0    0    0\n" }
        close(TXT);
#        system("/usr/bin/gpg   ");    # Abstimmungsliste verschluesseln (noch draft)
        open(TXT, ">$hashdat");        # Token in der Hash-Datei ablegen
        for(@has)
        { ($h,$t)= split(' ',$_,2); print TXT "$h\n"
        }
        close(TXT);
        sendMail;            # Mails verschicken
        Ausgabe;
        Tail;                # HTML Datei abschließen
    }
}


Das Skript makeWahl

#!/usr/bin/perl
#
# --- --- --- --- --- --- --- -------
#
#     Abstimmung durchführen
#
#    Das Skript wird durch den Abstimmungs-Link eines Wahlberechtigten aufgerufen.
#    Nach Prüfung der Wahlberechtigung wird das Formular zur Wahl aufgebaut.
#    Nach Absenden des Formulars wird die Berechtigung erneut geprüft und dieser Token gelöscht.
#    Die Abstimmung wird zum bisherigen Wahlergebnis hinzu addiert.
#    Unberechtigte Aufrufe der Seite ohne gültigen Token werden abgewiesen.
#   
#    (CC BY-NC-SA 3.0) R. Hammerschmidt, Aktion Freiheit statt Angst e.V., Juni 2011
#
# --- --- --- --- --- --- --- -------
#   
{   
# --    Unterprogramme
#
# --    Einige Standardausgaben für die Webseite aufbauen
#
 sub Header
 {    print "Content-type: text/html\n\n";
    print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
    print "<html>\n";
    print "<head>\n";
    print "<title>Abstimmung durchf&uuml;hren</title>\n";
    print "</head>\n";
    print "<body bgcolor=\"#E5FFE0\" text=\"#000000\" link=\"#0000FF\" vlink=\"#3080FF\"alink=\"#aa00aa\">\n";
    print "<span style=\"font-size: 12px;font-family:'sans-serif'\">\n";
        print "<img src=\"/images/icons/201107rechenbrett.jpg\" width=\"80\">\n";
        print "<a href=\"http://www.aktion-freiheitstattangst.org/\"><img src=\"/images/logo/logo_fsa_01.jpg\" width=\"400\"></a>\n";
        print "<img src=\"/images/icons/201107rechenbrett.jpg\" width=\"80\">\n";
     print "<p><b>Aktuelle Abstimmung durchf&uuml;hren</b><br>\n";
    print "Aktion Freiheit statt Angst e.V. stellt hiermit ein kostenloses Umfragetool bereit.<br>\n";
    print "Wir speichern keine pers&ouml;nlichen Daten von Ihnen. <br>\n";
    print "Sie wurden zu dieser Abstimmung eingeladen vom Absender der von Ihnen angeklickten E-Mail. <br>\n";
    print "Sollten Sie wiederholt unverlangt Mails mit diesem Tool bekommen, so teilen Sie uns dies bitte per Mail an <a href=\"mailto:kontakt\@aktion-fsa.de\">kontakt\@aktion-fsa.de</a> mit oder <br>\n";
    print "schreiben Sie uns Ihre Meinung zu diesem Tool direkt unter <a href=\"http://www.aktion-freiheitstattangst.org/kampagnen/76-anti-ueberwachung/2235-anonyme-abstimmungen-und-umfragen\">Anonyme Abstimmungen und Umfragen</a><br>\n";
    print "<p><b>Zur Website von <a href=\"http://aktion-freiheitstattangst.org\">Aktion Freiheit statt Angst</a></b> \n";
    print "<hr>\n";
    print "\n";
    print "\n";
 }
#
# --    Webseite abschliessen
#
 sub Tail
  {    print "</span>\n";
    print "</body>\n";
    print "</html>\n";
 }
#
# --    Formular Webseite anzeigen
#
 sub Formular
 {   
# --    Eingabe Formular für den Wähler darstellen   
    Header;                # HTML Header
#    print "$anz :: $#nlist<br>";     # 2 Zeilen Kontrollausgabe zum Testen
#    for($i=0; $i<=$#nlist; $i++ ) {print "$i, $nlist[$i] : $vlist[$i]<br>\n"}
    $survey=$vlist[0];
    $hash=$vlist[1];
    $optidat=join('',$survey,".opti");
    $optidat=join('/',"/somewhere",$optidat);        # Datei mit den Wahloptionen
    $hashdat=join('',$survey,".hash");
    $hashdat=join('/',"/somewhere",$hashdat);        # Hashdatei mit den Token
    open(IN, "<$hashdat");            # Hashes lesen und Berechtigung prüfen
    $ok=0;
    while(<IN>) {    push(@has,$_);
            if(/$hash/) {$ok=1}    # Token in der Hashdatei gefunden
            }
    close(IN);
    if($ok==0)        # Ablehnung eines nicht Wahlberechtigten
    { print "Sorry, nicht in der W&auml;hlerliste gefunden<br>\n";
    }
    else
# --    Token ist ok, darf waehlen
    { $i=0;
      open(IN, "<$optidat");            # Optionen lesen
      while(<IN>)    { if($i==0)
              { $i++; $_=~ s/\n//; $art=$_;    # CheckBox oder RadioButton
              } else
              { ($opti,$z1,$z2,$z3)=split('    ',$_);
                push(@op,$_);
              }
            }
      close(IN);
      print "<form action=\"makeWahl.pl\" method=\"post\" >\n";    # Formular aufbauen
      print "<b>Abstimmung starten</b><p>\n";
      print "Zur Teilnahme an der Abstimmung <b>\"$survey\"</b><p>\n";
      print "Es gibt folgende Wahlm&ouml;glichkeiten:<p>\n";
      print "<p>Wahloptionen<br>\n";
      $i=0;
      if($art=~ s/rb/rb/ )
      { for(@op)
        { ($opti,$z1,$z2,$z3)=split('    ',$_);
          $i++; print "Ja: <input type=\"radio\" name=\"$i\" value=\"ja\">|&nbsp;&nbsp;  Nein: <input type=\"radio\" name=\"$i\" value=\"nein\">| &nbsp;&nbsp; Enthaltung: <input type=\"radio\" name=\"$i\" value=\"enth\" checked> $opti<br> \n";
        }
      } else
      { for(@op)
        {    ($opti,$z1,$z2,$z3)=split('    ',$_);
        print "<input type=\"checkbox\" name=\"wahl\" value=\"$opti\"> $opti<br> \n";
        }
      }
      print "<p><input type=\"hidden\" name=\"dum\" size=\"3\" maxlength=\"30\" value=\"dummy\"> \n";
      print "<p><input type=\"hidden\" name=\"s\" size=\"3\" maxlength=\"30\" value=\"$survey\"> \n";
      print "<p><input type=\"hidden\" name=\"h\" size=\"3\" maxlength=\"30\" value=\"$hash\"> \n";
      print "Der Token \"$hash\" wird mit dieser <br> \n";
      print "Abstimmung gel&ouml;scht und kann nicht erneut verwendet werden.<br> \n";
      print "<p><input type=\"submit\" value=\"Abstimmen\"> \n";
      print "<input type=\"reset\" value=\"Abbrechen\"><p> \n";
      print "</form>\n";
    }
    Tail;                    # HTML Datei abschließen
 }                        # Subroutine fertig
#
# --- --- --- --- --- ----------
  sub Ausgabe                # Bestätigung des Wahlvorgangs
  { 
    print "<b>Abstimmung ist erfolgreich verlaufen.</b><p> \n";
    print "Es wurde abgestimmt f&uuml;r:<br> \n";
    for($i=0; $i<=$#vlist-3; $i++)        # -3 wegen Token,Survey,Dummy
    { ($kan,$tmp)=split('    ',$vlist[$i],2);
      if($art=~ s/rb/rb/)
        { $op[$i]=~ s/\n//; ($opti,$z1,$z2,$z3)=split('    ',$op[$i]);
          print "$opti: ";
        }
      print "$kan<br>\n";
    }
    print "<p><b>Danke f&uuml;r die Beteiligung</b><br> \n";
  }                        # Subroutine fertig
#
# --- --- --- --- --- ---------
# --    Hauptprogramm
#
# --    Argumente des Aufrufs lesen
        if($ENV{'REQUEST_METHOD'} eq 'GET') {    $Daten = $ENV{'QUERY_STRING'} }
        else         {    read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});     } 
        @Formularfelder = split(/&/, $Daten);
    $anz=0;
        foreach $Feld (@Formularfelder)
        {    $anz++; ($name, $value) = split(/=/, $Feld);
                $value =~ tr/+/ /;
                $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
                $value =~ s/<!--(.|\n)*-->//g;
                push(@nlist,$name);
                push(@vlist,$value);
        }                    # end of saving parameter
    if($#nlist <= 1)             # 1. Aufruf des Wahlzettels mit Hash
# --    also Wahlzettel anzeigen und ausfüllen lassen
    { Formular }
# --    Wahl zählen und dem Wähler bestätigen        
    else    
    {    Header;
# --        Parameterübergabe und Ausgabe
# --        zuerst Berechtigung prüfen und Hash löschen
        $survey=$vlist[$#vlist-1];
        $hash=$vlist[$#vlist];
        $optidat=join('',$survey,".opti");
        $optidat=join('/',"/somewhere",$optidat);
        $hashdat=join('',$survey,".hash");
        $hashdat=join('/',"/somewhere",$hashdat);
        $hash=$vlist[$#vlist]; $ok=0; if($hash eq "") {$hash="no token"}
        open(TXT, "<$hashdat");    # Hashes lesen
        while(<TXT>)
        { push(@has,$_); #print "aus datei $_<br>\n";
        }
        close(TXT);
        open(TXT, ">$hashdat");    # Hashes schreiben und prüfen
        for(@has)
        { if(/$hash/)
            { $ok=1;     # Token ist ok, darf wählen
            } else
            { print TXT $_;
            }
        }
        close(TXT);
#
# --        ohne gültigen Token Wahl abbrechen und Skript beenden
        if($ok==0) { print "Sorry, Token ohne Berechtigung<br>\n"; Tail; exit 1}
#
# --        bei gültigem Token Wahlergebnis zaehlen und dem Wähler bestätigen
        $i=0;
          open(IN, "<$optidat");        # Optionen lesen
          while(<IN>)
        { if($i==0)             # CheckBox oder RadioButton
          { $i++; $_=~ s/\n//; ($art,$maxMail,$anzMail,$nammast,$mastermail)=split('    ',$_);
          } else
          { ($opti,$z1,$z2,$z3)=split('    ',$_);
            push(@op,$_);
        }                }
          close(IN);
        $anzMail++;            # ein Waehler hat zusaetzlich gewaehlt
        open(TXT, ">$optidat");        # Optionen ablegen
        print TXT "$art    $maxMail    $anzMail    $nammast    $mastermail\n";
        $i=0;
        for(@op)
        { $_=~ s/\n//; ($opti,$z1,$z2,$z3)=split('    ',$_);
          if($art=~ s/rb/rb/)
          {    if($vlist[$i]=~ s/ja/ja/) {$z1++}     # ja-nein-enthalten zählen
            if($vlist[$i]=~ s/nein/nein/) {$z2++}
            if($vlist[$i]=~ s/enth/enth/) {$z3++}
          } else
          {   for(@vlist)
            { if(/$opti/)        # wenn Checkbox angekreuzt,
                { $z1++;     # dann zählen
                }
            }
          }
          print TXT "$opti    $z1    $z2    $z3\n";    # Ergebnis abspeichern
          $i++;
        }
        close(TXT);
        Ausgabe;            # Wahlerfolg dem Wähler bestätigen
        Tail;
    }
}


Das Skript sendResult

#!/usr/bin/perl
# --- --- --- --- --- --- --- -------
#
#     Abstimmungsergebnis versenden
#
#    Dieses Skript wird täglich um 23:59 vom Cron gestartet.
#    Es prüft, ob Abstimmungen heute abgelaufen sind, verschickt die Ergebnisse
#    und löscht die zugehörigen Ergebnis- und die Hash-Dateien.
#    (CC BY-NC-SA 3.0) R. Hammerschmidt, Aktion Freiheit statt Angst e.V., Juni 2011
#
# --- --- --- --- --- --- --- -------
#   
{  sub sendMail                # Mail mit Ergebnis der Abstimmung verschicken
  { for(@adr)
    {    $adresse=$_;
        ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
        $year=$year+1900;
        $min=sprintf("%.2d",$min);
        $sec=sprintf("%.2d",$sec);
        $hour=sprintf("%.2d",$hour);
        my @monNam = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
        my @dayNam = qw( Sun Mon Tue Wed Thu Fri Sat );
       print "Mail an Adresse $adresse fuer Abstimmung \"$dat\" wurde verschickt.\n";
       open(MAIL,"|/maildat/sendmail -bs >/dev/null") || die;
       print MAIL "HELO mail.aktion-fsa.de\n";
       print MAIL "MAIL FROM: kontakt\@aktion-fsa.de\n";
       print MAIL "RCPT TO:  $adresse\n";
       print MAIL "DATA\n";
       print MAIL "Date: $dayNam[$wday], $mday $monNam[$mon] $year $hour:$min:$sec +0200\r\n";
       print MAIL "From: rh\@aktion-fsa.de\r\n";
       print MAIL "Subject: Ergebnis der Abstimmung fuer \"$dat\" \r\n";
       print MAIL "To:  $adresse\r\n";
#      print MAIL "Content-Type: text/plain; charset=UTF-8\r\n";
       print MAIL "Content-Type: text/plain; charset=ISO-8859-1\r\n";
       print MAIL "Content-Transfer-Encoding: 8bit\r\n";
       print MAIL "\r\n";
       print MAIL "\r\n";
       print MAIL "Das Ergebnis der Abstimmung fuer \"$dat\", zu der $nammast mit der Mailadresse $master eingeladen hatte, lautet: \r\n";
       print MAIL "\r\n";
    if($art=~ s/rb/rb/)
    { print MAIL "ja   nein    Enthaltung      Wahloption, bzw. Kandidat \r\n";
    }
    else
    {  print MAIL "angekreuzt      Wahloption, bzw. Kandidat \r\n";
    }
    for(@op) { print MAIL $_,"\r\n"}
        print MAIL "\r\n";
        print MAIL "Von den $maxMail Wahlberechtigten haben $anzMail abgestimmt.\r\n";
        print MAIL "\r\n";
       print MAIL "Je nach Laenge der Begriffe koennen sich die Zahlen verschieben. \r\n";
       print MAIL "Das Trennzeichen ist ein Tabulator. In einem Tabellenprogramm sollten \r\n";
       print MAIL "die Ergebnisse richtig untereinander stehen. \r\n";
       print MAIL "\r\n";
       print MAIL "Vielen Dank fuer die Erprobung des Umfragetools.\r\n";
       print MAIL "Bei Problemen sind wir fuer Hinweise an kontakt\@aktion-fsa.de dankbar.\r\n";
       print MAIL "Eigene Umfragen erzeugen unter\r\n";
       print MAIL "http://www.aktion-freiheitstattangst.org/cgi-bin/configWahl.pl\r\n";
       print MAIL "\r\n";
       print MAIL "Das Web-Team von Aktion FsA \r\n";
       print MAIL "\r\n";
       print MAIL ".\r\n";
       close(MAIL);
     }
   }
  }                        # Subroutine fertig
#
# --- --- --- --- --- ----------
# --    Hauptprogramm
#
    $verz="/somewhere/";            # Arbeitsverzeichnis festlegen
    opendir DIR, $verz || die "can't opendir $dir: $!";
    @liste = readdir (DIR);         # vorhanden Dateien listen
     ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
    $year=$year-100; $mon=sprintf("%.2d",$mon+1); $mday=sprintf("%.2d",$mday);
    $datum=join('.',$mday,$mon,$year);    # heutiges Datum
    for(@liste)                # Gibt es in der Liste aller Dateien
    { @op=();
      if(/opti/)
      { $dat=substr($_,0,length($_)-5); $ldat=join('',$verz,$_);
        ($sur,$start,$ende,$nr)=split('-',$_);
        if($ende eq $datum)            # eine Abstimmung, die heute endet?
        {    $i=0;
        open(TXT, "<$ldat");        # beendete Abstimmung lesen
        while(<TXT>)
        { if($i==0)
#                        # art AnzahlWaehler habenGewaehlt LeiterName LeiterMail+ua
              { $i++; $_=~ s/\n//; ($art,$maxMail,$anzMail,$nammast,$master)=split('    ',$_);
                        # print"$art,$maxMail,$anzMail,$nammast,$master\n";
              } else
              { $_=~ s/\n//; ($opti,$z1,$z2,$z3)=split('    ',$_);
                if($art=~ s/rb/rb/)
                { $_=join('    ',$z1,$z2,$z3,$opti);
                }
                else
                { $_=join('     ',$z1,$opti);
                }
                push(@op,$_);
              }
        }
        close(TXT);
# --        Mail(s) verschicken
#        eine oder viele Adressen? ... und Veranstalter abtrennen
        @adr=split(':',$master);    # an alle Mailadressen
        ($master,$tmp)=split(':',$master,2);
        sendMail;            # Mail verschicken
        system("/bin/rm $ldat");    # Ergebnis-Datei löschen
        }
      }
      if(/hash/)
      { $ldat=join('',$verz,$_);
        ($sur,$start,$ende,$nr)=split('-',$_);
#        print "$_\n$sur,$start,$ende,$nr\n";
        if($ende eq $datum)            # wenn Endedatum erreicht,
        {    system("/bin/rm $ldat");    # Hash-Datei löschen
        }
      }
    }


 


Kategorie[40]: Anti-Überwachung Short-Link dieser Seite: a-fsa.de/d/1Ex
Link zu dieser Seite: https://www.aktion-freiheitstattangst.org/de/articles/2278-listing-der-skripte-fuer-das-abstimmungstool.html
Link im Tor-Netzwerk: http://a6pdp5vmmw4zm5tifrc3qo2pyz7mvnk4zzimpesnckvzinubzmioddad.onion/de/articles/2278-listing-der-skripte-fuer-das-abstimmungstool.html
Tags: #e-voting #Anti-Ueberwachung #Selbstschutz #Online #Abstimmungen #UmfragenListing #Quellcode #Skripte #Perl
Erstellt: 2011-07-01 11:40:41
Aufrufe: 5493

Kommentar abgeben

Für eine weitere vertrauliche Kommunikation empfehlen wir, unter dem Kommentartext einen Verweis auf einen sicheren Messenger, wie Session, Bitmessage, o.ä. anzugeben.

Geben Sie bitte noch die im linken Bild dargestellte Zeichenfolge in das rechte Feld ein, um die Verwendung dieses Formulars durch Spam-Robots zu verhindern.

CC Lizenz   Mitglied im European Civil Liberties Network   Bundesfreiwilligendienst   Wir speichern nicht   World Beyond War   Tor nutzen   HTTPS nutzen   Kein Java   Transparenz in der Zivilgesellschaft

logos Mitglied im European Civil Liberties Network Creative Commons Bundesfreiwilligendienst Wir speichern nicht World Beyond War Tor - The onion router HTTPS - verschlüsselte Verbindungen nutzen Wir verwenden kein JavaScript Für Transparenz in der Zivilgesellschaft