summaryrefslogtreecommitdiff
path: root/README.md
blob: ddf5add2b733f4243dec65e2cb679fa28b423e19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
## binnit -- minimal pastebin clone in golang

That's just it. A minimalist, no-fuss pastebin clone server in
golang. It supports only two operations:

* store a new paste, through a POST request
* retrieve a paste using its unique ID, through a GET request

what else do you need? 

## WTF?

`binnit` serves pastes in the format:

    mypasteserver.org/abcdef1234567890

and stores them in a folder, one file per paste, whose filename is
identical to the paste ID. The unique ID of a paste is obtained from
the SHA256 of the concatenation of title, time, and content. Rendering
is minimal, on purpose, but based on a customisable template.

`binnit` is currently configured through a simple key=value
configuration file, whose name can be specified on the command line
through the option `-c <config_file>`. The configurable options are:

* server\_name  (the FQDN where the service is reachable from outside)
* bind\_addr (the address to listen on)
* bind\_port (the port to bind)
* paste\_dir (the folder where pastes are kept)
* templ\_dir (the folder where HTML files and templates are kept)
* max\_size (the maximum allowed length of a paste, in bytes. Larger
    pastes will be trimmed to that length)
* log_fname (path to the logfile)

## Why another pastebin?

There are hundreds of pastebin-like servers in the wild. But the
overwhelming majority of them is _overbloated_ software, depending on
lots of libraries/frameworks/tools, providing a whole lot of useless
features, and implying a useless amount of complexity. 

A paste server must be able to do two things, 1) create a new paste
and return its ID, and 2) retrieve an existing paste using its
ID. `binnit` does just and only these two things, in the simplest
possible way, without any external dependency. If you need more, then
`binnit` is not for you.

If you want to strip `binnit` down even further, you could consider
removing:

* sanity checks and error management
* logging
* the external configuration file
* code comments

> It seems that perfection is attained not when there is nothing more
> to add, but when there is nothing more to remove (Antoine de Saint
> Exupéry)


## LICENSE

`binnit` can be used, modified, and redistributed under the terms of
the GNU Affero General Public Licence, version 3 of the Licence or, at
your option, any later version. Please see the LICENSE.md file for
details.