2023-04-25 20:00:00 +00:00
|
|
|
|
# Paf’Py
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
Et PAF !
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
2023-04-25 16:44:42 +00:00
|
|
|
|
## TL;DR
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
2023-04-25 16:44:42 +00:00
|
|
|
|
Utilisez cette fonction `bash` :
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
2023-04-25 16:44:42 +00:00
|
|
|
|
```bash
|
|
|
|
|
paf()
|
|
|
|
|
{
|
|
|
|
|
curl https://p.afpy.org/ "${@/*/-F&=@&}"
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2023-04-25 20:05:51 +00:00
|
|
|
|
elle permet d’envoyer un fichier :
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
|
|
|
|
```bash
|
2023-04-25 16:44:42 +00:00
|
|
|
|
$ paf manage.py
|
|
|
|
|
- https://p.afpy.org/TaPa/manage.py
|
|
|
|
|
```
|
|
|
|
|
|
2023-04-25 20:05:51 +00:00
|
|
|
|
ou plusieurs :
|
2023-04-25 16:44:42 +00:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ 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
|
|
|
|
|
```
|
|
|
|
|
|
2023-04-25 20:05:51 +00:00
|
|
|
|
une version évoluée de cette fonction est fournie plus bas.
|
|
|
|
|
|
2023-04-25 16:44:42 +00:00
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
## Le projet
|
2023-04-25 16:44:42 +00:00
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
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`
|
|
|
|
|
|
2023-04-25 20:05:51 +00:00
|
|
|
|
Tous les exemples sont rédigés avec `curl`, libre à vous d’adapter à
|
|
|
|
|
votre usage.
|
2023-04-25 20:00:00 +00:00
|
|
|
|
|
2023-04-25 20:05:51 +00:00
|
|
|
|
En utilisant des requêtes `multipart/form-data` il est possible
|
|
|
|
|
d’envoyer un fichier :
|
2023-04-25 16:44:42 +00:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ curl https://p.afpy.org/ -Fmanage.py=@manage.py
|
|
|
|
|
- https://p.afpy.org/TaPa/manage.py
|
2023-04-25 07:22:03 +00:00
|
|
|
|
```
|
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
ou plusieurs fichiers en même temps :
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
|
|
|
|
```bash
|
2023-04-25 16:44:42 +00:00
|
|
|
|
$ 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
|
2023-04-25 07:22:03 +00:00
|
|
|
|
```
|
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
C’est l’extension dans le nom du fichier qui permet de choisir la
|
2023-04-25 07:22:03 +00:00
|
|
|
|
coloration syntaxique pour chaque fichier.
|
|
|
|
|
|
2023-07-18 13:53:07 +00:00
|
|
|
|
Les fichiers sans extension et les fichiers `.md` sont interprétés en
|
2023-04-25 20:12:48 +00:00
|
|
|
|
Markdown lors de l’affichage dans un navigateur.
|
2023-04-25 20:05:51 +00:00
|
|
|
|
|
|
|
|
|
Les fichiers sont toujours rendus tels quels lorsqu’ils sont récupérés
|
|
|
|
|
hors d’un navigateur, typiquement via `wget` ou `curl`.
|
|
|
|
|
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
### Envoyer dans le corps d’une requête
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
Il est possible de coller un unique fichier via le corps d’une requête POST :
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
|
|
|
|
```bash
|
2023-04-25 16:44:42 +00:00
|
|
|
|
$ cal | curl -XPOST --data-binary @- https://p.afpy.org/
|
|
|
|
|
- https://p.afpy.org/mo8X
|
2023-04-25 07:22:03 +00:00
|
|
|
|
```
|
|
|
|
|
|
2023-07-18 13:53:07 +00:00
|
|
|
|
N’ayant pas d’extension, il est interprété en Markdown, ce n’est pas toujours souhaitable.
|
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
Dans ce cas, il est possible de choisir la coloration syntaxique via l’entête `Content-Type` :
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
|
|
|
|
```bash
|
2023-04-25 16:44:42 +00:00
|
|
|
|
$ cal | curl -XPOST -H "Content-Type: text/plain" --data-binary @- https://p.afpy.org/
|
|
|
|
|
- https://p.afpy.org/i3Y2/request.txt
|
|
|
|
|
```
|
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
### Choisir l’URL
|
2023-04-25 16:44:42 +00:00
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
Il est possible d’utiliser la méthode `PUT` sur une `URL` :
|
2023-04-25 16:44:42 +00:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ cal | curl -XPUT --data-binary @- https://p.afpy.org/cal
|
|
|
|
|
- https://p.afpy.org/cal
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ curl -XPUT --data-binary @manage.py https://p.afpy.org/manage.py
|
|
|
|
|
- https://p.afpy.org/manage.py
|
2023-04-25 07:22:03 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
2023-04-25 16:44:42 +00:00
|
|
|
|
### Écraser un paste existant
|
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
Lors du premier envoi d’un paste, vous pouvez lui affecter un secret via l’entête HTTP `Authorization` :
|
2023-04-25 16:44:42 +00:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ 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 :
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ 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
|
|
|
|
|
```
|
|
|
|
|
|
2023-07-18 13:53:07 +00:00
|
|
|
|
La page d’accueil, ainsi que le fichier `robots.txt` sont maintenus de cette manière la.
|
2023-04-25 16:44:42 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Lister ses envois
|
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
Tous les envois effectiés avec le même secret peuvent être listés via l’URL `/::/list/` :
|
2023-04-25 16:44:42 +00:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ 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
|
|
|
|
|
|
2023-07-18 13:53:07 +00:00
|
|
|
|
Avec cette fonction (dont le secret doit être personalisé, je vous
|
|
|
|
|
conseille d’utiliser [pass](https://www.passwordstore.org/) pour ça,
|
|
|
|
|
mais libre à vous d’écrire le mot de passe en clair dans votre
|
|
|
|
|
`~/.bashrc`) :
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
paf()
|
|
|
|
|
{
|
2023-07-18 13:53:07 +00:00
|
|
|
|
local SECRET="$(pass paf)"
|
2023-04-25 16:44:42 +00:00
|
|
|
|
local AUTH="-HAuthorization: Secret $SECRET"
|
|
|
|
|
local INSTANCE="https://p.afpy.org/"
|
|
|
|
|
|
|
|
|
|
if [[ $1 == "--list" ]]
|
|
|
|
|
then
|
|
|
|
|
curl "$AUTH" $INSTANCE::/list/
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
|
2023-04-25 07:22:03 +00:00
|
|
|
|
if [[ $# == 0 ]]
|
|
|
|
|
then
|
2023-04-25 16:44:42 +00:00
|
|
|
|
curl "$AUTH" "$INSTANCE" --data-binary @-
|
2023-04-25 07:22:03 +00:00
|
|
|
|
else
|
2023-04-25 16:44:42 +00:00
|
|
|
|
curl "$AUTH" "$INSTANCE" "${@/*/-F&=@&}"
|
2023-04-25 07:22:03 +00:00
|
|
|
|
fi
|
|
|
|
|
}
|
2023-07-18 13:53:07 +00:00
|
|
|
|
|
|
|
|
|
code-block()
|
|
|
|
|
{
|
|
|
|
|
printf '```%s\n' "$1"
|
|
|
|
|
cat
|
|
|
|
|
printf '```\n'
|
|
|
|
|
}
|
2023-04-25 07:22:03 +00:00
|
|
|
|
```
|
|
|
|
|
|
2023-04-25 16:44:42 +00:00
|
|
|
|
Il est possible :
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
- d’envoyer un ou plusieurs fichiers,
|
|
|
|
|
- d’envoyer `stdin`,
|
2023-04-25 16:44:42 +00:00
|
|
|
|
- de lister ses envois.
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
2023-07-18 13:53:07 +00:00
|
|
|
|
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 :
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
|
|
|
|
```bash
|
2023-07-18 13:53:07 +00:00
|
|
|
|
$ cal | code-block | paf
|
|
|
|
|
- https://p.afpy.org/WrmY
|
2023-04-25 07:22:03 +00:00
|
|
|
|
```
|
|
|
|
|
|
2023-07-18 13:53:07 +00:00
|
|
|
|
Sans quoi on obtiendrait : https://p.afpy.org/aAkF ☹
|
|
|
|
|
|
2023-04-25 20:00:00 +00:00
|
|
|
|
Si vous voulez partager un dossier complet, vous pouvez simplement
|
|
|
|
|
envoyer la liste des URL qui vous est renvoyée :
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
|
|
|
|
```
|
2023-07-18 13:53:07 +00:00
|
|
|
|
$ paf *.py | paf
|
2023-04-25 16:44:42 +00:00
|
|
|
|
- https://p.afpy.org/nnLR
|
2023-04-25 07:22:03 +00:00
|
|
|
|
```
|
|
|
|
|
|
2023-04-25 16:44:42 +00:00
|
|
|
|
Ce qui donne :
|
2023-04-25 07:22:03 +00:00
|
|
|
|
|
|
|
|
|
```
|
2023-04-25 16:44:42 +00:00
|
|
|
|
$ 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
|
2023-04-25 07:22:03 +00:00
|
|
|
|
```
|
|
|
|
|
|
2023-07-18 13:53:07 +00:00
|
|
|
|
Et dans un navigateur, c’est rendu via Markdown, les liens sont donc cliquables.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Pour aller plus loin
|
|
|
|
|
|
|
|
|
|
- [Chiffrement de bout en bout](https://p.afpy.org/e2e.md).
|
|
|
|
|
- [HTML inline dans du Markdown, la balise <summary>](https://p.afpy.org/summary.md).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Note à moi-même
|
|
|
|
|
|
|
|
|
|
Pour mettre à jour cette page, j’utilise :
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ curl -H "Authorization: Secret $(pass paf)" -XPUT --data-binary @using.fr.md https://p.afpy.org/
|
|
|
|
|
```
|