0bin – Sam & Max http://sametmax.com Du code, du cul Wed, 30 Oct 2019 15:34:04 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.7 32490438 Le bulletin sécu : https pour 0bin et leak de mots de passe http://sametmax.com/le-bulletin-secu-https-pour-0bin-et-leak-de-mot-de-passe/ http://sametmax.com/le-bulletin-secu-https-pour-0bin-et-leak-de-mot-de-passe/#comments Sun, 10 Jan 2016 12:42:33 +0000 http://sametmax.com/?p=17638 Quand letsencrypt est passé live, on m’a gentiment signalé qu’on avait plus d’excuses pour faire tourner 0bin en clair.

Bon, soit.

J’ai mis en place ça hier à titre de test : https://0bin.net/.

Pour le moment je vais pas faire de redirection car j’attends de voir si le truc tient.

La bonne nouvelle, c’est que comme l’installation est juste nginx + zerobin, il n’y a pas eut grand chose à faire : lancer un script, le laisser nous identifier et installer les dependances pour qu’il génère le certificat et faire pointer le dit certificat par nginx.

La moins bonne nouvelle c’est que notre archi pour sametmax.com et indexerror.net est basé sur client => varnish => nginx => worker => site.

Il faut donc mettre le certif au niveau de varnish.

Mais comme vous vous en doutez bien, il fallait que ça couille : support de https est un truc récent sur varnish et notre version ne le supporte pas. Donc il reste à :

  • Up varnish. Compiler à la main, chercher un mec qui l’a fait, up le serveur ou autre.
  • Ou passer varnish derrière nginx et réécrire tout le VLC.
  • Ou mettre uniquement HTTPS pour les formulaires de connexions. C’est mieux que rien, mais ça laisse le cookie d’identification en clair et ça va demander de faire des règles milimétriaques.
  • Mettre un autre truc en face de varnish juste pour le port 443.

Oh, du boulot en plus, je ne m’y attendais tellement pas…

Merci à tous ceux qui ont proposé et fourni de l’aide néanmoins. C’est cool d’avoir du soutien parmi ses lecteurs.

Pendant ce temps, et ça n’a rien à voir, un lecteur s’est amusé à brute forcer des hashs de mots de passe qu’on avait leakés connement et a trouvé celui de max au bout de quelques jours. Il nous a gentiment envoyé le résultat de ses recherches par mail. Ce n’est pas ironique, hein. J’apprécie que quand quelqu’un trouve que tu es à poil il te le fasse savoir avec précision et honnêteté.

Du coup va falloir aussi changer tous les mots de passe du blog et de indexerror.

Comme ce n’est pas une question de sécurité nationale, je ne suis pas en mode bersek à vouloir faire ça dans la minute, mais sachez-le : changez vos mots de passe à l’occasion. Personne ne va violer votre sœur demain si vous ne le faites pas, mais mieux vaut prévenir que guérir.

Oh, du boulot en plus, je ne m’y attendais tellement pas…

]]>
http://sametmax.com/le-bulletin-secu-https-pour-0bin-et-leak-de-mot-de-passe/feed/ 18 17638
On a tenté de nous hacker 0bin http://sametmax.com/on-a-tente-de-nous-hacker-0bin/ http://sametmax.com/on-a-tente-de-nous-hacker-0bin/#comments Sun, 20 Dec 2015 09:36:38 +0000 http://sametmax.com/?p=17160 En me baladant dans l’arbo de 0bin.net pour retirer un dox qu’on m’avait signalé je suis tombé sur un dossier au nom bizarre :

# ls -l
total 4
4 drwxr-xr-x 7 root root 4096 sept. 24  2014 --

Hum, voilà qui n’est pas pratique à analyser depuis le bash. Et pourquoi j’ai ce dossier-là d’ailleurs ?

Regardons ce qu’il y a dedans :

# python -c "import os; os.rename('--', "strange_dir")"
# ls strange_dir/
3Q  Dk  k5  Oh  -u

Oh, y a un dossier nommé “-u”…

A ce stade-là, j’ai juste supprimé le truc.

Et j’ai réalisé : on crée les dossiers de l’arbo en fonction du nom du paste, qui est une clé générée côté client, et donc fournie par un code JavaScript non trusté.

