Archivo historico de la wiki de EGC

Contenido archivado y de solo lectura, importado de la wiki original en julio de 2026. Puede contener enlaces rotos y material obsoleto.

Grupo de Cabina de votación (2014-15)

Definición

Un subsistema de AGORA@US para mostrar las opciones de la votación donde el votante pueda realizar la votación. El voto tiene que cifrarse en cliente, nunca debe llegar al servidor el voto en claro. A la cabina sólo podrán llegar usuarios autenticados que aún no hayan votado. El voto se enviará cifrado al almacenamiento de votos

Miembros

Iteraciones

Subsistemas relacionados

Para que el subsistema de Almacenamiento de votos, pueda obtener dicho voto, le mandaremos un JSON con la siguiente estructura:

{
  "age": "24",
  "answers": [
       {
          "question":"Pregunta 1", 
          "answer_question":"SI"
       },
       {
          "question":"Pregunta 2",
          "answer_question":"SI"
       }        
  ], 
  "id": 1, 
  "autonomous_community": "Andalucia", 
  "genre": "Masculino", 
  "id_poll": 32778

Para que el subsistema de Creación/Administración de Censos puedan comunicarse con nuestro subsistema, la URI que debe poner en el botón o enlace para que salga la cabina de votación es la siguiente:

http://localhost:8000/cabinaus/id_votacion/

Donde id_votacion siempre debe ser un número, por ejemplo:

http://localhost:8000/cabinaus/15/

ACLARACIONES RSA

Como ya se ha avisado, el cifrado-descifrado de RSA tanto en Python como en Java ya funcionan y el voto es guardado cifrado. El formato que tiene al guardarse en la base de dato de almacenamiento es:

{"votes":["J9mbVwCRkeIGewJTPyZ7ZYxDJ7GsFO.........vERJUZlc0v3eF02M0WtKxEypWA==\n"],"msg":1}
(Ejemplo real, 1)

¡Advertencias!

Descifrado con JAVA

BASE64Decoder decoder = new BASE64Decoder();
String textoCon64 = "textoDeLaBD";
byte[] bytesDecode = decoder.decodeBuffer(textoCon64);
String textoNormal = auth.decrypt(bytesDecode, keyPrivate);
System.out.println("descifrado es: " + textoNormal);

(No hay que tomars el código al pie de la letra, pues está basado en muchas modificaciones del .jar de verificación que he ido realizando, pero FUNCIONA)
(Este código no contempla los puntos 2 y 3 mencionados anteriormente)

Instalación del subsistema

Probado en Windows 7 SP1 x64 (imagen de DreamSpark disponible en la web de la escuela). Para otros sistemas el procedimiento es el mismo.

Probado en Windows 8 (x64 y x32) y 8.1 (x64 y x32)

   easy_install pip
   pip install Django==1.4.7
   pip install djangorestframework==2.4.3
   pip install rsa==3.1.4
   pip install django-cors-headers==0.13
   
   pip install requests==2.4.3
   pip install pycrypto==2.6.1

Instalación del subsistema en Ubuntu

1.- Crear carpeta llamada cabina-integracion

mkdir cabina-integracion

2.- Descargar los scripts para Linux:

install.sh run.sh

3.- Mover los scripts descargados a la carpeta cabina-integracion, creada en el punto 1

4.- Dar permisos de ejecución a los scripts:

chmod +x *.sh

5.- Copiamos dentro de la carpeta cabina-integracion la última versión de cabina cabina-agora-us. La estructura que va a tener la carpeta cabina-integracion es la siguiente:

cabina-integracion
|
|- cabina-agora-us
|- install.sh
|- run.sh

6.- Ejecutar scripts:

./install.sh

./run.sh

El primer script (install.sh) instala y arranca el proyecto. El segundo (run.sh) solo lo arranca. Por tanto la primera vez que ejecutéis el proyecto después de descargarlo ejecutad el script install.sh, y el resto de las veces el run.sh

Tras la ejecución de cada script, saldrá el siguiente mensaje: ================= OK =================== y el terminal se quedara "esperando". Llegados a este punto tendremos el servidor arrancado. Para parar el servidor presionamos Ctrl + c.