Diferencia entre revisiones de «Grupo de Cabina de votación (2014-15)»

De Wiki de EGC
Saltar a: navegación, buscar
(Subsistemas relacionados)
(Instalación del subsistema)
 
(No se muestran 41 ediciones intermedias de 7 usuarios)
Línea 1: Línea 1:
 
== Definición ==
 
== Definición ==
  
Un subsistema de AGORA@US para que el usuario elija una cabina de votación para poder dar su voto.
+
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 ==
 
== Miembros ==
  
* [[Usuario:fraagugar|Francisco Javier Aguadero García]]: Rol
+
* [[Usuario:fraagugar|Francisco Javier Aguadero García]]: Gestor de la configuración
* [[Usuario:alfalclop|Alfonso Alcántara López]]: Rol
+
* [[Usuario:alfalclop|Alfonso Alcántara López]]: Gestor de la configuración
* [[Usuario:josalgrod1|José Ignacio Algarín Rodríguez]]: Rol
+
* [[Usuario:josalgrod1|José Ignacio Algarín Rodríguez]]: Gestor de la configuración
* [[Usuario:carborgar|Carlos Borja García]]: Rol
+
* [[Usuario:carborgar|Carlos Borja García-Baquero]]: Gestor de la configuración
* [[Usuario:josdelcud|José Javier Delgado Cuder]]: Rol
+
* [[Usuario:josdelcud|José Javier Delgado Cuder]]: Gestor de la configuración
* [[Usuario:davjimvar|David Jiménez Vargas]]: Rol
+
* [[Usuario:davjimvar|David Jiménez Vargas]]: Gestor de la configuración
* [[Usuario:juamaiosu|Juan Elias Maireles Osuna]]: Rol
+
* [[Usuario:juamaiosu|Juan Elias Maireles Osuna]]: Jefe de proyecto
* [[Usuario:davminsab|David Miñon Saborido]]: Rol
+
* [[Usuario:davminsab|David Miñon Saborido]]: Gestor de la configuración
* [[Usuario:larrodter|Lara Rodríguez Ternero]]: Rol
+
* [[Usuario:larrodter|Lara Rodríguez Ternero]]: Gestor de la configuración
  
 
== Iteraciones ==
 
== Iteraciones ==
Línea 20: Línea 20:
 
* [[Taller de arquitectura de la aplicación (01/10/14) - Grupo de Cabina de Votación - 14/15 | Taller de arquitectura de la aplicación (01/10/14)]]
 
* [[Taller de arquitectura de la aplicación (01/10/14) - Grupo de Cabina de Votación - 14/15 | Taller de arquitectura de la aplicación (01/10/14)]]
 
* [[Taller de gestión de código (1) (06/10/14) - Grupo de Cabina de Votación - 14/15 | Taller de gestión de código (1) (06/10/14)]]
 
* [[Taller de gestión de código (1) (06/10/14) - Grupo de Cabina de Votación - 14/15 | Taller de gestión de código (1) (06/10/14)]]
 +
* [[Taller de gestión de código (2) (08/10/14) - Grupo de Cabina de Votación - 14/15 | Taller de gestión de código (2) (08/10/14)]]
 +
* [[Taller de herramientas de análisis (15/10/2014) - Grupo de Cabina de Votación - 14/15 | Taller de herramientas de análisis (15/10/2014)]]
 +
* [[Taller de gestión del código (3) (27/10/2014) - Grupo de Cabina de Votación - 14/15 | Taller de gestión del código (3) (27/10/2014)]]
  
 
== Subsistemas relacionados ==
 
== Subsistemas relacionados ==
  
* [[Grupo_Autenticación | Sistema de autenticación]]
+
 
* [[Grupo_Almacenamiento de votos | Almacenamiento de votos]]
+
* [[Grupo Autenticación (2014-15)|Autenticación]]
 +
 
 +
* [[Grupo Creación/administración de votaciones(2014-15)|Creación/administración de votaciones]]
 +
 
 +
* [[Grupo Almacenamiento de votos(2014-15)|Almacenamiento de votos]]
 +
 
 +
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
 +
}
 +
 
 +
 
 +
* [[Grupo Creación/Administración de censos(2014-15)|Creación/Administración de censos]]
 +
 
 +
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, [http://php-egc.rhcloud.com/get_votes.php?votation_id=998])
 +
 
 +
== ¡Advertencias! ==
 +
*1. La cadena esta codificada en BASE64
 +
*2. La cadena puede contener "\n" y en java puede dar problemas. Esos caracteres '''SÍ''' 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 ([https://www.python.org/download/releases/2.7.7/ link])
 +
*2. Instalar Setuptools ([http://www.lfd.uci.edu/~gohlke/pythonlibs/ 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 django-filter==0.9.1 -->
 +
    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:
 +
 
 +
[https://www.dropbox.com/s/iihid4n7ffv0bh2/install.sh?dl=0 install.sh]
 +
[https://www.dropbox.com/s/v93phu3wg3k78tp/run.sh?dl=0 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.

Revisión actual del 18:00 21 dic 2014

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.