Du coup l’attaqueur nous a sans doute passé une commande bash comme nom de fichier. J’imagine, espérant qu’on fabriquait le fichier avec une exécution shell. Comme on utilise le module os pour le faire, je pense que ça n’a eu aucun impact.

J’espère :)

]]>
http://sametmax.com/on-a-tente-de-nous-hacker-0bin/feed/ 8 17160
Des fois ce que je trouve sur 0bin fait flipper http://sametmax.com/des-fois-ce-que-je-trouve-sur-0bin-fait-flipper/ http://sametmax.com/des-fois-ce-que-je-trouve-sur-0bin-fait-flipper/#comments Fri, 24 Jul 2015 07:42:56 +0000 http://sametmax.com/?p=16670 take down sur < href="http://0bin.net">0bin.net, essentiellement pour des trucs de copyright. Et temps en temps, on a des trucs vachement plus velus, comme par exemple des clés d'entrée sur des portails pédophiles. Mais depuis quelques temps, on nous signale des nouveautés : des gens qui ont leur profile complet (genre complet, complet) et qui nous demande de le virer.]]> On reçoit maintenant régulièrement des demandes de take down sur 0bin.net, essentiellement pour des trucs de copyright.

Et de temps en temps, on a des trucs vachement plus velus, comme par exemple des clés d’entrée sur des portails pédophiles.

Mais depuis quelques temps, on nous signale des nouveautés : des gens qui ont leur profile complet (genre complet, complet) et qui nous demande de le virer.

Voici un exemple anonymisé d’un truc que j’ai viré cette semaine :

Picture: https://i.imgur.com/sa_gueule.jpg
------------------------------
Understalker:
- Name: prenom nom
- DOB: 01/01/19XX
- Phone #: xxx-xxx-xxxx - Landline, Google Voice
- Phone #: xxx-xxx-xxxx - Landline, Time Warner Cable
- Address: xxx Avenue, New York, NY 10027
- Passwords: passwd1, passwd2, passwd3
------------------------------
Emails:
- prenomgx3@aim.com, Reset: pseudo@yahoo.com
- hnom@yahoo.com
- prenomtruc@mac.com
------------------------------
Skypes:
- skype:prenomnom // Current
- skype:pseudo.2002
- skype:prenom.nom
- skype:pseudo.nom
- skype:prenomsg
- skype:pseudo
------------------------------
Accounts:
- https://prenomstuff.tumblr.com
- https://www.hackforums.net/member.php?action=profile&uid=
- https://www.facebook.com/prenom.nom.9
- https://www.epicnpc.com/members/pseudo
- https://www.whois.com/whois/nomdedomaine.tld
- https://www.whois.com/whois/nomdedomaine.tld
- https://www.whois.com/whois/nomdedomaine.tld
- https://www.whois.com/whois/nomdedomaine.tld
- https://www.whois.com/whois/nomdedomaine.tld
------------------------------
Time Warner Cable Account
- IP: xx.xxx.xxx.xx
- Name: prenom nom
- Address: xxx Avenue, New York, NY 10027
- Phone Number: xxx-xxx-xxxx
- Account Number:
- PIN:
- Modem MAC Address: XX:XX:XX:XX:XX:XX
- SSID: yxyxyxyxyxyx
------------------------------
Relatives:
- Mother: Prenom nom
- Phone #: xxx-xxx-xxxx - Landline, Time Warner Cable
- Address: xxx Avenue, New York, NY 10027
- Previous Phone #: xxx-xxx-xxxx - Landline, Verizon
- Previous Address: Une autre adresse complete
- Previous Address: Une autre adresse complete
- Skype: pseudo
- Skype: pseudo.nom
- Skype: pseudo.nom1
- Facebook: https://www.facebook.com/pseudo.nom.3
- Occupation: COSMETOLOGIST
- License #: Numero de putain licence !, Expir
- Used to own 'nom de son putain de salon de coifure !'

- Father: prenom nom
- Phone #: xxx-xxx-xxxx - Cell, Verizon
- Phone #: xxx-xxx-xxxx - Landline, Time Warner Cable
- Address: xxx Avenue, New York, NY 10027
- Email: pseudo@yahoo.com
- Facebook: https://www.facebook.com/prenom.nom
- Company: Ouai le nom de la société de son père
- Company #: et son siret

- Brother: Prenom nom

- Unknown: Prenom nom
- Phone #: xxx-xxx-xxxx - Landline, Time Warner Cable
- Address: Autre adresse à NY
- Facebook: https://www.facebook.com/prenom.nom

