G0Bin is a client side encrypted pastebin. The server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256 bits AES.
This project was created mostly as a Go learning exercise through converting a project I use often. It also serves as a great sample project in Go since it only uses the standard library.
Here are some elements that are have been implemented.
- Nested HTML Templates
- Using Anonymous Structs to pass data to HTML Templates
- Hot configuration reload from a JSON configuration file
- HTTP server logging
NOTE: The demo was modified to run on Google App Engine using the Datastore API.
How it works
When pasting a text into G0Bin:
- You paste your text in the browser and click the “Submit” button.
- A random 256 bits key is generated in the browser.
- Encrypted data is sent to the server and stored.
- The browser displays the final URL with the key.
- The key is never transmitted to the server, which therefore cannot decrypt data.
When opening a G0Bin URL:
- The browser requests encrypted data from the server
- The decryption key is in the anchor part of the URL (#…) which is never sent to the server.
- Data is decrypted in the browser using the key and displayed.
Clone this repository, build it and run it.
git clone https://github.com/jyap808/g0bin.git cd g0bin go build ./g0bin
To run G0Bin on a different port, modify the Port setting in config.json.
The configuration of G0Bin can also be reloaded by sending a HUP signal to the process.
kill -HUP [PROCESS ID]
This project modifies the Python implementation and cleans things up to make them more generic. It has the following changes:
- Remove extra header links.
- Remove extra link options.
- Remove extra layout details.
- Set Burn after reading as default option.
Here are some items which are in the Python implemention which have not been implemented.
- Paste counter - Display a tiny counter for pastes created
- Names/links to insert in the menu bar
- Handling of Max Size
- Paste ID length
- Clone paste
Copyright (c) 2013 Julian Yap