Autentificación HTTP con Grails

Todo el mundo en algún momento ha necesitado implementar autentificación HTTP en una aplicación o página web(o no :D).

Con grails me ha vuelto a tocar hacerlo, por medio de un filtro para que fuera muy fácil de poner o quitar. El código queda como algo así:


class AuthFilters {
 def USERNAME = "user"
 def PASSWORD = "pass"

 static filters = {
  httpAuth(uri:"/**") {
   before = {
   def authHeader = request.getHeader('Authorization')
   if (authHeader) {
    def usernamePassword = new String(authHeader.split(' ')[1].decodeBase64())
    if (usernamePassword == "$USERNAME:$PASSWORD") {
     return true
    }
   }
   response.setHeader('WWW-Authenticate', 'basic realm="myRealm"')
   response.sendError(response.SC_UNAUTHORIZED)
   return false
   }
  }
 }
}

¿Hace falta explicar algo? :P

Groovy Koans en el Spring I/O

Este año se repite el Spring I/O, bajo el nuevo nombre, que es el evento de SpringSource y javaHispano promovido por Sergi Almar. Y este año, a diferencia del anterior, me toca estar sólo ante el peligro con un taller de Groovy Koans.

Spring I/O

Groovy Koans es un proyecto para ayudar a introducirse al lenguaje Groovy utilizando tests unitarios, conocí el proyecto un poco de rebote gracias a Amalia, y me pareció interesante proponerlo como taller para ayudar a conocer los fundamentos del lenguaje. Todavía tengo que ver que subconjunto de los koans selecciono para el taller, ya que no veo posible hacerlos todos en un par de horas.

En el taller realmente espero hablar muy poco, prefiero dedicarme a dar apoyo y a resolver las dudas que puedan surgir cuando la gente se ponga manos a la obra.

Sin estar del todo cerrada la agenda, la verdad es que el cartel es impresionante, con ponentes internacionales y nacionales de muchísimo nivel. Si os interesa groovy, grails, spring o el ecosistema java en general yo no dudaría en registrarme :)

Por cierto, las fechas son 17 y 18 de Febrero, y el lugar la Universidad CEU San Pablo en Boadilla del Monte (Madrid).

Conseguir un billón

Ok, o mil millones ;)

getabillion

Genial, como siempre geek & poke :D

Me ha hecho gracia y me viene al pelo para recomendar algunos posts sobre "emprendeduría" (menudo palabro...), que vienen a poner un poco los pies en el suelo.

Los de Martín Pérez sobre los mitos de emprender desde su(nuestra) experiencia con Jobsket, el de Alberto Molpeceres de bootstraping de Linking Paths, el de Manuel Recena que habla también de su experiencia con klicapy el blog de Iago Soto en general.

Y sí, como podéis ver tengo poco tiempo y pocas ganas de escribir últimamente :P. Pero bueno, quizás algún día me da el punto y hasta me animo a soltar alguna historia del tema.

Desarrollo de front para programadores

Simplemente quería compartir el artículo Desarrollo de frontend sobre web para programadores que escribió hace una semana Gonzalo García.

Es muy habitual que entre programadores(novatos, y a veces no tan novatos) al front se le vea como la cáscara y ponerle colores. Como algo complementario, que lo importante son las tripas: FAIL, la interfaz es tu producto.

Y si ya es difícil encontrar buenos programadores por ahí, aún lo es más encontrar que sean buenos en front.

Groovy scripting: migrando de base de datos

Como algunos ya sabréis, una de las cosas que podemos hacer con Groovy es escribir scripts al estilo de Ruby, Perl, Python... para realizar alguna tarea repetitiva. Desde mi humilde punto de vista(y de gente que sabe mucho más que yo), un programador debe tener en su caja de herramientas un lenguaje para escribir scripts que sirva para automatizar tareas.

Hace poco he estado haciendo unos retoques a uno que tenía casi olvidado, cuya responsabilidad era hacer una migración de una base de datos a otra, con esquemas muy distintos(por lo que tocó sudar sangre :P). Para esto me ayudé de un par de scripts escritos en groovy que cumplieron perfectamente con su función.

Hablando ya del código, una de las cosas interesantes que tiene groovy en sus últimas versiones es la incorporación de Grape en el lenguaje. Con Grape podemos manejar las dependencias a librerías externas utilizando los mismos repositorios que hay para maven, por ejemplo yo necesitaba el driver jdbc de mysql:

import groovy.grape.Grape
Grape.grab(group:'mysql', module:'mysql-connector-java', version:'5.1.6',classLoader: this.class.classLoader.rootLoader)

Otra cosa que está muy bien es lo que facilita el trabajo con bases de datos, groovy nos da el paquete groovy.sql.* para ello. Un ejemplo con código limpiado para que sea más fácilmente legible:

def sql = Sql.newInstance("jdbc:mysql://localhost:3306/vieja", "root","pass", "com.mysql.jdbc.Driver")

sql.eachRow("select * from contenidos_secciones where seccionId = 2"){
println it.id
println it.titulo
//acciones reales a ejecutar
}

El it dentro de eachRow, efectivamente representa una fila del resultado obtenido de la consulta.

En mis scripts en los eachRow trataba los datos recibidos para finalmente generar los inserts sql para el esquema de la base de datos nueva y los escribía en un fichero. Para tratar ficheros groovy también nos simplifica la vida, en mi caso tenía por ahí una función tal que así:

def writeToAFile(query, fileName){
def file = new File("${fileName}.sql")
file.append(query+"\n","UTF-8")
}

A este código habría que añadirles muchas líneas pero no quiero aburrir con cosas genéricas que no aportan gran cosa, como el porrón de consultas y subconsultas diferentes, cambios de estructuras, tratamientos de cadenas para generar inserts...

En fin, que si no tienes ningún lenguaje para escribir scripts, ya puedes dejar las excusas/pereza y empezar a aprender uno!

Y si eres programador Java, groovy es el que resulta tener una menor barrera de entrada que los lenguajes sospechosos habituales para esas tareas, la mayoría de la sintaxis ya la conoces :)