- Unknown: Prenom nom
- Facebook: https://www.facebook.com/prenom.nom

J’ai tout sur ce gars, tout. Où il habite, sa famille, le taff, les contacts, de quoi lire ses mails et resetter tous ses passwords sur tous ses sites. Notez aussi qu’il y a un historique des comptes, et un croisement des identités en ligne. Truc de ouf.

J’ai tout viré, bien sur, mais je suppose qu’il y a en plein qu’on ne me signale pas, et qui sont là, sur le serveur.

]]>
http://sametmax.com/des-fois-ce-que-je-trouve-sur-0bin-fait-flipper/feed/ 24 16670
Des pastes mystérieux sur 0bin http://sametmax.com/des-pastes-mysterieux-sur-0bin/ http://sametmax.com/des-pastes-mysterieux-sur-0bin/#comments Fri, 30 Jan 2015 11:19:58 +0000 http://sametmax.com/?p=15829 J’ai reçu un email étrange nous signalant des pastes sur 0bin.net comme étant pédophiles et nous demandant de les retirer.

Le contenu en question ressemble à ceci. Vous pouvez cliquer, c’est safe.

Vu les abus de DMCA ces temps-ci, je suis plutôt méfiant sur ce genre d’allégation, et j’ai donc demandé un peu plus de détails. La personne, contrairement à pas mal de mecs de boites avec des avocats, a pris le temps de quelques échanges avec moi et, malgré mon ton clairement sceptique, a fini par m’expliquer le principe.

Certains forums hébergeant des photos sexualisant des mineurs sont accessibles au public. Néanmoins, pour y accéder, il faut obtenir des indices qui changent régulièrement. Ces indices sont postés sur des boards jetables, comme cette page facebook, qui pointe sur des pastebin, dans notre cas 0bin.

Ensuite, il faut aller sur le site connu pour son contenu, ajouter les filtres adblocks, faire quelques manipulations JS (dans l’exemple, un flag localstorage), et l’entrée est possible.

Je vire donc ces pastes quand on me les signale, et je fais circuler l’info, au cas où vous tombiez sur ce genre de trucs, que vous sachiez de quoi il retourne.

0bin n’étant pas modérable (c’est le principe), il est logique que des usages non souhaités en soit fait. J’aimerais donc profiter de cet article pour rappeler que le chiffrement n’est pas que pour les terroristes et les pédophiles. Tout comme les couteaux ne sont pas uniquement pour les serial killers : la plupart des gens découpent des carottes avec.

Il y a, en proportion, peu de pédophiles, et peu de serial killers. Ils existent, il ne faut pas les ignorer. Mais ne paniquons pas à l’idée qu’ils utilisent des outils utiles pour les citoyens lambda également. Nous créons un monde pour ces citoyens, pas pour les autres.

]]>
http://sametmax.com/des-pastes-mysterieux-sur-0bin/feed/ 13 15829
0bin.net est de nouveau en ligne http://sametmax.com/0bin-net-est-de-nouveau-en-ligne/ http://sametmax.com/0bin-net-est-de-nouveau-en-ligne/#comments Mon, 08 Dec 2014 21:02:06 +0000 http://sametmax.com/?p=12742 0bin était down, on a supprimé la page en cause, et on l'a remis up. On en sait pas trop comment lutter contre ça. Même TPB a du avoir 40 noms de domaine pour s'en sortir, et franchement on a pas envie de se taper autant de boulot pour un projet qui ne nous rapporte rien. Que faire donc ?]]> 0bin était down, on a supprimé la page en cause, et on l’a remis up.

On ne sait pas trop comment lutter contre ça. Même TPB a dû avoir 40 noms de domaine pour s’en sortir, et franchement on n’a pas envie de se taper autant de boulot pour un projet qui ne nous rapporte rien.

Que faire donc ?

D’abord, créer une admin pour 0bin pour supprimer une page plus facilement. Ça nous évitera de dépasser les délais la prochaine fois, car je n’étais pas dispo et Max ne savait pas comment faire. C’est pas que c’est compliqué, mais ça prend du temps, faut lire la doc, se connecter au serveur, etc. Et forcément, c’est du temps qu’on préfère passer sur Dota ou des projets qui rapportent des sous.

