Skip to main content

Dispatch commands with JSON HTTP requests

Project description


# Table of Contents

1. [Json Dispatch](#org1ebd606)
1. [Use Cases](#orgd2b20aa)
1. [Send file to aria2 and set download dir based on category](#orgb7f7725)
2. [Install & Use](#org902adaf)
1. [Server](#org5b297f7)
2. [Browser extension](#orgdb0ace7)
3. [Develop](#orgc64c5ed)
1. [Files Layout](#orgdc9d277)
4. [License](#org80ce1fa)


<a id="org1ebd606"></a>

# Json Dispatch

Server program written in python that accepts HTTP POST requests with a JSON
payload and forwards the request to another program, after transforming it in a
configurable way. Quite generic, but that's the goal. See [1.1](#orgd2b20aa) for concrete
examples.

`Python 3.6` supported only, although other `Python 3.X` versions should work
too.

Also provides a Firefox and Chrome extension that talks to the server and allows
you to right click on a URL/link in your browser and "send it to" the server.


<a id="orgd2b20aa"></a>

## Use Cases


<a id="orgb7f7725"></a>

### Send file to aria2 and set download dir based on category

Config file `/etc/jsondispatch/jsondispatch.conf`:

cors:
domain: '*'

commands:
aria2:
url: http://localhost:6800/jsonrpc
rpc_secret: mYs3Cr3t

triggers:
download_program_uri:
- command: aria2
method: addUri
arguments:
url: {url}
dir: /srv/backups/programs

JSON payload to send to the server with URL ending with
`/trigger/download_program_uri` with POST request:

{
"url": "magnet:?xt=urn:btih:204a1789dd04e4d8f5a4e098e8f777794888f4ad&dn=archlinux-2017.12.01-x86_64.iso&tr=udp://tracker.archlinux.org:6969&tr=http://tracker.archlinux.org:6969/announce"
}

When sending the above POST request, jsondispatch will call the `addUri` RPC
method of aria2 with the given magnet URL and the hardcoded `dir` argument.

Or just use the browser extension which does this for you with a right click on
a magnet URL (or any link for that matter).


<a id="org902adaf"></a>

## Install & Use


<a id="org5b297f7"></a>

### Server

To install the server, clone this repo, `cd` in the repo and run:

pip install -e "."

Create a configuration file in `/etc/jsondispatch/jsondispatch.conf` (by
default, `--config` option lets you setup a custom file location). See [1.1](#orgd2b20aa)
for example configurations.

To run the server, `cd` in the repo and run:

python .

You can change the default port and config file location, give the `--help`
argument for detailed instructions.


<a id="orgdb0ace7"></a>

### Browser extension

For Firefox, go to `about:debugging` and click on `Load Temporary Add-On`.
Browse to the `browserextension/` folder in this repo and select the
`manifest.json` file. Now that the addon is added, go to the addons settings
page `about:addons` and fill-in the server URL.

If you're running the server locally with default port, then the URL is
`http://127.0.0.1:8850`.

For Chrome, go to `chrome://extensions/`, enable `Developer mode`, click on
`Load unpacked extension`. Browse to the `firefox/` folder in this repo and
click on `open`. Now that the addon is added, click on the addon's `option`
button and fill-in the server URL.

Now you can just right click on a link and go in the submenu `Send to Json
Dispatch`, then choose one of the options which correspond to the configured
triggers. Of course, first make sure you installed and started the server as
explained in [1.2.1](#org5b297f7).


<a id="orgc64c5ed"></a>

## Develop

pip install -e ".[dev,test]"


<a id="orgdc9d277"></a>

### Files Layout


<a id="org80ce1fa"></a>

## License

The icon was taken from <https://feathericons.com/>, it's under MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jsondispatch-0.1.1.tar.gz (3.5 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page