GECO - API JSON, nuevo diseño y extensión para gnome shell

danigm's picture

¿Qué es GECO?

GECO es un gestor de contraseñas que comencé a desarrollar allá por el año 2008 y que presenté al Concurso Universitario de Software Libre.

La diferencia principal de este gestor de contraseñas con respecto a otros es que las claves no se almacenan en local, sino en la "nube" y utilizando cifrado simétrico las contraseñas están accesibles desde cualquier dispositivo con conexión a internet y de forma segura, ya que las contraseñas siempre viajan cifradas y tan sólo se descifran en cliente.

Este gestor de contraseñas es lo que estoy utilizando yo desde que está funcional y gracias al cual tengo una contraseña diferente y aleatoria para cada cuenta que tengo.

El código del proyecto está en github.

API JSON

Desde un principio GECO estaba pensado de manera modular, con un servidor, que pudiera tener diferentes FRONTENDs y diferentes clientes que se conecten a estos FRONTENDs y proporcionen una interfaz de usuario sencilla para diferentes dispositivos.

El primer frontend que implementé fue un XMLRPC, el cuál daba acceso al servidor de GECO de manera distribuida a través de internet o de manera local. Pero los tiempos cambian y al final esas interfaces algo más complejas parece que han dejado lugar a interfaces más simples como son las tipo JSON.

Por lo tanto hace poco implementé el FRONTEND JSON y ya que estaba, y como ya había un cliente web que proporcionaba una interfaz web para GECO, lo que he hecho es incluir este frontend dentro de la interfaz web por lo que el mismo cliente hace de frontend del servidor y el https ya depende del servidor web tras el que lo instales.

Por lo tanto, el frontend json se puede lanzar de manera independiente, o como parte de un cliente web geco, que ofrecerá la interfaz web y además la interfaz json.

La misma api ofrece información sobre los métodos disponibles: https://geco.danigm.net/api/

Nuevo diseño

El cliente web está hecho en python, utilizando el framework web.py, y el diseño de este cliente es muy sencillo. Tan sólo tiene que mostrar una tabla con todas las contraseñas, y un par de formularios de configuración. Todo el cifrado se realiza con javascript, siempre en cliente para que las contraseñas siempre viajen cifradas y nunca se pueda comprometer la seguridad.

El diseño estaba hecho con el html, css y javascript que conocía yo por aquella época y la verdad es que estaba bastante bien, pero como todo, siempre es mejorable.

Hace poco conocí la librería CSS Bootstrap con la cual se pueden hacer diseños web bastante avanzados con poco trabajo en la parte de estilos y html, por lo que me decidí a remaquetar la interfaz web de GECO y este es el resultado final:


webgeco1

webgeco2

webgeco3

webgeco4

webgeco5

Extensión para Gnome-Shell

Desde el principio implementé un cliente GTK que se integrara con un escritorio linux para poder acceder a las contraseñas de manera fácil y rápida.

Con el cambio de GTK2 a GTK3 y el cambio de pygtk a pygobject se me trastocó gran parte del cliente y llegó un momento que decidí hacer la migración del código, pero realmente el cliente gtk3 no se ha integrado completamente con el escritorio y partes del mismo no funcionan correctamente.

Con la salida de Gnome-Shell me di cuenta de que la mejor opción para un cliente GECO en Gnome era una extensión. Sin embargo, gecolib, que es la librería básica para trabajar con contraseñas de GECO, cifrar y descifrar, está escrita en python y se conectaba al frontend xmlrpc, cosa que con javascript (gnome-shell) no es nada fácil.

Sin embargo, puesto que la interfaz json ya está funcional, la creación de una extensión para gnome-shell era el siguiente paso lógico.

Y así lo he hecho, basándome en otras extensiones, mirando el código de gnome-shell, buscando métodos en los ficheros XML de gobject introspection y con algo de dificultad por la falta de documentación en este aspecto.

Actualmente la extensión se sincroniza con un servidor GECO json y tienes acceso a todas las contraseñas y nombres de cuenta, que se copian al portapapeles. También ofrece la posibilidad de buscar contraseñas. Sin embargo no ofrece la posibilidad de añadir o editar contraseñas, ni tampoco se pueden cambiar las opciones de la cuenta, aunque no sería complicado añadir esta funcionalidad.


shellgeco1

shellgeco2


shellgeco3


shellgeco4

Comments

3
Eduardo Robles Elvira's picture

Ya sólo falta que yo me ponga a hacer una extensión para plasma :-D

korosu_itai's picture

Eso sería muy buena cosa. Plasma ftw!

korosu_itai's picture

Una cosa, ¿el cliente gtk de escritorio ya está muerto, no? Al menos a mí ya no me funciona :(