Ensuite, prendre le temps de vous rappeler que 0bin.net n’est qu’une instance de 0bin. Un exemple. Multiplier les instances est encore le meilleur moyen d’avoir l’outil à disposition. Et le process est plutôt bien documenté.

Mais une fois qu’on a posté son truc sur une instance, si elle tombe, que fait-on ?

Pour le moment on est baisé.

On pourrait donc imaginer de rajouter une fonction de distribution à 0bin. L’idée serait de se lier via une API simple à d’autres 0bin en qui on a confiance. Si quelqu’un poste sur l’un, tous les autres reçoivent une copie. Ainsi dans le lot, il y en aura bien un qui résistera.

Je me tâte à faire ça dans la semaine. Déjà 0bin a besoin d’un portage qui supporte Python 3. Ensuite quelques tests unitaires ne feraient pas de mal. Une fois que c’est fait, je freeze cette version, et je lance 1bin.net, la version suivante. Avec du crossbar.io, du angularjs et du mode distribué. Le truc sera plus lourd, uniquement compatible 2.7 et plus compliqué, donc je préfère en faire une version à part.

Ça se tente, voir si j’arrive à débloquer un peu de temps pour le faire, mais c’est pas impossible. Stay tuned.

]]>
http://sametmax.com/0bin-net-est-de-nouveau-en-ligne/feed/ 4 12742
0bin s’est fait tej http://sametmax.com/0bin-sest-fait-tej/ http://sametmax.com/0bin-sest-fait-tej/#comments Mon, 17 Nov 2014 10:28:09 +0000 http://sametmax.com/?p=12659 On a eu une take down notice pour une page 0bin, et comme on a pas réagit assez vite, on nous a juste coupé le site.

J’adore cette justice qui se passe de l’avis du système judiciaire, qui renverse la charge de la preuve et donne le pouvoir à des sociétés privées qui sont juges et parties. Je n’ai pas encore regardé la page en question, mais que ce soit légitime ou non, la démarche est aberrante.

Je vois bien Mac Do qui arrive chez un boucher :

Monsieur, nous pensons que votre steak imite le notre, nous fermons votre boutique jusqu’à ce que vous ne le vendiez plus. Non on a pas l’autorisation d’un juge, on est pas une société française de toute façon, on a juste fait pression sur le propriétaire de votre immeuble. Non, c’est pas mafieux si c’est légal, monsieur.

En plus, c’est pas comme si le système était pas déjà abusé par les ayant droits ET les criminels.

Bref, 0bin est down le temps qu’on répare tout ça.

]]>
http://sametmax.com/0bin-sest-fait-tej/feed/ 6 12659
0bin a été migré http://sametmax.com/0bin-a-ete-migre/ http://sametmax.com/0bin-a-ete-migre/#comments Thu, 25 Sep 2014 08:09:34 +0000 http://sametmax.com/?p=12237 0bin, le paste bin chiffré ? Il est de nouveau en ligne sur 0bin.net. Bref, on répare doucement, mais surement.]]> Vous vous souvenez de 0bin, le paste bin chiffré ? Il est de nouveau en ligne sur 0bin.net.

Je suis en train de copier tous les pastes en ce moment, et il y en a 28436 donc rsync rame un peu (j’ai fait l’erreur de le faire avec scp au début…) du coup tous les pastes ne seront pas là instantanément, mais au final, on les retrouvera tous.

Bref, on répare doucement mais sûrement.

]]>
http://sametmax.com/0bin-a-ete-migre/feed/ 5 12237
Première requête de take down pour 0bin http://sametmax.com/premiere-requete-de-take-down-pour-0bin/ http://sametmax.com/premiere-requete-de-take-down-pour-0bin/#comments Tue, 09 Jul 2013 06:21:01 +0000 http://sametmax.com/?p=6597 Vous vous souvenez, 0bin, ce pastebin chiffré côté client écrit en Python ? Le but était de protéger, non pas l’utilisateur, mais l’hébergeur, d’une attaque en justice. La théorie est qu’il ne peut en effet être tenu de modérer ce qu’il ne peut consulter.

Et bien on vient de recevoir notre première demande légale de retrait de liens.

Petit retour sur les faits, pistes de réflexion et appel à commentaires.

Le take down

La demande ne nous est pas parvenue directement, ni même par notre hébergeur, mais via notre fournisseur de nom de domaine, en l’occurrence pour 0bin.net, l’américain namecheap.

