2011-11-19 07:45:20 +08:00
|
|
|
|
# Haste
|
|
|
|
|
|
2012-01-22 04:19:55 +08:00
|
|
|
|
Haste is an open-source pastebin software written in node.js, which is easily
|
|
|
|
|
installable in any network. It can be backed by either redis or filesystem,
|
|
|
|
|
and has a very easy adapter interface for other stores. A publicly available
|
|
|
|
|
version can be found at [hastebin.com](http://hastebin.com)
|
2011-11-19 07:45:20 +08:00
|
|
|
|
|
|
|
|
|
Major design objectives:
|
|
|
|
|
|
|
|
|
|
* Be really pretty
|
|
|
|
|
* Be really simple
|
|
|
|
|
* Be easy to set up and use
|
2011-11-19 09:04:50 +08:00
|
|
|
|
|
2012-01-27 22:46:24 +08:00
|
|
|
|
Haste works really well with a little utility called
|
|
|
|
|
[haste-client](https://github.com/seejohnrun/haste-client), allowing you
|
2012-01-22 04:19:55 +08:00
|
|
|
|
to do things like:
|
2011-11-19 09:04:50 +08:00
|
|
|
|
|
|
|
|
|
`cat something | haste`
|
|
|
|
|
|
2012-01-22 04:19:55 +08:00
|
|
|
|
which will output a URL to share containing the contents of `cat something`'s
|
2012-01-27 22:46:24 +08:00
|
|
|
|
STDOUT. Check the README there for more details and usages.
|
2011-11-19 07:45:20 +08:00
|
|
|
|
|
2011-11-21 22:59:14 +08:00
|
|
|
|
## Tested Browsers
|
|
|
|
|
|
|
|
|
|
* Firefox 8
|
|
|
|
|
* Chrome 17
|
|
|
|
|
* Safari 5.3
|
|
|
|
|
|
2011-11-19 07:45:20 +08:00
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
|
|
1. Download the package, and expand it
|
|
|
|
|
2. Explore the settings inside of config.js, but the defaults should be good
|
|
|
|
|
3. `npm install`
|
|
|
|
|
4. `npm start`
|
|
|
|
|
|
2011-11-29 22:25:22 +08:00
|
|
|
|
## Settings
|
|
|
|
|
|
|
|
|
|
* `host` - the host the server runs on (default localhost)
|
|
|
|
|
* `port` - the port the server runs on (default 7777)
|
|
|
|
|
* `keyLength` - the length of the keys to user (default 10)
|
|
|
|
|
* `maxLength` - maximum length of a paste (default none)
|
|
|
|
|
* `staticMaxAge` - max age for static assets (86400)
|
|
|
|
|
* `recompressStatisAssets` - whether or not to compile static js assets (true)
|
2012-01-22 04:19:55 +08:00
|
|
|
|
* `documents` - static documents to serve (ex: http://hastebin.com/about.com)
|
|
|
|
|
in addition to static assets. These will never expire.
|
2011-11-29 22:25:22 +08:00
|
|
|
|
* `storage` - storage options (see below)
|
|
|
|
|
* `logging` - logging preferences
|
2012-01-08 00:35:11 +08:00
|
|
|
|
* `keyGenerator` - key generator options (see below)
|
2016-03-07 05:34:33 +08:00
|
|
|
|
* `rateLimits` - settings for rate limiting (see below)
|
|
|
|
|
|
|
|
|
|
## Rate Limiting
|
|
|
|
|
|
|
|
|
|
When present, the `rateLimits` option enables built-in rate limiting courtesy
|
|
|
|
|
of `connect-ratelimit`. Any of the options supported by that library can be
|
|
|
|
|
used and set in `config.json`.
|
|
|
|
|
|
|
|
|
|
See the README for [connect-ratelimit](https://github.com/dharmafly/connect-ratelimit)
|
|
|
|
|
for more information!
|
2012-01-08 00:35:11 +08:00
|
|
|
|
|
|
|
|
|
## Key Generation
|
|
|
|
|
|
|
|
|
|
### Phonetic
|
|
|
|
|
|
|
|
|
|
Attempts to generate phonetic keys, similar to `pwgen`
|
|
|
|
|
|
|
|
|
|
``` json
|
|
|
|
|
{
|
2012-04-08 11:51:48 +08:00
|
|
|
|
"type": "phonetic"
|
2012-01-08 00:35:11 +08:00
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Random
|
|
|
|
|
|
|
|
|
|
Generates a random key
|
|
|
|
|
|
|
|
|
|
``` json
|
|
|
|
|
{
|
2012-04-08 11:51:48 +08:00
|
|
|
|
"type": "random",
|
2012-01-08 00:35:11 +08:00
|
|
|
|
"keyspace": "abcdef"
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2012-01-22 04:19:55 +08:00
|
|
|
|
The _optional_ keySpace argument is a string of acceptable characters
|
|
|
|
|
for the key.
|
2011-11-29 22:25:22 +08:00
|
|
|
|
|
2011-11-19 08:52:18 +08:00
|
|
|
|
## Storage
|
|
|
|
|
|
2011-11-29 22:25:22 +08:00
|
|
|
|
### File
|
2011-11-19 08:52:18 +08:00
|
|
|
|
|
2012-01-22 04:19:55 +08:00
|
|
|
|
To use file storage (the default) change the storage section in `config.js` to
|
|
|
|
|
something like:
|
2011-11-19 08:52:18 +08:00
|
|
|
|
|
|
|
|
|
``` json
|
|
|
|
|
{
|
2012-04-08 11:51:48 +08:00
|
|
|
|
"path": "./data",
|
|
|
|
|
"type": "file"
|
2011-11-19 08:52:18 +08:00
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Where `path` represents where you want the files stored
|
|
|
|
|
|
|
|
|
|
### Redis
|
|
|
|
|
|
2015-01-08 06:24:50 +08:00
|
|
|
|
To use redis storage you must install the `redis` package in npm
|
2011-11-19 08:52:18 +08:00
|
|
|
|
|
2012-01-18 03:43:33 +08:00
|
|
|
|
`npm install redis`
|
2011-11-19 08:52:18 +08:00
|
|
|
|
|
|
|
|
|
Once you've done that, your config section should look like:
|
|
|
|
|
|
|
|
|
|
``` json
|
|
|
|
|
{
|
2012-04-08 11:51:48 +08:00
|
|
|
|
"type": "redis",
|
|
|
|
|
"host": "localhost",
|
|
|
|
|
"port": 6379,
|
|
|
|
|
"db": 2
|
2011-11-19 08:52:18 +08:00
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2015-01-08 06:25:43 +08:00
|
|
|
|
You can also set an `expire` option to the number of seconds to expire keys in.
|
|
|
|
|
This is off by default, but will constantly kick back expirations on each view
|
|
|
|
|
or post.
|
|
|
|
|
|
|
|
|
|
All of which are optional except `type` with very logical default values.
|
|
|
|
|
|
2015-01-08 06:24:50 +08:00
|
|
|
|
### Postgres
|
|
|
|
|
|
|
|
|
|
To use postgres storage you must install the `pg` package in npm
|
|
|
|
|
|
|
|
|
|
`npm install pg`
|
|
|
|
|
|
|
|
|
|
Once you've done that, your config section should look like:
|
|
|
|
|
|
|
|
|
|
``` json
|
|
|
|
|
{
|
|
|
|
|
"type": "postgres",
|
2015-01-08 06:30:12 +08:00
|
|
|
|
"connectionUrl": "postgres://user:password@host:5432/database"
|
2015-01-08 06:24:50 +08:00
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
You can also just set the environment variable for `DATABASE_URL` to your database connection url.
|
|
|
|
|
|
2015-01-08 06:25:43 +08:00
|
|
|
|
You will have to manually add a table to your postgres database:
|
2015-01-08 06:24:50 +08:00
|
|
|
|
|
|
|
|
|
`create table entries (id serial primary key, key varchar(255) not null, value text not null, expiration int, unique(key));`
|
|
|
|
|
|
2012-01-22 04:19:55 +08:00
|
|
|
|
You can also set an `expire` option to the number of seconds to expire keys in.
|
|
|
|
|
This is off by default, but will constantly kick back expirations on each view
|
|
|
|
|
or post.
|
2011-11-29 22:25:22 +08:00
|
|
|
|
|
2011-11-19 08:52:18 +08:00
|
|
|
|
All of which are optional except `type` with very logical default values.
|
|
|
|
|
|
2012-01-18 03:43:33 +08:00
|
|
|
|
### Memcached
|
|
|
|
|
|
|
|
|
|
To use memcached storage you must install the `memcache` package via npm
|
|
|
|
|
|
|
|
|
|
`npm install memcache`
|
|
|
|
|
|
|
|
|
|
Once you've done that, your config section should look like:
|
|
|
|
|
|
|
|
|
|
``` json
|
|
|
|
|
{
|
2012-04-08 11:51:48 +08:00
|
|
|
|
"type": "memcached",
|
|
|
|
|
"host": "127.0.0.1",
|
|
|
|
|
"port": 11211
|
2012-01-18 03:43:33 +08:00
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2012-01-22 04:19:55 +08:00
|
|
|
|
You can also set an `expire` option to the number of seconds to expire keys in.
|
|
|
|
|
This behaves just like the redis expirations, but does not push expirations
|
|
|
|
|
forward on GETs.
|
2012-01-18 03:43:33 +08:00
|
|
|
|
|
|
|
|
|
All of which are optional except `type` with very logical default values.
|
|
|
|
|
|
2011-11-19 07:45:20 +08:00
|
|
|
|
## Author
|
|
|
|
|
|
|
|
|
|
John Crepezzi <john.crepezzi@gmail.com>
|
|
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
|
|
(The MIT License)
|
|
|
|
|
|
2012-09-28 01:46:09 +08:00
|
|
|
|
Copyright © 2011-2012 John Crepezzi
|
2011-11-19 07:45:20 +08:00
|
|
|
|
|
2012-01-22 04:19:55 +08:00
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
|
|
|
this software and associated documentation files (the ‘Software’), to deal in
|
|
|
|
|
the Software without restriction, including without limitation the rights to
|
|
|
|
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
|
|
|
of the Software, and to permit persons to whom the Software is furnished to do
|
|
|
|
|
so, subject to the following conditions:
|
|
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
|
|
|
copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
|
|
SOFTWARE
|
2011-12-06 03:49:41 +08:00
|
|
|
|
|
|
|
|
|
### Other components:
|
|
|
|
|
|
|
|
|
|
* jQuery: MIT/GPL license
|
2012-01-08 00:35:11 +08:00
|
|
|
|
* highlight.js: Copyright © 2006, Ivan Sagalaev
|
2012-01-25 11:28:58 +08:00
|
|
|
|
* highlightjs-coffeescript: WTFPL - Copyright © 2011, Dmytrii Nagirniak
|