Giter VIP home page Giter VIP logo

hdn.pg's Introduction

Microservicio para el cifrado y descifrado de mensajes en imágenes.

License: GPL v3 Build Status CircleCI



Motivación de la idea

La idea viene motivada por la necesidad de mantener seguras nuestras comunicaciones al mas estilo James Bond, Sí en efecto el propio agente 007 usaría este microservicio. Eso sí nunca te lo diría porque si no tendría que matarte.

La idea es muy sencilla. Si necesitamos comunicar un mensaje a alguien y este es alto secreto (porque la seguridad nacional está en juego) cogeremos esa imagen de gatitos que tan inofensiva parece y haciendo uso de esta maravilla de la tecnología ocultaremos en ella el mensaje. Ahora sí, tenemos una imagen inofensiva de la que nadie jamas sospecharía. Ya podemos mandarla por e-mail, telegram... cualquier servicio de mensajería lo mas banal posible.

Cuando su receptor la tenga en su poder bastará con pasarla de nuevo por el microservicio y este revelará la verdad entre otros datos posibles como la fuente , la fecha y la hora en que dicha información se ocultó.

La información no se almacena en los metadatos de la imagen, nada de eso. Este algoritmo es tecnología puntera. Esta maravilla desgrana cada píxel de la imagen, añade la información y lo recompone. Como el mejor cirujano de Malibú. Después de un trabajo que nada tiene que envidiar al de los ingenieros genéticos de jurassic park tu imagen está lista y si te hemos visto..pues no nos acordamos.

Eso si, como dijo Ben Parker… Un gran poder conlleva una gran responsabilidad. Usalo bien.


Microservicio 🆕

Se ha dado solución a todas las HU y se ha alcanzado la funcionalidad completa de la aplicación.

Framework:

La elección del framework ha venido condicionada principalmente por la velocidad, ya que el proyecto se basa en el manejo de imágenes y buscaba transferencias muy rápidas.

Antes de determinar a Restify como el elegido he realizado una serie de comparativas que se pueden ver aquí.

En ese documento se detallan los test realizados sobre Restify y Express junto con tablas comparativas.

También se detalla como he usado el framework.

Diseño:

El avance del proyecto ha obligado a realizar cambios en la estructura de ficheros.

A medida que he ido avanzando he encontrado dificultades para el tratamiento de las imágenes de forma que finalmente he tenido que desarrollar todos los métodos y funciones desde cero sin poder hacer uso de librerías para el manejo de imágenes.

Una explicación más detallada del diseño se puede ver aquí

En ese documento se detalla la estructura y jerarquía seguida.

HU y Test:

Para el testeo de la API he realizado una serie de test que lanzando la una petición POST como si se realizara mediante el envío desde un formulario desde un frontend.

Se evalúa la respuesta proporcionada por la API en varios contextos:

    1. Status de la respuesta
    1. Formato de la respuesta
    1. Contenido de respuesta correcto

A continuación se detalla más profundamente los test y las soluciones adoptadas para cada HU.

Sistema de logs:

He implementado el midleware Morgan como sistema de log.

Lo he elegido por su simplicidad y fácil manejo además de su diseño como midelware.

var logger  = require('morgan')

server.use(logger('dev'));

Gestor de tareas:

He venido utilizando Gulp durante todo el proyecto.

Para la automatización he creado tres tareas y posteriormente las he unificado bajo default.

De esta forma la orden gulp ejecutará las tres tareas en el orden correcto. Además dichas tareas pueden ser lanzadas por separado.

GulpFile

Docker:

He creado un nuevo fichero dockerFile para adaptar el docker a las nuevas tareas de automatización.

También he reconfigurado Travis y CircleCi para lanzar los nuevos test.

DockerFile


Historias de usuario


Autor: Alejandro Rodríguez López

hdn.pg's People

Contributors

alexrodriguezlop avatar

Watchers

James Cloos avatar  avatar

hdn.pg's Issues

Encender y apagar bit por posición

