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

De Wiki de EGC
Saltar a: navegación, buscar

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!

  • 1. La cadena esta codificada en BASE64
  • 2. La cadena puede contener "\n" y en java puede dar problemas. Esos caracteres son necesarios.
  • 3. La cadena(en un 95% de las veces) puede finalizar en "\n". Eso no pertenece al cifrado y se debe obviar. (No se porque aparece en la base de datos de ellos)

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)

  • 1. Instalar Python 2.7.7 (link)
  • 2. Instalar Setuptools (link) teniendo en cuenta python 2.7.7 y 64 o 32 bits
  • 3. Ir a la ruta de instalación de scripts python (por defecto: C:\Python27\Scripts) desde el cmd y ejecutar:
   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
  • 4. Ir a la carpeta donde esté el proyecto por cmd y ejecutar: manage.py runserver
  • 5. Abrir el navegador en 127.0.0.1:8000

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.