Termcloud
A simple file storage service with user buckets and usage limits.
Setup
- Set up PostgreSQL database and run the schema:
psql -d termcloud -f internal/db/schema.sql
- Set environment variables:
# .env.example
DATABASE_URL="postgres://user:password@localhost/termcloud"
PORT="8080"
- Build and run:
make build
make run
Usage
Create a user and get API key:
make admin ARGS="create-user mai sakurajima@waifu.club 5"
API Endpoints
All API endpoints require X-API-Key header.
Buckets:
GET /api/v1/buckets- List user bucketsPOST /api/v1/buckets- Create bucket{"name": "my-bucket"}DELETE /api/v1/buckets/:bucket- Delete bucket
Objects:
GET /api/v1/buckets/:bucket/objects- List objects in bucketPUT /api/v1/buckets/:bucket/objects/*- Upload file (multipart form with "file" field)GET /api/v1/buckets/:bucket/objects/*- Download fileDELETE /api/v1/buckets/:bucket/objects/*- Delete file
User Info:
GET /api/v1/user- Get user info and usage stats
Example Usage
# Create bucket
curl -X POST http://localhost:8080/api/v1/buckets \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{"name": "my-files"}'
# Upload file
curl -X PUT http://localhost:8080/api/v1/buckets/my-files/objects/test.txt \
-H "X-API-Key: your-api-key" \
-F "file=@test.txt"
# Download file
curl http://localhost:8080/api/v1/buckets/my-files/objects/test.txt \
-H "X-API-Key: your-api-key" \
-o downloaded.txt
Description
Languages
Go
94.7%
PLpgSQL
4.5%
Makefile
0.8%