91 lines
2.3 KiB
Markdown
91 lines
2.3 KiB
Markdown
# Termcloud
|
|
|
|
A simple file storage service with user buckets and usage limits.
|
|
|
|
## Setup
|
|
|
|
1. Set up PostgreSQL database and run the schema:
|
|
```bash
|
|
psql -d termcloud -f internal/db/schema.sql
|
|
```
|
|
|
|
2. Configure environment variables (copy `.env.example` to `.env` and customize):
|
|
```bash
|
|
cp .env.example .env
|
|
# Edit .env with your settings
|
|
```
|
|
|
|
### Configuration Options
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `DATABASE_URL` | - | PostgreSQL connection string |
|
|
| `PORT` | 8080 | Server port |
|
|
| `STORAGE_DIR` | storage | Directory for file storage |
|
|
| `MAX_FILE_SIZE_MB` | 100 | Maximum file size in MB |
|
|
| `RATE_LIMIT` | 20.0 | Requests per second limit |
|
|
| `CORS_ORIGINS` | * | Allowed CORS origins |
|
|
| `GZIP_LEVEL` | 5 | Gzip compression level (1-9) |
|
|
| `DB_MAX_CONNECTIONS` | 100 | Maximum database connections |
|
|
| `DB_MIN_CONNECTIONS` | 10 | Minimum database connections |
|
|
| `DB_CONN_LIFETIME` | 1h | Connection lifetime |
|
|
| `DB_CONN_IDLE_TIME` | 1m | Connection idle timeout |
|
|
| `DB_HEALTH_CHECK_PERIOD` | 5s | Health check interval |
|
|
| `DEFAULT_STORAGE_LIMIT_GB` | 1 | Default user storage limit |
|
|
|
|
3. Build and run:
|
|
|
|
```bash
|
|
make build
|
|
make run
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Create a user and get API key:
|
|
|
|
```bash
|
|
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 buckets
|
|
- `POST /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 bucket
|
|
- `PUT /api/v1/buckets/:bucket/objects/*` - Upload file (multipart form with "file" field)
|
|
- `GET /api/v1/buckets/:bucket/objects/*` - Download file
|
|
- `DELETE /api/v1/buckets/:bucket/objects/*` - Delete file
|
|
|
|
**User Info:**
|
|
|
|
- `GET /api/v1/user` - Get user info and usage stats
|
|
|
|
### Example Usage
|
|
|
|
```bash
|
|
# 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
|
|
```
|