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 24 ediciones intermedias de 5 usuarios)
Línea 36: Línea 36:
  
 
  {
 
  {
    "id_votacion":       "xxxxxxxxxxxxxxxxxxxxxx",
+
  "age": "24",
    "nombre_usuario":     "xxxxxxxxxxxxxxxxxxxxxx",
+
  "answers": [
    "edad":               "xxxxxxxxxxxxxxxxxxxxxx",
+
        {
    "genero":             "xxxxxxxxxxxxxxxxxxxxxx",
+
          "question":"Pregunta 1",  
    "comunidad_autonoma": "xxxxxxxxxxxxxxxxxxxxxx",
+
          "answer_question":"SI"
    "preguntas":[
+
        },
                  {
+
        {
                    "id_pregunta":"xxxxxxxxxxxxxxxxxxxxxx",
+
          "question":"Pregunta 2",
                    "texto":     "xxxxxxxxxxxxxxxxxxxxxx",
+
          "answer_question":"SI"
                    "opcion":     "xxxxxxxxxxxxxxxxxxxxxx"
+
        }       
                  },
+
  ],  
                  {
+
  "id": 1,  
                    "id_pregunta":"xxxxxxxxxxxxxxxxxxxxxx",
+
  "autonomous_community": "Andalucia",  
                    "texto":     "xxxxxxxxxxxxxxxxxxxxxx",
+
  "genre": "Masculino",  
                    "opcion":     "xxxxxxxxxxxxxxxxxxxxxx"
+
  "id_poll": 32778
                  }
+
}  
                ]
+
 
}
 
  
 
* [[Grupo Creación/Administración de censos(2014-15)|Creación/Administración de censos]]
 
* [[Grupo Creación/Administración de censos(2014-15)|Creación/Administración de censos]]
Línea 59: Línea 58:
 
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:
 
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'''/
+
  http://localhost:8000/cabinaus/id_votacion/
  
 
Donde '''id_votacion''' siempre debe ser un número, por ejemplo:
 
Donde '''id_votacion''' siempre debe ser un número, por ejemplo:
  
  http://localhost:8000/cabinaus/'''15'''/
+
  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 ==
 
== Instalación del  subsistema ==
Para la instalación del subsistema se debe contar con una máquina que tenga instalada python con versión 2.7, con Django 1.4.7, con rsa 3.1.4, djangorestframework 2.4.3 ( no se garantiza el correcto funcionamiento de este subsistema si algunas de las versiones anteriores son diferentes)
+
Probado en Windows 7 SP1 x64 (imagen de DreamSpark disponible en la web de la escuela). Para otros sistemas el procedimiento es el mismo.
  
Para su instalación:
+
Probado en Windows 8 (x64 y x32) y 8.1 (x64 y x32)
* Instalamos [https://pip.pypa.io/en/latest/installing.html pip]
+
 
* Ahora en la consola debemos teclear:
+
*1. Instalar Python 2.7.7 ([https://www.python.org/download/releases/2.7.7/ link])
* pip install django==1.4.7
+
*2. Instalar Setuptools ([http://www.lfd.uci.edu/~gohlke/pythonlibs/ link]) teniendo en cuenta python 2.7.7 y 64 o 32 bits
* pip install djangorestframework==2.4.3
+
*3. Ir a la ruta de instalación de scripts python (por defecto: C:\Python27\Scripts) desde el cmd y ejecutar:
* pip install rsa==3.1.4
+
    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 ==
 
== Instalación del  subsistema en Ubuntu ==
  
1.- Descargar los scripts para Linux:  
+
1.- Crear carpeta llamada '''cabina-integracion'''
1)[https://www.dropbox.com/s/iihid4n7ffv0bh2/install.sh?dl=0 install.sh]
+
 
2)[https://www.dropbox.com/s/v93phu3wg3k78tp/run.sh?dl=0 run.sh]
+
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]
 
   
 
   
2.- Dar permisos de ejecución a los scripts descargados:
 
Se puede hacer por medio de botón derecho > propiedades > permisos > marcar como ejecutable o bien ejecutando el siguiente comando en un terminal:
 
chmod +x NOMBRE_DEL_SCRIPT
 
  
Cambiando 'NOMBRE_DEL_SCRIPT' por cada uno de los scripts descargados.
+
3.- Mover los scripts descargados a la carpeta '''cabina-integracion''', creada en el punto 1
  
3.- Introducir dentro de la carpeta deseada (MAIN) la carpeta descargada con la última versión de cabina-agora-us junto con los dos scripts:
+
 
  MAIN
+
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
 
  |- cabina-agora-us
Línea 94: Línea 134:
 
  |- run.sh
 
  |- run.sh
  
4.- Ejecutar desde consola el script:
+
 
En el caso de la primera ejecución ejecutamos desde un terminal que se encuentre en la carpeta (MAIN) :
+
6.- Ejecutar scripts:
 +
 
 
  ./install.sh
 
  ./install.sh
  
En el caso que ya hayamos ejecutado el proyecto anteriormente, ejecutamos desde un terminal que se encuentre en la carpeta (MAIN):
 
 
  ./run.sh
 
  ./run.sh
  
En ambos casos, tras la ejecución de cierto código debería pararse el terminal con la línea
+
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
================= OK ===================
 
 
 
Con el proceso corriendo.
 
  
Tras esto podemos abrir un navegador y acceder a localhost:8000
+
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.