PrivateBin est un pastebin en ligne minimaliste et open source où le serveur n’a aucune connaissance des données collées. Les données sont chiffrées et déchiffrées dans le navigateur à l’aide de l’AES 256 bits en mode compteur Galois. Il s’agit d’un fork de ZeroBin, développé à l’origine par Sébastien Sauvage. ZeroBin a été remanié pour permettre des extensions plus faciles et plus propres.
PrivateBin a beaucoup plus de fonctionnalités que le ZeroBin original. Il est cependant toujours entièrement compatible avec le schéma de stockage de données ZeroBin. Par conséquent, de telles installations peuvent être mises à niveau vers PrivateBin sans perte de données.
Site : privatebin.info
Démo : privatebin.papamica.com
Vous pouvez passer par une installation standard via la documentation disponible sur leur site, le déployer directement depuis mon template d’application dans Portainer (tutoriel dispo ici) ou utiliser le docker-compose suivant :
version: "2"
services:
# PrivateBin : https://privatebin.info
privatebin:
image: jgeusebroek/privatebin
container_name: privatebin
restart: always
volumes:
- /apps/privatebin/data:/privatebin/data
- /apps/privatebin/cfg:/privatebin/cfg
environment:
hostname: 'privatebin'
name: 'privatebin'
# Facultatif avec Traefik
#ports:
#- 8080:80
# Facultatif
logging:
driver: loki
options:
loki-url: "$URL_LOKI"
loki-external-labels: service={{.Name}}
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.privatebin.entrypoints=http"
- "traefik.http.routers.privatebin.rule=Host(`$URL`)"
- "traefik.http.middlewares.privatebin-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.privatebin.middlewares=privatebin-https-redirect"
- "traefik.http.routers.privatebin-secure.entrypoints=https"
- "traefik.http.routers.privatebin-secure.rule=Host(`$URL`)"
- "traefik.http.routers.privatebin-secure.tls=true"
- "traefik.http.routers.privatebin-secure.tls.certresolver=http"
- "traefik.docker.network=proxy"
networks:
proxy:
external:
name: proxy
Pensez à changer dans le docker-compose ou à définir les variables suivantes : URL_LOKI et URL en fonction de votre installation.
Votre Privatebin sera accessible directement depuis l’URL que vous lui aurais attribué avec Traefik ou depuis http://<server>:<port>
.
Privatebin met à disposition une API bien utile pour l’intégrer dans vos scripts. La documentation est disponible ici : Github.com
Installez PrivateBinAPI avec la commande suivante :
pip install PrivateBinAPI
Importez la librairie dans vos scripts :
import privatebinapi
response = privatebinapi.send("https://sitedupaste.com", text="Hello, world!")
Réponse :
{
"deletetoken": "< paste delete token >",
"full_url": "< direct link to paste> ",
"id": "< paste ID >",
"passcode": "< paste passcode >",
"status": 0,
"url": "/?< paste ID >"
}
Il existe un nombre limité de délais d’expiration valides. Vous devez sélectionner l’un des éléments suivants :
("5min", "10min", "1hour", "1day", "1week", "1month", "1year", "never")
Par défaut, “1day
” est sélectionné.
response = privatebinapi.send(
"https://sitedupaste.com",
text="Hello, world!",
expiration="5min"
)
Configurer un mot de passe à votre Paste est simple :
response = privatebinapi.send(
"https://sitedupaste.com",
text="Hello, world!",
password="Secure123!"
)
Il n’y a que trois options valides pour ce paramètre : "plaintext"
, "syntaxhighlighting"
, and "markdown"
.
Par défaut, "plaintext"
est sélectionné.
response = privatebinapi.send(
"https://sitedupaste.com",
text="Hello, world!",
formatting="markdown"
)
Si vous souhaitez qu’un Paste soit supprimé immédiatement après avoir été lu, passez à True
le paramètre burn_after_reading
.
response = privatebinapi.send(
"https://sitedupaste.com",
text="Hello, world!",
burn_after_reading=True
)
Obtenir un Paste à partir d’une instance de PrivateBin est très simple :
response = privatebinapi.get("https://sitedupaste.com/?fakePasteLink#1234567890")
Réponse :
{
"attachment": {
"content": b"< attachment content in bytes >",
"filename": "< name of attachment >"
},
"id": '< paste ID >",
"meta": {
"created": < UNIX timestamp >,
"time_to_live": < seconds until deletion >
},
"status": 0,
"text": "< text content of the paste >",
"url": "/?< paste ID >",
"v": < encryption version 1 or 2 >}
}
Si le Paste est protégé par un mot de passe, utilisez le paramètre password
.
response = privatebinapi.get(
"https://sitedupaste.com/?fakePasteLink#1234567890",
password="PAPAMICA123!"
)
Pour supprimer un Paste, vous avez besoin de son URL et de son token de suppression.
response = privatebinapi.delete(
"https://sitedupaste.com/?fakePasteLink#1234567890",
"fake1delete2token3"
)