# Paf’Py Et PAF ! ## TL;DR Utilisez cette fonction `bash` : ```bash paf() { curl https://p.afpy.org/ "${@/*/-F&=@&}" } ``` elle permet d’envoyer un fichier : ```bash $ paf manage.py - https://p.afpy.org/TaPa/manage.py ``` ou plusieurs : ```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 ``` 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 : ```bash $ curl https://p.afpy.org/ -Fmanage.py=@manage.py - https://p.afpy.org/TaPa/manage.py ``` ou plusieurs fichiers en même temps : ```bash $ 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 texte sont rendus en `plain/text`, donc sans coloration syntaxique. Les fichiers `.md` et les fichiers sans extension 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 : ```bash $ cal | curl -XPOST --data-binary @- https://p.afpy.org/ - https://p.afpy.org/mo8X ``` Dans ce cas, il est possible de choisir la coloration syntaxique via l’entête `Content-Type` : ```bash $ 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` : ```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 ``` ### Écraser un paste existant Lors du premier envoi d’un paste, vous pouvez lui affecter un secret via l’entête HTTP `Authorization` : ```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 ``` La page d’accueil est maintenue 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/` : ```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 Avec cette fonction (dont le secret doit être personalisé) : ```bash paf() { local SECRET="supersecret" 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 } ``` Il est possible : - d’envoyer un ou plusieurs fichiers, - d’envoyer `stdin`, - de lister ses envois. Exemple d’envoi via `stdin` : ```bash $ cal | paf - 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 qui est rendu avec des liens cliquables en HTML !