Volatile file storage written in Go
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bitnuke
deps
.gitignore
.travis.yml
LICENSE
Makefile
config.gcfg
readme.md

readme.md

Bitnuke

Build Status (Travis)
Bitnuke is a fully volatile data storage solution currently running at https://bitnuke.io
Please note, this repo is soley the API backend. To bring up the full stack please visit bitnuke-compose. This repo is strictly the API that supports the following REST calls:

Running Bitnuke

There are 2 ways to run bitnuke:

  1. From Source: Redis and Nginx are required to be run before the code can be run. Nginx configs can be found in deps/conf/ and the static files for the frontend are in deps/data/bitnuke/static/. Once Nginx and redis are up you can use the following to build and deploy the code.
    make dependencies
    make run
    If you want to compile the code use:
    make bitnuke(dynamically compiled) or make stat(statically compiled)
  2. ACI/rkt: We have public rkt images hosted on the site! check them out here or go give us a fetch for 64bit machines! rkt fetch unixvoid.com/bitnuke-api:0.20.2. This image can be run with rkt or you can grab our handy service file at deps/bitnuke.service

API guide

Bitnuke uses an API for all actions that take place on the site, the following is the specification for the exposed enpoints and their protocols.

  • /{data}{sec_key} : GET : endpoint for fetching data
    • example: curl https://bitnuke.io/w80ysllv/3wp89a7vlvr1b0hwe3vdhaidj8aeuvhq
  • /{data} : GET : endpoint for getting a redirect from link shortener
    • example: curl https://bitnuke.io/g3c7
  • /upload : POST : endpoint for uploading data
    • parameters: file
    • example: curl -F file=@testfile.txt https://bitnuke.io/upload
  • /remove : POST : endpoint for removing a file before its natural expiry.
    • parameters: file_id, sec_key, removal_key
    • example: curl -d file_id=w80ysllv -d sec_key=3wp89a7vlvr1b0hwe3vdhaidj8aeuvhq -d removal_key=aeirkw8o82q1dytlf2gp https://bitnuke.io/remove
  • /compress : POST : endpoint for the link shortener
    • parameters: link
    • example: curl -d link=https://google.com https://bitnuke.io/compress

###Shorthand

/upload                 ::  takes a POST of multipart data to be stored. returns a token and security token (as header)
/remove                 ::  takes a POST of url-encoded `token`(token) and `sec`(security token)
/compress               ::  takes a POST of multipart form (a url) to be stored. returns a token
/{data}                 ::  a token previously generated by '/compress', returns data
/{data}{secure key}     ::  a token previously generated by '/upload', returns data

Storage

Bitnuke does the following when recieving data.

  • Generates a file_id: the sha3:512 hash of a randomly generated 8 digit alpha numeric string (the key gets stored on disk with this name)
  • Generates a sec_key: a 32 character randomly generated alpha numeric string for encryption
  • Generates a removal_key: a 20 character randomly generated alpha numeric string to be used as a removal auth
  • Base64 encodes the file contents and then uses AES 256 encryption algorithm to encrypt the contents
  • Adds a redis hash key with the file_id as the name and contents are the AES 256 encrypted sec_key and removal_key

License

Bitnuke is distributed under the MIT license. See LICENSE in the root of the project for details.

Contributions

  • Shoutout to JenksMedia for the custom background