Techniquement, nous ne sommes pas aux USA, et nos serveurs ne le sont pas non plus. Pour Max, “c’est idiot de se prendre un procès pour un site qui rapporte pas”. Moi je dirais plutôt que le risque, c’est de perdre le nom de domaine qui est quand même super cool, mais ma première réaction a plutôt été “nannnnnnn, faut pas censurer”. Au final, on quand même retiré les pastes, puisqu’ils contenaient des liens de téléchargement de contenus protégés par le droit d’auteur.

Voici les demandes que nous avons reçu :

2.) Identify the copyrighted work claimed to have been infringed
You link to this copyrighted material (music albums):

DANNY PRESZ – Inicio – (2013)
ORQUESTA BRONKO & SHAKAITO – 30 Aniversario-Homenaje – (2013)
CHARLIE CRUZ – Huellas – (2013)
MONGORAMA – Baila Que Baila – (2013)
CONJUNTO SABROSURA – Moña Pa’ Mi Bongó – (2013)
V. A. – Sergio George’s Salsa Giants – (2013)
Victor Manuelle – Me Llamaré Tuyo – (2013)

3.) Provide us the exact location of the infringing file with the exact link
On your servers here (re-directing to 180upload.com):

http://0bin.net/paste/7eefb6647bb1e606ef95eaa219e4f2de8ef98d5a#GipoKK++q7p3t+56MQPQa7Tm50Vq3BTATm0a9CsiBE0=
http://0bin.net/paste/d3d3db7281b32d1d9ba4be1f0166c0e6681b7904#yuYfcO5g83WDQ7xgF8l39AhHJH4N+XfzMv6Th1IoiVo=
http://0bin.net/paste/4185de7d1d5acc69f149472edb6395603786e622#s22bq9IkdWlm7vajb4+ryNvQLAe79tYZqrICzaexw1E=
http://0bin.net/paste/df3bf3537bec0d54c1fc2d469307d91674172072#uTszh1/Om8baR/hsvWpLyMm50vgwRoRRsMkMbgVouTo=
http://0bin.net/paste/1cbb4a2796db7015412353e9cc6818cd16673338#spj9KqFNfCeMR/VNN5IVof4Sax9njevkcIBuesNWTmE=
http://0bin.net/paste/f67fd84d81bdfeb5da8a529a1064d143c8831fe6#uadJcY9uIaGbJ7oXUZ8kcXXpiktHjwkhE9XUH3TC+9U=
http://0bin.net/paste/a1043ecdf4fe1d1a4d55aedc5d9409f1767223ef#QaT1pCopGaxs9ZC07N+0cmVg6aRoiL9uY3GOPvuUx7w=

4.) Provide us the web address under which the link has been published
The links are shared here in public:
http://bypachayo.blogspot.de/

J’ai groupé les mails en un seul, mais il y en a eu 3. Notez qu’ils avaient accès aux liens avec la clé de chiffrement, puisqu’ils étaient posté publiquement sur un blog. De plus, l’identification a probablement été manuelle étant donné la nature de 0bin.

L’état de 0bin

0bin n’est pas un outil de lutte contre la censure ou de contournement légal. Il n’est pas armé pour le cas où la demande de take down arrive avec le lien complet, clé incluse, car il a été exposé ainsi sur le Net.

Il ne permet pas non plus de prévenir l’utilisateur du retrait de ses liens : tout le monde va tomber sur une 404 jusqu’à ce que l’auteur soit averti, et il ne comprendra pas ce qui s’est passé.

Ici, on a eu la chance d’avoir un seul blog, donc je suis allé poster un commentaire dessus pour lui expliquer la situation. Mon espagnol est un peu rouillé d’ailleurs.

On voit aussi que 0bin, et Internet en général, est mal compris : le mec utilisait l’outil pour poster un lien par paste, qu’il linkait ensuite sur son site. Qu’espérait-il ? Camoufler quelque chose ? A-t-il compris comment marchait le service ? A quoi il était destiné ?

La seule bonne nouvelle dans tout ça, c’est qu’on a rajouté un script qui supprime permet de supprimer un paste en Python.

Et après ?

Même si les liens étaient illégaux (d’ailleurs je n’ai aucune connaissance pour vérifier que l’injonction de retrait est elle, légale), cela fait toujours un peu chier de devoir retirer quelque chose. Cette fois, on n’a pas recopié l’information ailleurs, mais peut être qu’on aurait dû.