Corregir métodos encender y apagar de la clase raw para que dada una posición enciendan y apaguen dicho bit en lugar de aplicar este cambio solo sobre el bit menos significativo, ya que de esta forma es más simple recomponer el carácter usando estos mismos métodos
Actualmente: this._datos[posicion] = this._datos[posicion] | '00000001' ;
Enciende utilizando una máscara constante.
Soluciones:

  • Swich case de máscaras para cada posición.
  • Calculando la mascará

Ejemplo:
byte mask;
if((pos >= 0) && (pos <8)){
mask = 0x1 << pos;
b = b | mask;
}

Completar fichero iv.yaml

Habrá que añadir al fichero iv.yaml las siguientes claves:

lenguaje: tendrá el lenguaje de programación usado.

test: apuntará a uno de los ficheros, o el fichero, que se use para testear.

taskfile: apuntará al fichero que se va a usar, a partir de ahora, para ejecutar diferentes tareas.

En ese fichero, que será específico del lenguaje en algunos casos (en otros será genérico, como un Makefile), se tendrán que ir poniendo todas las tareas que se hagan en el proyecto, empezando por make install o make installdeps y continuando, en este mismo, con make test.

Actualizar README.md

Actualizar los ficheros añadidos y la estructura de clases, ya que ha sido modificada.

Javadoc

Automatizar la generación de la documentación con Gulp y jsdocs

Corregir README

  • Corregir reducción de README (Demasiado reducido)
  • Corregir Orografía

[HU1] Ocultar mensaje dentro de una imagen

Descripción de alto nivel

COMO usuario
QUIERO Ocultar un mensaje dentro de una imagen.
PARA Tener a salvo la información

Dado/Y/Entonces/Cuando

  • Si la imagen ya contiene un mensaje, se lanzará una excepción.
  • Si el mensaje es demasiado largo, se lanzará una excepción.
  • Si la imagen no es adecuada, se lanzará una excepción..

Adecuar el proyecto a los test

Crear la estructura de directorios y los ficheros necesarios para llevar a cabo los test:

  • Directorio: test
  • Fichero: test.js

Describir correctamente el proyecto

Describir correctamente en el repositorio en GitHub y documentar el proyecto elegido y los pasos que se van a dar en el mismo; también comenzar con las primeras especificaciones o al menos estructura general de las clases o módulos que se van a usar en el proyecto.

Corregir interfaz procedural

  • Corregir interfaz procedural (R4) y referenciar su issue.
    Es necesario redefinir la entidad, ya que las funciones de cifrado serán absorbidas por la clase imagen, pasando a ser métodos de esta.

  • Corregir iv.yaml

Crear el fichero taskfile

Crear el fichero taskfile que se va a usar, a partir de ahora, para ejecutar diferentes tareas.
En ese fichero, que será específico del lenguaje en algunos casos (en otros será genérico, como un Makefile), se tendrán que ir poniendo todas las tareas que se hagan en el proyecto, empezando por make install o make installdeps y continuando, en este mismo, con make test.

Actualizar README principal

Actualizar el fichero README.md principal para incluir los enlaces a los nuevos ficheros y documentación

[HU3] Conocer el mensaje que oculta una imagen.

Descripción de alto nivel

COMO Usuario
QUIERO Conocer el mensaje que oculta una imagen
PARA Acceder a dicha información

Dado/Y/Entonces/Cuando

  • Si la imagen no contiene mensaje, se lanzara un excepción.

Corregir los test

Corregir:

  • Crear el objeto imagen más de una vez
  • Uso de constantes

Corrección Hito0

Añadir documentación referente a la configuración del repositorio y del cliente Git.

Corregir fichero README.md

Corregir el fichero README.md añadiendo enlaces a todos aquellos ficheros que han sido añadidos en la resolución del hito1.

Dockerfile

Dockerfile correcto, siguiendo buenas prácticas, y adaptado de forma correcta a las clases o módulos que se están testeando.

Corregir y justificar travis.yml.

Corregir y justificar travis.yml.

  • Sobra el pull (run ya lo hace).
  • sobra la declaración de lenguaje (porque usas docker).
  • sobra la declaración de service (docker ya está activado por defecto).

Corregir Dockerfile

  • No es una buena práctica abrir directorios en root. Ni trabajar en root. Tienes que definir un workdir.
  • Instalar Gulp en dockerfile.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.