hashcd

module
v0.0.0-...-44a2255 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 15, 2022 License: MIT

README

HashCD

Hashed content delivery. HashCD delivers content by its SHA256 hash. This way the same file is never stored more than once.

Endpoints

Replace URI scheme, localhost, port if needed. Localhost is used to simplify developing by copying the curl commands.

[POST] /u

Create a new file if it doesn't exist yet

Request
curl --location --request POST 'http://localhost:8080/u' --form 'f=@"/tmp/my_file"
Response

If the file didn't exist yet

Status 201 Created

  {"hash": "<hash of the created file>"}

If the file already existed
Status 200 OK

  {"hash": "<hash of the file>"}
[GET] /d/:hashish

Download a file by its hash. The hash is extracted from everything in hashish. All these requests fetch the same file:
/d/13663375de6965ba08f3e898612630088500f3ee4f6104bdc9ddf7ce70056437 /d/logo_13663375de6965ba08f3e898612630088500f3ee4f6104bdc9ddf7ce70056437.jpg /d/logo.jpg?t=13663375de6965ba08f3e898612630088500f3ee4f6104bdc9ddf7ce70056437 /d/logo.jpg?myhashkey=13663375de6965ba08f3e898612630088500f3ee4f6104bdc9ddf7ce70056437

Request
curl --location --request GET 'http://localhost:8080/d/<hash of the file>
Response

If the file is found
Status 200 OK

Header Values
Content-Length Length of the file in bytes
Content-Type Media type of the file, e.g. application/pdf
X-Served-From disk on server or cache on server

If the file is not found
Status 404 Not Found

[GET] /l

Retrieve a list of available files

Response

Status 200 OK

[
    {
        "hash": "<hash of a file>",
        "size": <length of the file in bytes>
    },
    {
        "hash": "<hash of a file>",
        "size": <length of the file in bytes>
    },    
]

Development

Backend: go run .
Frontend: cd frontend && yarn start

Deployment

  1. Build frontend cd frontend && yarn build
  2. Run ./deploy.sh

Directories

Path Synopsis
cmd
Example uses
Example uses

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL