6.0 KiB
Paf’Py
Et PAF !
TL;DR
Utilisez cette fonction bash
:
paf()
{
curl https://p.afpy.org/ "${@/*/-F&=@&}"
}
elle permet d’envoyer un fichier :
$ paf manage.py
- https://p.afpy.org/TaPa/manage.py
ou plusieurs :
$ paf *.py
- https://p.afpy.org/d6Xd/admin.py
- https://p.afpy.org/d6Xd/context_processors.py
- https://p.afpy.org/d6Xd/__init__.py
- https://p.afpy.org/d6Xd/models.py
- https://p.afpy.org/d6Xd/urls.py
- https://p.afpy.org/d6Xd/utils.py
- https://p.afpy.org/d6Xd/views.py
une version évoluée de cette fonction est fournie plus bas.
Le projet
Pasteque est un projet libre et open-source développé par Alexandre Henriet en 2013 sous licence MIT puis repris par Julien Palard en 2018 pour https://wyz.fr et enfin par l’AFPy en 2023 pour https://p.afpy.org.
Le code source est disponible ici : https://git.afpy.org/AFPy/pasteque
Utilisation avec curl
Tous les exemples sont rédigés avec curl
, libre à vous d’adapter à
votre usage.
En utilisant des requêtes multipart/form-data
il est possible
d’envoyer un fichier :
$ curl https://p.afpy.org/ -Fmanage.py=@manage.py
- https://p.afpy.org/TaPa/manage.py
ou plusieurs fichiers en même temps :
$ curl https://p.afpy.org/ -Fmanage.py=@manage.py -Frequirements.txt=@requirements.txt
- https://p.afpy.org/Nz2o/manage.py
- https://p.afpy.org/Nz2o/requirements.txt
C’est l’extension dans le nom du fichier qui permet de choisir la coloration syntaxique pour chaque fichier.
Les fichiers sans extension et les fichiers .md
sont interprétés en
Markdown lors de l’affichage dans un navigateur.
Les fichiers sont toujours rendus tels quels lorsqu’ils sont récupérés
hors d’un navigateur, typiquement via wget
ou curl
.
Envoyer dans le corps d’une requête
Il est possible de coller un unique fichier via le corps d’une requête POST :
$ cal | curl -XPOST --data-binary @- https://p.afpy.org/
- https://p.afpy.org/mo8X
N’ayant pas d’extension, il est interprété en Markdown, ce n’est pas toujours souhaitable.
Dans ce cas, il est possible de choisir la coloration syntaxique via l’entête Content-Type
:
$ cal | curl -XPOST -H "Content-Type: text/plain" --data-binary @- https://p.afpy.org/
- https://p.afpy.org/i3Y2/request.txt
Choisir l’URL
Il est possible d’utiliser la méthode PUT
sur une URL
:
$ cal | curl -XPUT --data-binary @- https://p.afpy.org/cal
- https://p.afpy.org/cal
$ curl -XPUT --data-binary @manage.py https://p.afpy.org/manage.py
- https://p.afpy.org/manage.py
Écraser un paste existant
Lors du premier envoi d’un paste, vous pouvez lui affecter un secret via l’entête HTTP Authorization
:
$ date | curl -XPUT --data-binary @- -H "Authorization: Secret supersecret" https://p.afpy.org/date
- https://p.afpy.org/date
Ainsi vous pouvez mettre à jour ce paste
en utilisant la même URL et le même secret :
$ date | curl -XPUT --data-binary @- -H "Authorization: Secret supersecret" https://p.afpy.org/date
- https://p.afpy.org/date
$ curl https://p.afpy.org/date
Tue Apr 25 06:22:45 PM CEST 2023
$ date | curl -XPUT --data-binary @- -H "Authorization: Secret supersecret" https://p.afpy.org/date
- https://p.afpy.org/date
$ curl https://p.afpy.org/date
Tue Apr 25 06:23:44 PM CEST 2023
La page d’accueil, ainsi que le fichier robots.txt
sont maintenus de cette manière la.
Lister ses envois
Tous les envois effectiés avec le même secret peuvent être listés via l’URL /::/list/
:
$ curl https://p.afpy.org/::/list/ -H "Authorization: Secret supersecret"
| filename | size | URL | paste_time | access_time | viewcount |
|------------|--------|---------------------|---------------------------|---------------------------|-------------|
| | 5168 | https://p.afpy.org/ | 2023-04-25T16:03:59+00:00 | 2023-04-25T16:26:59+00:00 | 2 |
Utilisation avancée
Avec cette fonction (dont le secret doit être personalisé, je vous
conseille d’utiliser pass pour ça,
mais libre à vous d’écrire le mot de passe en clair dans votre
~/.bashrc
) :
paf()
{
local SECRET="$(pass paf)"
local AUTH="-HAuthorization: Secret $SECRET"
local INSTANCE="https://p.afpy.org/"
if [[ $1 == "--list" ]]
then
curl "$AUTH" $INSTANCE::/list/
return
fi
if [[ $# == 0 ]]
then
curl "$AUTH" "$INSTANCE" --data-binary @-
else
curl "$AUTH" "$INSTANCE" "${@/*/-F&=@&}"
fi
}
code-block()
{
printf '```%s\n' "$1"
cat
printf '```\n'
}
Il est possible :
- d’envoyer un ou plusieurs fichiers,
- d’envoyer
stdin
, - de lister ses envois.
La fonction code-block
sert à transformer, dans un pipe, un flux de
texte en block de code Markdown, c’est typiquement utile lorsqu’on
envoie quelque chose qui n’est vraiment pas du Markdown via stdin
,
comme :
$ cal | code-block | paf
- https://p.afpy.org/WrmY
Sans quoi on obtiendrait : https://p.afpy.org/aAkF ☹
Si vous voulez partager un dossier complet, vous pouvez simplement envoyer la liste des URL qui vous est renvoyée :
$ paf *.py | paf
- https://p.afpy.org/nnLR
Ce qui donne :
$ curl https://p.afpy.org/nnLR
- https://p.afpy.org/fAqR/admin.py
- https://p.afpy.org/fAqR/context_processors.py
- https://p.afpy.org/fAqR/__init__.py
- https://p.afpy.org/fAqR/models.py
- https://p.afpy.org/fAqR/urls.py
- https://p.afpy.org/fAqR/utils.py
- https://p.afpy.org/fAqR/views.py
Et dans un navigateur, c’est rendu via Markdown, les liens sont donc cliquables.
Pour aller plus loin
Note à moi-même
Pour mettre à jour cette page, j’utilise :
$ curl -H "Authorization: Secret $(pass paf)" -XPUT --data-binary @using.fr.md https://p.afpy.org/