Trabe ya no escribe aquí. Puedes encontrarnos en nuestra publicación en Medium: medium.com/trabe.

4Trabes Historias de una empresa en 100 metros cuadrados

El blog de Trabe Soluciones

Net::IMAP y autenticación PLAIN con Ruby 1.8.7

| | Comentarios

Hace poco tuvimos que recuperar correos de un servidor utilizando IMAP (con conexión segura) desde una aplicación legacy que corre sobre Ruby 1.8.7. En principio, era una tarea sencilla, sólo teníamos que usar net/imap: conectarnos, autenticarnos, recuperar los correos y listo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ irb -r
>> require 'net/imap'
=> true
>> session = Net::IMAP.new("mail.server.com", 993, true)
=> #<Net::IMAP:0x19fb2c0 @tagno=0, @continuation_request=nil, ...

>> session.capability
=> ["ACL", "BINARY", "CATENATE", "CHILDREN", "CONDSTORE", "ENABLE", "ESEARCH", "ID", "IDLE", 
    "IMAP4REV1", "LIST-EXTENDED", "LITERAL+", "MULTIAPPEND", "NAMESPACE", "QRESYNC", "QUOTA", 
    "RIGHTS=EKTX", "SASL-IR", "SEARCHRES", "UIDPLUS", "UNSELECT", "WITHIN", "ESORT", "I18NLEVEL=1", 
    "SORT", "THREAD=ORDEREDSUBJECT", "AUTH=PLAIN"]

>> session.authenticate('PLAIN', "user", "plain_password")
ArgumentError: unknown auth type - "PLAIN"
  from /home/david/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/imap.rb:359:in `authenticate'
  from (irb):4

¡Ups!. Consultando la documentación observamos que la librería sólo soporta los métodos de autenticación, LOGIN y CRAM-MD5. Ningún problema. net/imap permite registrar mecanismos de autenticación adicionales.

1
2
3
4
5
6
7
8
9
10
11
12
class ImapPlainAuthenticator
  def initialize(user, password)
    @user = user
    @password = password
  end

  def process(data)
    return "#{@user}\0#{@user}\0#{@password}"
  end
end

Net::IMAP::add_authenticator('PLAIN', ImapPlainAuthenticator)
1
2
3
4
5
6
7
$ irb -r
>> require 'net/imap'
>> require 'imap_plain_authenticator.rb'
>> session = Net::IMAP.new("mail.udc.es", 993, true
=> #<Net::IMAP:0x1b0edb0 @tagno=0, @continuation_request=nil, ...
>> session.authenticate('PLAIN', "user", "plain_password")
=> #<struct Net::IMAP::TaggedResponse tag="RUBY0001", name="OK", ...

Voilà, C’est fini.

¿Qué pasa con Ruby 1.9.x?

En la documentación no lo indica, pero si utilizáis Ruby 1.9.x veréis que sí incorpora soporte AUTH=PLAIN y no es necesario que registréis esta extensión.

Bye bye Mephisto, Hello Octopress

| | Comentarios

Un silencio en el blog de cuatro meses significa varias cosas: que estamos trabajando como animales, que estamos demasiado vagos para escribir o que también, como sucede en este caso, le hayamos dado un lavado de cara.

La novedad más destacable no es el cambio de look, si no el cambio tecnológico. Abandonamos Mephisto (que llevaba con nosotros desde 2006) y adoptamos Octopress.

Octopress es un framework que utiliza Jekyll como base y que facilita la creación y gestión de blogs. Incopora una plantilla HTML5 semántica, un layout “responsive”, temificación con Compass y Sass, integración con Disqus, una pléyade de plugins y alguna cosilla más. Para nosotros, más que un cambio tecnológico implica un cambio en la manera de trabajar: en lugar de pegarnos con la administración de Mephisto nos dedicamos a abrir un editor, escribir, hacer commits y desplegar.

En cuanto al look (o al no-look), aun no estamos del todo satisfechos, pero no queríamos seguir con el blog parado. Podéis considerar que es un work in progress y aun tenemos que ajustar cosillas. Consideramos que lo más importante es tener buenos contenidos en el blog y últimamente no hemos estado muy productivos. Esperemos que este reset venga acompañado de muchos e interesantes posts.

Disfrutad de las fiestas mordiendo

| | Comentarios

No es una tradición, pero casi, porque ya es el segundo año. En este 2011 que ahora acaba hemos intentado hacer llegar a clientes y amigos un poco de grasa camuflada como magdalenas. Esperamos que os hayan gustado y que vuestras arterias nos disculpen. Ya veremos qué os trae el 2012. ¡Felices fiestas a todos!

P.D.- si nuestros amigos de Autoradio han perpetrado el mismo atentado con todos los paquetes, pegándoles una gran etiqueta sobre el lazo y la tarjeta, la mayoría no habréis visto esta última. Lo sentimos. Venía a felicitar las fiestas, nada más. Lo bueno estaba dentro :)