Pioverpie / privatebin-api

MIT License
31 stars 2 forks source link

============== PrivateBin API

|Codacy Badge| |codecov| |Build Status| |Maintainability| |Code Climate issues| |Code Climate technical debt| |GitHub repo size| |License badge|

PrivateBin API is a wrapper for API interactions with PrivateBin instances. It allows you to send, get, and delete pastes from PrivateBin instances.

Installing PrivateBin API and Supported Versions

PrivateBin API is available on PyPI:

.. code:: console

$ python -m pip install privatebinapi

PrivateBin API officially supports Python 3.6+.

Features

Examples

Basic usage


PrivateBin API is designed to be as easy to use as possible. A quick
example of the most basic features is shown below:

.. code:: python

   >>> import privatebinapi
   >>> send_response = privatebinapi.send("https://vim.cx", text="Hello, world!")
   >>> get_response = privatebinapi.get(send_response["full_url"])
   >>> get_response['text'] == "Hello, world!"
   True
   >>> delete_response = privatebinapi.delete(send_response["full_url"], send_response["deletetoken"])

Each function returns a modified version of the JSON received from the PrivateBin instance.

All parameters shown in the docs below are optional and may be combined
in any way.

Sending a Paste

To send a paste containing nothing but text, do the following:

.. code:: python

import privatebinapi response = privatebinapi.send("https://vim.cx", text="Hello, world!")

You can expect the send function to return something similar to the following:

.. code:: text

{ "deletetoken": "< paste delete token >", "full_url": "< direct link to paste> ", "id": "< paste ID >", "passcode": "< paste passcode >", "status": 0, "url": "/?< paste ID >" }

Setting an Expiration ^^^^^^^^^^^^^^^^^^^^^

There are a limited number of valid expiration times. You must select one of the following:

.. code:: python

("5min", "10min", "1hour", "1day", "1week", "1month", "1year", "never")

The default is "1day".

.. code:: python

import privatebinapi response = privatebinapi.send( ... "https://vim.cx", ... text="Hello, world!", ... expiration="5min" ... )

Setting a password ^^^^^^^^^^^^^^^^^^

Putting a password on your paste is easy:

.. code:: python

import privatebinapi response = privatebinapi.send( ... "https://vim.cx", ... text="Hello, world!", ... password="Secure123!" ... )

Choosing Compression ^^^^^^^^^^^^^^^^^^^^

There are only two valid options for this parameter: "zlib" and None. The default is "zlib".

.. code:: python

import privatebinapi response = privatebinapi.send( ... "https://vim.cx", ... text="Hello, world!", ... compression=None ... )

Choosing a Format ^^^^^^^^^^^^^^^^^

There are only three valid options for this parameter: "plaintext", "syntaxhighlighting", and "markdown". The default is "plaintext".

.. code:: python

import privatebinapi response = privatebinapi.send( ... "https://vim.cx", ... text="Hello, world!", ... formatting="markdown" ... )

Burn After Reading ^^^^^^^^^^^^^^^^^^

If you want a paste to be deleted immediately after being read, pass True to the burn_after_reading parameter. The default is False.

.. code:: python

import privatebinapi response = privatebinapi.send( ... "https://vim.cx", ... text="Hello, world!", ... burn_after_reading=True ... )

Enable Discussion ^^^^^^^^^^^^^^^^^

To enable discussion, pass True to the discussion parameter. The default is False.

.. code:: python

import privatebinapi response = privatebinapi.send( ... "https://vim.cx", ... text="Hello, world!", ... discussion=True ... )

Getting a Paste


Getting a paste from a PrivateBin instance is very easy:

.. code:: python

   >>> import privatebinapi
   >>> response = privatebinapi.get("https://example.com/?fakePasteLink#1234567890")

You can expect the get function to return something similar to the following:

.. code:: text

   {
       "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 >}
   }

Getting a Password Protected Paste
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

If the paste is password protected, use the *password* parameter.

.. code:: python

   >>> import privatebinapi
   >>> response = privatebinapi.get(
   ...     "https://example.com/?fakePasteLink#1234567890",
   ...     password="Secure123!"
   ... )

Deleting a Paste

You can expect the delete function to return something similar to the following:

.. code:: text

{ "id": '< paste ID >", "status": 0, "url": "/?< paste ID >", }

To delete a paste, you need its URL and delete token.

.. code:: python

import privatebinapi response = privatebinapi.delete( ... "https://example.com/?fakePasteLink#1234567890", ... "fake1delete2token3" ... )

Using a Proxy


All functions have an optional keyword parameter, *proxies*, that
accepts a dictionary of proxies like you would see in the Requests
package.

.. code:: python

   >>> import privatebinapi
   >>> response = privatebinapi.send(
   ...     "https://vim.cx",
   ...     text="Hello, world!",
   ...     proxies={
   ...         "http": "http://example.com/proxy:80",
   ...         "https": "https://example.com/proxy:8080"
   ...     }
   ... )

Using Async Functions

privatebinapi.send, privatebinapi.get and privatebinapi.delete all have async analogs. They accept all the same parameters that their synchronous counterparts do.

.. code:: python

import asyncio

import privatebinapi

async def main(): send_response = await privatebinapi.send_async( "https://vim.cx", text="Hello, world!" ) get_response = await privatebinapi.get_async(send_response["full_url"]) delete_response = await privatebinapi.delete_async( send_response["full_url"], send_response["deletetoken"] )

loop = asyncio.get_event_loop() loop.run_until_complete(main())

Both privatebinapi.send and privatebinapi.get do encryption and decryption using an executor_. It will use the default executor for your event loop if executor is None.

.. _executor: https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.Executor

License


PrivateBin API is offered under the `MIT license`_.

.. _MIT license: https://github.com/Pioverpie/privatebin-api/blob/master/LICENSE

.. |Codacy Badge| image:: https://app.codacy.com/project/badge/Grade/b0b11fa99727453eb219bcd0b03f5868
   :target: https://www.codacy.com/gh/Pioverpie/privatebin-api/dashboard
.. |codecov| image:: https://codecov.io/gh/Pioverpie/privatebin-api/branch/master/graph/badge.svg?token=5YE0802BC1
   :target: https://codecov.io/gh/Pioverpie/privatebin-api
.. |Build Status| image:: https://travis-ci.org/Pioverpie/privatebin-api.svg?branch=master
   :target: https://travis-ci.org/Pioverpie/privatebin-api
.. |Maintainability| image:: https://api.codeclimate.com/v1/badges/b6dcd84fe476440a1811/maintainability
   :target: https://codeclimate.com/github/Pioverpie/privatebin-api/maintainability
.. |Code Climate issues| image:: https://img.shields.io/codeclimate/issues/Pioverpie/privatebin-api
   :target: https://codeclimate.com/github/Pioverpie/privatebin-api/issues
.. |Code Climate technical debt| image:: https://img.shields.io/codeclimate/tech-debt/Pioverpie/privatebin-api
   :target: https://codeclimate.com/github/Pioverpie/privatebin-api/trends/technical_debt
.. |GitHub repo size| image:: https://img.shields.io/github/repo-size/Pioverpie/privatebin-api
   :target: https://github.com/Pioverpie/privatebin-api
.. |License badge| image:: https://img.shields.io/github/license/Pioverpie/privatebin-api
   :alt: GitHub
   :target: https://github.com/Pioverpie/privatebin-api/blob/master/LICENSE