pb

pb is a lightweight pastebin (and url shortener) built using flask.

abstract

Create a new paste from the output of cmd:

cmd | curl -F c=@- https://pybin.pw/

A HTML form is also provided for convenience paste and file-uploads from web browsers.

The pb_cli is also available for maximum convenience pastes from your terminal.

api spec

Implementers can read the complete API specification here.

examples

No really, how in the name of Gandalf's beard does this actually work? Show me!

creating pastes

Create a paste from the output of 'dmesg':

$ dmesg | curl -F c=@- https://pybin.pw/
long: AGhkV6JANmmQRVssSUzFWa_0VNyq
sha1: 686457a240366990455b2c494cc559aff454dcaa
short: VNyq
url: https://pybin.pw/VNyq
uuid: 17c5829d-81a0-4eb6-8681-ba72f83ffbf3

Or, if you only care about getting the url back:

$ dmesg | curl -F c=@- https://pybin.pw/?u=1
https://pybin.pw/VNyq

updating pastes

Take that paste, and replace it with a picture of a baby skunk:

$ curl -X PUT -F c=@- https://pybin.pw/17c5829d-81a0-4eb6-8681-ba72f83ffbf3 < baby-skunk.jpg
https://pybin.pw/ullp updated.

using mimetypes

Append '.jpg' to hint at browsers that they should probably display a jpeg image:

https://pybin.pw/ullp.jpg

deleting pastes

Actually, that picture is already on imgur; let's delete that paste and make a shorturl instead:

$ curl -X DELETE https://pybin.pw/17c5829d-81a0-4eb6-8681-ba72f83ffbf3
https://pybin.pw/ullp deleted.

shortening URLs

$ curl -F c=@- https://pybin.pw/u <<< https://i.imgur.com/CT7DWCA.jpg
https://pybin.pw/qYTr

Well, it is shorter..

syntax highlighting

Put my latest 'hax.py' script on pb:

$ curl -F c=@- https://pybin.pw/ < hax.py
long: AEnOPO7bF9Qyyt_WUltBlYWHs_-G
sha1: 49ce3ceedb17d432cadfd6525b41958587b3ff86
short: s_-G
url: https://pybin.pw/2AcJ
uuid: bfd41875-dcac-4b6b-92e9-97a55d4f8d89

Now I want to syntax highlight and draw attention to one particular line:

https://pybin.pw/2AcJ/py#L-7

private pastes

Perhaps we have some super sekrit thing that we don't want be be guessable by base66 id:

$ curl -F c=@- -F p=1 https://pybin.pw/ < SEKRIT_hax.py
long: ACCzjDcun9TqySwSUjy_yRpGxWIK
sha1: 20b38c372e9fd4eac92c12523cbfc91a46c5620a
short: xWIK
url: https://pybin.pw/ACCzjDcun9TqySwSUjy_yRpGxWIK
uuid: 876e09b5-09d4-454c-8570-b627af54abd1

vanity pastes

Witness the gloriousness:

$ curl -F c=@- https://pybin.pw/~polyzen <<< "boats and hoes"
long: AEz1_jLk-awIvq73RxQq_n1aQ46a
sha1: 4cf5fe32e4f9ac08beaef747142afe7d5a438e9a
short: Q46a
url: https://pybin.pw/~polyzen
uuid: ab505051-0766-41dd-85d9-e739e62de58d
$ curl https://pybin.pw/~polyzen
boats and hoes

sunsetting pastes

Create a paste that self destructs in 2 minutes:

$ echo "This message will self-destruct in two minutes" | curl -F sunset=120 -F c=@- https://pybin.pw/
date: 2016-03-22T17:15:50.396279+00:00
digest: 3a9c705adf9a941b175631a5e6f11eb575f067e6
long: ADqccFrfmpQbF1YxpebxHrV18Gfm
short: 8Gfm
size: 46
status: created
sunset: 2016-03-22T17:17:50.395045+00:00
url: https://pybin.pw/8Gfm
uuid: 751f7e0b-7ce1-4b81-852b-57c5844e8d3a
$ curl https://pybin.pw/8Gfm
This message will self-destruct in two minutes
$ sleep 2m
$ curl https://pybin.pw/8Gfm
date: 2016-03-22T17:15:50.396000+00:00
digest: 3a9c705adf9a941b175631a5e6f11eb575f067e6
long: ADqccFrfmpQbF1YxpebxHrV18Gfm
short: 8Gfm
size: 46
status: expired
sunset: 2016-03-22T17:17:50.395000+00:00
url: https://pybin.pw/8Gfm

terminal recording

Create and upload a recording using asciinema:

$ asciinema rec term.json
~ Asciicast recording started.
~ Hit Ctrl-D or type "exit" to finish.
$ echo tralalalala
tralalalala
$ exit
~ Asciicast recording finished.
$ curl -F c=@term.json https://pybin.pw/
digest: f9704e9ae63bb5f5aad145a871f260557673d185
long: APlwTprmO7X1qtFFqHHyYFV2c9GF
short: c9GF
status: created
url: https://pybin.pw/c9GF
uuid: 9dffb318-04f5-437c-9899-6e7c7eed04af

Then watch the playback with the t handler (https://pybin.pw/t/c9GF in this case).

shell functions

Like it? Try the pb_cli for maximum convenience:

command | pb
pb < /path/to/file

You could further extend this by creating more shell functions around it; here's one for asciinema:

pb_rec () {
  asciinema rec /tmp/$$.json
  pb < /tmp/$$.json
}

native clients

There are some native clients for interacting with pb, below are the ones we know of: