#command-line #pastebin #privatebin #pasteservice

bin+lib pbcli

pbcli is a command line client which allows to upload and download pastes from privatebin directly from the command line

7 stable releases

2.5.0 Sep 18, 2024
2.4.0 Aug 17, 2024
2.3.1 Mar 30, 2024
2.2.1 Jul 10, 2023
2.2.0 Dec 12, 2021

#723 in Command line utilities

Download history 5/week @ 2024-07-25 117/week @ 2024-08-15 6/week @ 2024-08-22 53/week @ 2024-09-12 126/week @ 2024-09-19 13/week @ 2024-09-26 2/week @ 2024-10-03

352 downloads per month

Unlicense OR MIT

53KB
1K SLoC

Privatebin CLI

pbcli is a command line client which allows to upload and download pastes from privatebin directly from the command line.

It is dual licensed under MIT or the UNLICENSE.

Table of Contents

Installation

You can find pre-compiled binaries under the release tab in github.

For Archlinux, it is available inside the AUR.

Building

pbcli is written in Rust, so you will need a rust toolchain to build it.

git clone https://github.com/Mydayyy/pbcli.git
cd pbcli
cargo build --release
./target/release/pbcli --version

User Guide

pbcli is simple to use and only involves a few flags. The only needed argument is either the positional argument URL or the option flag host. If both are provided the positional argument URL takes precedence. To avoid specifying the host / url everytime you can take advantage of a config file as described here.

When posting a paste you can specify --json to receive post details. The output includes the base58 encoded key used to encrypt/decrypt the paste. Constructed paste url (including key) and delete url (including token) are also provided for convenience.

Example output:

{
  "baseurl": "https://privatebin.net/",
  "bs58key": "GN3qty1kAFbsGi9FbKKXigXwux1eofhiZQXNVFRMrNQd",
  "deletetoken": "8536f6f8310ed4a9aae0e111b1763f5851cdbefe4c35e4b96bd690269635354a",
  "deleteurl": "https://privatebin.net/?pasteid=31e2e7b19481fa7d&deletetoken=8536f6f8310ed4a9aae0e111b1763f5851cdbefe4c35e4b96bd690269635354a",
  "id": "31e2e7b19481fa7d",
  "pasteurl": "https://privatebin.net/?31e2e7b19481fa7d#GN3qty1kAFbsGi9FbKKXigXwux1eofhiZQXNVFRMrNQd",
  "status": 0,
  "url": "/?31e2e7b19481fa7d"
}

Example usages to get a paste:

pbcli https://privatebin.net/?f37ca34e72e2ef77#G8wFGVnpSb4pogzGbMMcgbDgeYkQ5cfcWkcsVwTQJmzd
pbcli --host https://privatebin.net/?f37ca34e72e2ef77#G8wFGVnpSb4pogzGbMMcgbDgeYkQ5cfcWkcsVwTQJmzd

Example usages to post a new poste

echo 'TestPaste' | pbcli --host https://privatebin.net/
echo 'TestPaste' | pbcli https://privatebin.net/ --json
echo 'TestPaste' | pbcli --host https://privatebin.net/ --expire=1hour
echo '## Title\nSome Markdown' | pbcli https://privatebin.net/ --format markdown
echo 'TestPaste' | pbcli --host https://privatebin.net/ --burn

CLI Help:

pbcli 2.5.0
Mydayyy <dev@mydayyy.eu>
pbcli is a command line client which allows to upload and download
pastes from privatebin directly from the command line.

Project home page: https://github.com/Mydayyy/pbcli

USAGE:
    pbcli [OPTIONS] [URL]

ARGS:
    <URL>    

OPTIONS:
        --burn                               enable burn on read for new paste
        --comment                            make new comment on existing paste
        --comment-as <nickname>              use this nick for comment
        --comment-to <parentid>              reply to this parent comment
        --debug                              print debug output to stderr
        --discussion                         enable discussion for new paste
        --download <FILE>                    
        --expire <EXPIRE>                    [default: 1week]
        --format <FORMAT>                    [default: plaintext] [possible values: plaintext, syntax, markdown]
    -h, --help                               Print help information
        --host <HOST>                        
        --json                               richer output: for delete_url, comments, etc
        --no-default-config                  do not look for config in default locations
        --oidc-client-id <OIDC_CLIENT_ID>    client id to send to the token endpoint
        --oidc-password <OIDC_PASSWORD>      password to send to the token endpoint
        --oidc-token-url <OIDC_TOKEN_URL>    oidc token endpoint from which to obtain an access token
        --oidc-username <OIDC_USERNAME>      username to send to the token endpoint
        --overwrite                          overwrite the file given with --download if it already exists
        --password <PASSWORD>                
        --size-limit <SIZE_LIMIT>            Prompt if the paste exceeds the given size. Fail in non-interactive environments.
        --upload <FILE>                      
    -V, --version                            Print version information

Configuration File

pbcli supports a configuration file to fine tune the default behaviour. You need to set the environment variable PBCLI_CONFIG_PATH to a file path. The file needs to contain flags you want to pass to pbcli, one per line. Lines starting with a # are ignored. An useful case for this may be setting a default instance to use by setting the --host argument.

Additionally, pbcli will look in a few default directories to find a config. This can be disabled via the --no-default-config argument. The directories it checks are:

  • $XDG_CONFIG_HOME/pbcli/config if the XDG variable is set. Otherwise $HOME/.config/pbcli/config
  • /etc/pbcli/config

As well as the windows and mac equivalents to those linux paths. Details can be found here: https://docs.rs/directories/latest/directories/struct.ProjectDirs.html#method.config_local_dir

The debug mode can be used to troubleshoot config loading issues. It will print the used config as well as the directories that were searched for a config.

Instead of typing echo 'test' | pbcli https://privatebin.net/ you'll only need to type echo 'test' | pbcli

Example config:

--host=https://privatebin.net/
--expire=1month

Uniffi

This projects offers uniffi bindings. In order to enable them, build the library with the uniffi feature enabled. You can learn more about uniffi here. Additionally to see an example integration of pbcli with uniffi enabled into an android project you can check out sharepaste.

Roadmap

  • Descriptive error messages
  • Add support for auth mechanism
    • Basic auth
    • oauth Added in v2.2.0 using Resource Owner Password Credential Grant flow
  • Add support for file attachments Added in v2.1.0

Credits

  • nain for the uniffi implementation

Dependencies

~17–33MB
~621K SLoC