Zerobin passe à Python 3


Ça faisait longtemps que je n’avais pas touché 0bin, le pastebin chiffré côté client écrit en Python.

Le support de Python 2 devait s’arrêter en mai 2015, soit ce mois-ci. Cela a été repoussé à 2020, mais pour marquer le coup symboliquement j’ai porté notre brave bestiole qui supporte maintenant la 2.7 et la 3.4.

Comme je n’ai jamais pris le temps de faire des tests unitaires sur ce projet, il est possible que j’ai cassé des trucs. J’ai testé manuellement, mais bon, on ne sait jamais, je vous avertis avant du danger :)

Le portage a pris une après-midi.

Même si ce n’est pas l’affaire de deux minutes, ce n’est pas non plus la montagne qu’on s’en fait. C’est du boulot, chiant et ingrat (surtout pour supporter 2.x ET 3.x avec une seule base de code), mais pas un travail de titan.

Et en prime, ça me permet de faire un peu reparler du projet qui n’avait plus eu de mise à jour depuis un bail.

Il mérite d’ailleurs encore pas mal d’amour :

  • Y a des issues qui sont toujours en attente sur github (certaines datent d’un an). Et c’est parce que je suis une merde procrastinatrice, il faut bien l’avouer.
  • Quelques features comme la suppression de l’histo ou d’un paste en particulier seraient les bienvenues.
  • Ca mériterait d’être porté à Angular. La lasagna jquery, c’est pas glop.
  • Un client Python serait pas de refus, et donc une API, et donc une clé API.
  • Une admin pour ses propres pastes avec URL jetable serait idéale. Mais faudrait changer le format de fichier des pastes, et donc versionner le format, et prévoir la migration des anciens.
  • Une admin pour les DMCA s’est faite sentir pas mal de fois.
  • Un script pour delete un paste en Python aussi.
  • Et pourquoi pas un packaging sous forme de .deb ou .rpm ?
  • Le support des bases de données n’a jamais été implémenté, c’est triste.
  • On avait parlé d’en faire une version avec auto réplication sur ses amis pour éviter la censure.
  • Et de faire un chat chiffré en dessous.
  • Et un éditeur de paste collaboratif. Mais faudrait porter zerobin vers crossbar.io.

Bref, ce “petit” projet a de beaux jours devant lui. Sauf que pour l’instant, y a une seule limace qui code dessus.

P.S : j’ai aussi réparé le “Mail this”, qui n’utilise plus l’URL raccourcie. En effet cette dernière n’est pas dispo dès qu’on dépasse le rate de l’API google, ce qui arrive tous les jours maintenant. La rançon du succès je suppose.

16 thoughts on “Zerobin passe à Python 3

  • Ludovic Gasc (GMLudo)

    Autant pour les librairies Python, je peux comprendre l’effort de vouloir supporter le + de versions de Python, autant pour les produits finis comme 0bin, vu que maintenant toutes les distributions Linux stables ont un Python 3 décent, si j’avais été à ta place, j’aurais droppé le support Python 2.

    Outre le fait que tu t’évites une complexité en + dans ton code, c’est aussi une manière d’inciter les gens à passer à Python 3.

    Surtout, comme tu le dis, je peux en témoigner, c’est assez facile de passer à Python 3: nous avons passé la plupart de nos daemons de Python 2+Twisted vers Python 3+AsyncIO, et cerise sur le gâteau, ça a permit de faire du cleanup dans le code.

  • Sam Post author

    C’est surtout pour les hosting cheap qui sont toujours en Python 2, les cons.

  • baseli

    Salut l’équipe !

    Je profite de cette bonne nouvelle pour féliciter l’équipe Sam&Max et pour vour remercier de tout le boulot qui est fait !

    J’ai débuté réellement la programmation en Python (3.4) depuis novembre dernier et votre site m’a beaucoup facilité l’apprentissage du langage.

    Je le consulte quotidiennement. Au boulot, la page d’accueil est bloquée mais avec une petite ‘url trique’ (euh.. trick !), je peux toujours y accéder !

    Bon, bref, on s’en fout de ma vie mais en tout cas : merci beaucoup !

  • SwordArMor

    Si tu veux éviter d’avoir à gérer des ratelimit, tu peux utiliser le raccourcisseur huitre, c’est pareil que google, sauf que c’est libre et hébergé par framasoft.

  • Sam Post author

    C’est une bonne idée mais je ne trouve pas de moyen d’utiliser leur api uniquement côté client car il faut faire une requête CORS.

  • SwordArMor

    Je n’ai jamais essayé de le faire avec du python, mais ça fonctionne relativement simplement avec wget :

    alarig@pikachu /tmp $ wget “http://huit.re/a?lsturl=http://example.com&format=json” -O exemple.com

    –2015-05-11 11:24:21– http://huit.re/a?lsturl=http://example.com&format=json

    Résolution de huit.re… 78.46.248.82

    Connexion à huit.re|78.46.248.82|:80… connecté.

    requête HTTP transmise, en attente de la réponse… 301 Moved Permanently

    Emplacement : https://huit.re/a?lsturl=http://example.com&format=json [suivant]

    –2015-05-11 11:24:22– https://huit.re/a?lsturl=http://example.com&format=json

    Connexion à huit.re|78.46.248.82|:443… connecté.

    requête HTTP transmise, en attente de la réponse… 302 Found

    Emplacement : / [suivant]

    –2015-05-11 11:24:22– https://huit.re/

    Réutilisation de la connexion existante à huit.re:443.

    requête HTTP transmise, en attente de la réponse… 200 OK

    Taille : 82 [application/json]

    Sauvegarde en : « exemple.com »

    exemple.com 100%[================================================================================>] 82 –.-KB/s ds 0s

    2015-05-11 11:24:22 (31,1 MB/s) — « exemple.com » sauvegardé [82/82]

    alarig@pikachu /tmp $ cat exemple.com

    {“short”:”http:\/\/huit.re\/DGZ22t6j”,”success”:true,”url”:”http:\/\/example.com”}

  • Sam Post author

    C’est une bonne idée mais je ne trouve pas de moyen d’utiliser leur api uniquement côté client car il faut faire une requête CORS.

    Donc en JS, dans le navigateur, et en cross domain.

  • Abc

    Une suggestion que j’avais faite un jour à Sebsauvage, et qui je pense pourrait encore améliorer l’effet kisscool (ignorance is bliss) : faire en sorte que la correspondance urlfichier soit stockée en RAM.

    Comme ça il suffit d’éteindre le serveur pour tout péter et compliquer la tâche de l’attaquant physique ;)

    Un truc à mettre en option quand même.

    On pourrait aussi utiliser un montage chiffré (récupérable plus tard).

  • Sam Post author

    De l’attaquant ? Quel attaquant ? Le but de zerobin n’est pas de protéger des données.

  • Abc

    “0bin, le pastebin chiffré côté client écrit en Python”

    “Le but de zerobin n’est pas de protéger des données.”

    oO Redis-moi ça ?

  • Ryzz

    D’ailleurs, en parlant des tests unitaires, la suite du «gros guide bien gras sur les tests unitaires en Python, partie 5» est dans les tuyaux ou tu en es encore à l’étape du «ouai, mais je vais peut-être faire ça avant…» qui se renouvelle perpétuellement ?

  • Sam Post author

    @Abc : CF la faq (http://0bin.net/faq/):

    The goal of 0bin is not to protect the user and their data (including, obviously, their secrets).

    Instead, it aims to protect the host from being sued for the content users pasted on the pastebin. The idea is that you cannot require somebody to moderate something they cannot read – as such, the host is granted plausible deniability.

    Remember that as an user, you should use 0bin in the same way as unencrypted and insecure pastebins – that is, with caution. The only difference with those is that if you decide to host a 0bin server, the encryption feature hopefully be used as a defense.

    @Ryzz: planifié pour cette semaine si Jesus et Allah le veulent.

  • Xavier Combelle

    Question à propos de 0bin. Si l’objectif est d’assurer la sécurité de l’utilisateur, pourquoi avoir ajouté des publicité provenant d’un prestataire externe (D’après uBlock il charge: https://ads.exoclick.com/ads.js )

  • Sam Post author

    Justement, le but n’est PAS d’assurer la sécurité de l’utilisateur. Relis la citation de la FAQ, le but est de protéger l’hôte.

    Néanmoins la publicité ne va rester que quelques jours, le temps de faire une démo à une banque. Après on retire tout ça, il nous fallait un truc pour justifier des revenus qui soit pas du cul :)

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.