17 marzo 2014

Integrando Latch con Django


La verdad es que llevo mucho tiempo queriendo contribuir a la excelente labor que hacen los chicos de SbD y por falta de tiempo nunca he llegado hacerlo pero durante su charla en RootedCON, Chema me lanzó el guante diciéndome que publicara la integración de Django con Latch y esta vez, no puedo escaquearme.

¿Qué es Latch?

A estas alturas, ya todos debéis conocer que es Latch, pero por si hay algún despistado por aquí, Latch es un sistema de pestillos digitales desarrollado por ElevenPaths. Con este sistema puedes bloquear las cuentas de los servicios siempre que no los utilices, fácil y sencillo, pero muy útil.

De Latch ya escribió mi gran amigo Alejandro, podéis verlo aquí: 
http://www.securitybydefault.com/2013/12/configurar-latch-para-proteger-un.html

Django y Latch

Para los que no quieran leerse todo el rollo, el código del módulo de Latch para Django podéis descargarlo de https://github.com/rootedcon/django-latch e instalarlo y añadirlo directamente a vuestro proyecto.

$ git clone https://github.com/rootedcon/django-latch.git
$ cd django-latch
$ python setup.py install

Configurando el módulo en la aplicación Django

Con el módulo instalado, tenemos que configurar nuestra aplicación Django para utilizarlo.

1. Configurar la aplicación, editando settings.py

# Añadir la app en las INSTALLED_APPS
INSTALLED_APPS = (
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'latch',
)
# Añadir el modelo de usuario en settings.py
AUTH_PROFILE_MODULE='latch.UserProfile'
# Establecer el backend de autenticación
AUTHENTICATION_BACKENDS = (
'latch.auth_backend.LatchAuthBackend',
)

2. Añadir la URL, editando urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin

admin.autodiscover()
admin_url = 'admin'
urlpatterns = patterns('',
     url(r'^%s/' % admin_url, include(admin.site.urls)),
     url(r'^latch/', include ('latch.urls')),
)

3. Sincronizar la base de datos: 
$ ./manage.py syncdb

Ya tenemos nuestra aplicación lista para empezar a emparejar cuentas!

Configuración de Latch

El primer paso, una vez configurada la aplicación Django, es crearse una cuenta de desarrollador para la aplicación. Esto es necesario para poder realizar peticiones al API y de esta forma emparejar y desemparejar las cuentas de usuario.


Con estos datos, podemos ir a http://URL/admin/latch/latchsetup/ y configurar el Application ID y el secreto:



Con esto, los usuarios ya pueden empezar a emparejar sus cuentas con Latch!

Gestión de cuentas

Para emparejar una cuenta, es necesario haber iniciado sesión con el usuario que queremos emparejar. Con la sesión iniciada, navegamos a http://URL/latch/pair y generamos un token de emparejado en la aplicación móvil:


Introducimos el código en la aplicación y si no hay ningún error, tendremos la aplicación emparejada con Latch.


Una vez emparejado, podemos comprobar el estado en http://URL/latch/status


Ahora ya podemos utilizar Latch para abrir o cerrar el acceso a la aplicación con este usuario.

Si queremos desemparejar la cuenta, podemos ir a http://URL/latch/unpair, marcamos el tick de confirmación y clickeamos ‘Unpair’


¡Fin!

Pues nada… ahora ya puedes disfrutar de tu aplicación Django protegida con Latch y evitar usos no deseados de tus cuentas.

El proyecto está recién salido del horno y seguramente pueda mejorarse, siéntete libre de realizar modificaciones y si quieres, puedes enviar una petición y lo añadiremos a la rama maestra.

Espero que os sea útil y no dudéis en enviar cualquier comentario!

Gracias a SbD por dejarme un hueco para publicar esto y compartirlo con vosotros. ¡Espero veros por RootedCON algún día! :D


 Javier Olascoaga - Founder @ RootedCON