Accueil > Astuces, Code, Flask > Werkzeug: un oeuf de paques bien caché

Werkzeug: un oeuf de paques bien caché

Aujourd’hui, je fouinais un peu dans le code source de Flask, de fil en aiguille, je me retrouve dans le code de Werkzeug, et là une ligne (werkzeug/__init__.py:95) attire mon attention:

'werkzeug._internal':   ['_easteregg']

Eh oui, trouver un easter egg en pleine période de Pâques, ça ne s’invente pas!!! :D

Alors allons voir à quoi ressemble cet oeuf, direction le fichier werkzeug/_internal.py, là on trouve bien, ligne 345, une fonction _easteregg. Cette fonction semble prendre une application en argument, et contient un bloc de texte encodé en base64 ainsi que 2 fonctions imbriquées ayant pour but de modifier le html renvoyé en fonction de l’argument passé dans l’url:

def easteregged(environ, start_response):
    def injecting_start_response(status, headers, exc_info=None):
        headers.append(('X-Powered-By', 'Werkzeug'))
        return start_response(status, headers, exc_info)
    if environ.get('QUERY_STRING') != 'macgybarchakku':
        return app(environ, injecting_start_response)
    injecting_start_response('200 OK', [('Content-Type', 'text/html')])
    return ['''<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>About Werkzeug</title>
<style type="text/css">
body { font: 15px Georgia, serif; text-align: center; }
a { color: #333; text-decoration: none; }
h1 { font-size: 30px; margin: 20px 0 10px 0; }
p { margin: 0 0 30px 0; }
pre { font: 11px 'Consolas', 'Monaco', monospace; line-height: 0.95; }
</style>
<h1><a href="http://werkzeug.pocoo.org/">Werkzeug</a></h1>
<p>the Swiss Army knife of Python web development.
<pre>%s\n\n\n</>''' % gyver]

Nous allons donc créer une application des plus simple (l’exemple donné sur le site de Werkzeug), pour voir ce qui se cache derrière cette étrange fonction:

from werkzeug import Request, Response, run_simple
from werkzeug import _easteregg

@Request.application
def application(request):
    return Response('Hello World!')

run_simple('localhost', 8080, _easteregg(application))

Maintenant ouvrons l’url http://localhost:8080/?macgybarchakku (l’argument magique attendu par la fonction citée précédemment). Là on voit bien que quelque chose se passe, mais ça n’a pas l’air de se passer comme prévu, en effet, la barre de titre contient du code, qui devrait être affiché sur la page. Eh oui, les malins, ils ont volontairement omis de fermer le tag title (comme si ça n’était pas déjà assez tordu…), donc on édite le fichier werkzeug/_internal.py, et on ferme le tag à la ligne 387.

On relance l’application, et là, ô magie du Web, notre oeuf de pâques apparait enfin! (et non, il n’y a pas de screenshot du résultat, je ne vais quand meme pas vous gâcher le plaisir de voir par vous même… ^^)

Joyeuse Pâques !

EDIT: Il semblerait que le tag <title> non fermé n’était pas intentionnel, dans les dernières versions de Werkzeug il est correctement fermé.

Catégories:Astuces, Code, Flask Mots-clés : , , ,
  1. amygdale
    5 septembre 2012 à 9 h 00 min

    pas mal :)

  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Suivre

Recevez les nouvelles publications par mail.

%d blogueurs aiment cette page :