[ubuntu-cl] algoritmo votacion

Cristian Barahona G. cristianvirtual en gmail.com
Jue Ago 19 22:26:34 BST 2010


Ubunteros
tal como me habia comprometido, diseñe un método de votación "ashi
shuper loco por ser" que espero nos sea de utilidad, se los explico y
luego abajo copio el código:
(el script fue bautizado por Alvaro Olivares como HugoChavez)

1.- tenemos una lista de los mails de los ubunteros de ubuntu-cl
2.- un script python q ejecutaré localmente, genera un md5 aleatorio q
de engrupido llamaré "token", este es almacenado en una base de datos y
enviado por mail, entonces cada ubuntero recibirá en su mail un token
único
3.- el ubuntero entra a una página web pone su token y marca sus votos
4.- al final del periodo hacemos publica la lista de tokens y sus votos,
así el conteo será publico y cada uno podrá asegurarse q sus votos están
correctos en el "cobarde anonimato" jajaja

problemas de mi propuesta:
- como los tokens salen desde mi mail, en el fondo yo si podría saber
quien voto por cada quien
- lo programe yo

les adjunto los script para q los corrijan, mejoren, agreguen jquery, se
rían... q se yo
(la base de datos esta en una tabla por facilidad de uso y paja)

################################################################
import sys
import smtplib
import mimetypes
import hashlib
import random
import MySQLdb

from email.MIMEText import MIMEText
from email.Encoders import encode_base64

de = 'cristianvirtual en gmail.com'
psw = '**********'

def enviar_email(para,codigo):
    mensaje = MIMEText("""votar en http://cristianvirtual.org\ntu codigo
de votacion es: %s""" % codigo)
    mensaje['From'] = de
    mensaje['To'] = para
    mensaje['Subject'] = "Votacion concilio"

    mailServer = smtplib.SMTP('smtp.gmail.com',587)
    mailServer.ehlo()
    mailServer.starttls()
    mailServer.ehlo()
    mailServer.login(de, psw)
    
    mailServer.sendmail(de, para, mensaje.as_string())
    mailServer.close()


def guardar_key(codigo):
    try:
        mycon = MySQLdb.connect(host = "**********", 
                                        user = "**********", 
                                        passwd = "**********", 
                                        db = "**********")
        mycursor = mycon.cursor()
    except MySQLdb.Error, e:
        print "wateo %d: %s" % (e.args[0], e.args[1])
        sys.exit(1)
    try:
        mycursor.execute("INSERT INTO ubunteros VALUES (%s,0)",
(codigo,))
        mycon.commit()
    except MySQLdb.OperationalError, reason:
        print "wateo MySQLdb: %s" % reason
        sys.exit(1)
        mycon.rollback()
    mycon.close()
        
def listado_emails():
    lista_emails = open('ubunteros.emails','r')
    for mail in lista_emails.readlines():
        m = hashlib.md5()
        m.update(str(random.random()))
        enviar_email(mail.strip(),m.hexdigest())
        guardar_key(m.hexdigest())
    lista_emails.close()
    

listado_emails()
################################################################
<?php
if ($_POST['votar'] && $_POST['token'] !='') {
        $conexion = mysql_connect("**********", "**********",
"**********");
        mysql_select_db("**********", $conexion);
        $query = "SELECT token, ya_voto FROM ubunteros WHERE
token='".$_POST['token']."' AND ya_voto=0";
        $rs = mysql_query($query, $conexion) or die(mysql_error());
        $tot = mysql_num_rows($rs);
        if ($tot == 1) {
                echo "se supone q hago el insert y todo eso";
                $q = "UPDATE ubunteros SET ya_voto=1,
op1=".$_POST['op1'].", op2=".$_POST['op2'].", op3=".$_POST['op3'].",
op4=".$_POST['op4'].", op5=".$_POST['op5']." WHERE
token='".$_POST['token']."'";
                mysql_query($q, $conexion) or die(mysql_error());
                echo "voto emitido, los resultados... el 25";
        } else {
                echo "<p>Este token ya voto, no existe o se esta
tratando de avivar</p>";
        }
} else { ?>
<form action="concilio_ubuntu.php" method="POST">
<table>
<tr>
    <td>Token:</td>
        <td><input type="text" name="token"/></td>
        </tr>
        <tr>
            <td>Ubuntero 1:</td>
                <td>SI <input type="radio" name="op1" value="1"/>
NO<input type="radio" name="op1" value="0" checked /></td>
                </tr>
        <tr>
            <td>Ubuntero 2:</td>
            <td>SI <input type="radio" name="op2" value="1"/> NO<input
type="radio" name="op2" value="0" checked /></td>
       </tr>
        <tr>
            <td>Ubuntero 3:</td>
            <td>SI <input type="radio" name="op3" value="1"/> NO<input
type="radio" name="op3" value="0" checked /></td>
       </tr>
        <tr>
            <td>Ubuntero 4:</td>
           <td>SI <input type="radio" name="op4" value="1"/> NO<input
type="radio" name="op4" value="0" checked /></td>
       </tr>
        <tr>
           <td>Ubuntero 5:</td>
           <td>SI <input type="radio" name="op5" value="1"/> NO<input
type="radio" name="op5" value="0" checked /></td>
       </tr>
        <tr>
            <td colspan="2"><input type="submit" name="votar"
value="Votar"/></td>
        </tr>
</table>
</form>
<? } ?>
################################################################


-- 
Cristian Barahona G.
http://www.cristianvirtual.org




Más información sobre la lista de distribución Ubuntu-cl