La vraie question c’est : est-ce qu’on veut ajouter des fonctionnalités de résistance contre la censure à 0bin ? Est-ce que ce but est vraiment complémentaire à l’objectif initial ? Est-ce que les utilisateurs en ont besoin ? Est-ce que ça ne va pas transformer le logiciel en un truc qui n’a rien à voir ?

Et si oui, que mettre en place ? De mon chapeau, j’ai déjà quelques idées :

  • Mettre en place une instance sur Tor et faire un script ou une fonctionnalité de transfert sur celle-ci en cas de take down notice.
  • Ajouter de la réplication, et lier plusieurs instances qui se font confiance entre elles via une API.
  • Ajouter une fonctionnalité de liens périssables (temps, nombre de cliques…), pour que les gens puissent partager des liens de 0bin des pages publiques sans donner l’URL réelle.
  • Permettre un faux retrait, c’est à dire un retraire temporaire, mais les liens sont réactivés plus tard ?
  • Pouvoir protéger un paste par un mot de passe.

Mais rien de tout ça ne règle le problème de notre cher fan de Danny Presz. D’ailleurs faut-il résoudre son problème ? Et si oui, est-ce le rôle de 0bin ?

J’ai horreur de terminer une article comme ça, ça fait vraiment pute à commentaires sur un blog cheap, mais qu’est-ce que vous en pensez ?

]]>
http://sametmax.com/premiere-requete-de-take-down-pour-0bin/feed/ 43 6597
Nous avons mis puis enlevé Piwik sur 0bin http://sametmax.com/nous-avons-mis-puis-enleve-piwik-sur-0bin/ http://sametmax.com/nous-avons-mis-puis-enleve-piwik-sur-0bin/#comments Tue, 23 Oct 2012 14:37:20 +0000 http://sametmax.com/?p=2717 0bin. C'était une mauvaise idée.]]> Par curiosité nous voulions savoir combien de personnes allaient sur 0bin. C’était une mauvaise idée.

On ne pouvait pas utiliser Google Analytics car ça aurait émoussé la confiance des utilisateurs, alors on a installé notre propre instance de Piwik: une solution open source sur laquelle du coup nous avions la main du code en passant par le serveur.

Malheureusement, en regardant les stats détaillées, j’ai remarqué que Piwik sauvegardait chaque URL avec l’ancre, donc avec la clé de chiffrement. J’avais dans ma base de données une liste d’URLs menant à des pastes dont je pouvais lire le contenu.

Cela pose plusieurs problèmes:

  • si vous êtes hébergeurs de 0bin, vous voulez éviter ça à tout prix. Le but est justement ne pas pouvoir faire ça, car on parie sur le fait que ce qu’on ne peut pas être légalement tenu de modérer ce qu’on ne peut pas lire.
  • si vous êtes utilisateurs, tout l’intérêt de ce qui fait 0bin autre chose qu’un simple pastebin s’écroule

J’ai tout supprimé, mais c’est vraiment un coup de bol que je m’en sois aperçu, car je n’avais même pas imaginé que juste pour des stats on pourrait enregistrer jusqu’à l’ancre d’une URL. Et je n’ai certainement pas cherché ces URLs, qui n’étaient pas mises en avant dans ma configuration du tableau de bord.

Moralité:

  • si vous êtes hébergeurs, n’installez rien sur 0bin. Rien du tout. On ne peut jamais être parfaitement certain de ce que fait un outil tierce partie, fut-il open source. Si je n’avais pas ouvert par hasard ce sous-sous-sous-menu, je n’aurais pas vu le problème, et aurait pu accumuler ces URLs pendant des mois.
  • si vous êtes utilisateurs, faites bien attention à ce que l’outil ne comporte rien en plus. Un petit view source est de rigueur. Si quelqu’un peut nous pondre une extension pour vérifier le JS, encore mieux…
]]>
http://sametmax.com/nous-avons-mis-puis-enleve-piwik-sur-0bin/feed/ 13 2717
L’indentation de Python m’a tuer http://sametmax.com/lindentation-de-python-ma-tuer/ http://sametmax.com/lindentation-de-python-ma-tuer/#comments Thu, 09 Aug 2012 13:01:31 +0000 http://sametmax.com/?p=1568 J’adore le fait que Python se base sur des espaces pour délimiter les blocs de code. La seule contrainte que cela a jusqu’ici posé, c’est que les blocs ne peuvent pas être passés en arguments.

