A proxy image server
JavaScript Makefile
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bin
lib
test
.gitignore
.travis.yml
Makefile
Procfile
Readme.md
client.js
component.json
index.js
package.json

Readme.md

Substitute

A proxy image server. This is a rewrite version of camo.

Build Status Coverage Status

Installation

Install with npm:

$ npm install substitute -g

Quick Help

$ substitute -h

  Usage: substitute [options]

  Options:

    -b, --bind <port>      The port or unix path to listen
    --host <host>          The hostname to listen [localhost]
    --path <path>          The pathname to listen [null]
    -c, --config <file>    Specify a configuration file
    -r, --redirects <num>  Max redirects allowed, default is 4
    -s, --secret <token>   A secret token to encrypto urls
    -V, --version          Display the version
    -h, --help             Display this help menu

URL Formats

Unlike camo, substitute supports only one URL Format:

http://example.org/<reverse-domain>/<digest>/<image-path>

The <digest> is a 32 character hex encoded HMAC digest with a secret in md5 hash. And the <image-path> should be an ecoded/escaped replaced '/' uri.

http://example.org/moc.dlrowsmuabe.aidem/d42a08bfa19e5b526b0d2d53eb3b106c/picture/Mincemeat/Pimp.jpg

Browser Support

You can get the browser client with component(1):

$ component install lepture/substitute

And generate new src with:

var substitute = require('substitute');
substitute.server = 'https://example.com';
substitute.secret = 'a secret that match the server secret';

var newSrc = substitute.link('http://path/to/image');

// replace all image src
var newHtml = substitute.image(html);

Testing

Test it manally, start a server:

$ substitute

And then visit: this link.

Test it automatically with mocha:

$ make test

You can also test the client part with:

$ make test-client

API

var substitute = require('substitute');
console.log(substitute.version);

substitute.defaults({
    maxRedirects: 5
});

var server = substitute(secret, options);
server.listen(8000)