# Paf'Py Et PAF ! ## TL;DR Utilisez cette fonction `bash` : ```bash paf() { curl https://p.afpy.org/ "${@/*/-F&=@&}" } ``` Cette fonction 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 ``` ## Utilisation avec curl 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. ### 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 ! ## Accès aux collages Chaque collage peut-être consulté dans un navigateur (où il est présenté avec de la coloration syntaxique : https://p.afpy.org/manage.py), ou être consulté en ligne de commande (où il est délivré brut) : ``` $ curl https://p.afpy.org/manage.py #!/usr/bin/env python import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "webtools.settings") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) ```