Aujourd’hui pourtant, ce système si merveilleux nous a bien fait chier pendant une demi-heure.

Cas simple: Max me file un snippet bien racheux dans 0bin. Je clic sur “copy to clipboard”, j’élague la fonction des loggers et des try/catch qui attrapent tout, même un rhûme, et je lance des tests.

  File "truc.py", line 35
     
    ^
SyntaxError: invalid syntax

Quid ?

Je cherche, je recherche, je creuse, je retourne, je m’enfonce.

Passage en mode fourmis.

Je retire des blocs. Des lignes une a une. Des combinaisons des deux. Des combinaisons arbitraires, aléatoires de blocs transposés dans un autre fichier après conversion en utf-8 et des tabs en espaces.

  File "truc.py", line racine de 12
     
    ^
SyntaxError: invalid syntax

Je prends Max a témoin.

Nous cherchons. Nous recherchons. Nous creusons. Je m’énerve.

Ce putain de code DOIT marcher. Il n’y a AUCUNE putain d’erreur de syntax là dedans.

Puis eureka, je copie et je colle le texte comme string dans le shell Python.

Lumière:

>>>"""def download(url, dest_path, progress_callback=lambda x, y: 0, proxy=None, block_sz=8192):
...         
...          
...             if proxy is not None:
...                         # build a new opener that uses a proxy requiring authorization
...                         proxy_support = urllib2.ProxyHandler({"http" : proxy})
...                         opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)
...                  
...                         # install it
...                         urllib2.install_opener(opener)
...                  
...                     u = urllib2.urlopen(url, timeout=30)
...                     f = open(dest_path, 'w')
...                  
...                     meta = u.info()
...                 
...                     file_size = int(meta.getheaders("Content-Length")[0])
...                  
...                     block_sz = file_size_dl = 8192
...                     buffer  = u.read(block_sz)
...                     previous_status = ()
...                  
...                     while buffer:
...                          
...                                 file_size_dl += block_sz
...                                 f.write(buffer)
...                                 status = (file_size_dl, file_size_dl * 100. / file_size)
...                                 if status != previous_status:
...                                 """    
...            
             
'\ndef download(url, dest_path, progress_callback=lambda x, y: 0, proxy=None, block_sz=8192):\n    \n    \xc2\xa0\n        if proxy is not None:\n                # build a new opener that uses a proxy requiring authorization\n                proxy_support = urllib2.ProxyHandler({"http" : proxy})\n                opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)\n        \xc2\xa0\n                # install it\n                urllib2.install_opener(opener)\n        \xc2\xa0\n            u = urllib2.urlopen(url, timeout=30)\n            f = open(dest_path, \'w\')\n        \xc2\xa0\n            meta = u.info()\n        \n            file_size = int(meta.getheaders("Content-Length")[0])\n        \xc2\xa0\n            block_sz = file_size_dl = 8192\n            buffer  = u.read(block_sz)\n            previous_status = ()\n        \xc2\xa0\n            while buffer:\n            \xc2\xa0\n                    file_size_dl += block_sz\n                    f.write(buffer)\n                    status = (file_size_dl, file_size_dl * 100. / file_size)\n                    if status != previous_status:\n                            previous_status = status\n                            progress_callback(*status)\n                \n                        buffer = u.read(block_sz)\n                \xc2\xa0\n                \xc2\xa0\n                    f.close()\n                \xc2\xa0\n                '

Mais quel est ce petit salopard de “\xc2\xa0” ?

In [2]: print "a\xc2\xa0b"
a b


Caractère utf8 pour “espace insécable”
.

Pour Sublime Text et 0bin, se sont des espaces comme les autres. Pour Python, c’est une syntax error.

Fuck.

La coloration syntaxique de 0bin doit sans doute insérer ce truc à chaque saut de ligne. Du coup on a patché tout ça, les sources sont à jour sur github et j’en ai profité pour updater le paquet sur pypi qui est maintenant la dernière en date avec tous les goodies: détection de code source, send by mail, compteur, etc.

]]>
http://sametmax.com/lindentation-de-python-ma-tuer/feed/ 17 1568