Repository navigation
Release v0.1.2
Release Notes
v0.1.1 — File-Level Privacy & User Auth
Highlights
- File-level permissions — Fine-grained ACLs on private bucket files. Grant read, write, or admin permissions to clients or users.
- User authentication —
POST /auth/loginendpoint for email/password login. Users can manage file permissions alongside clients. - Permission API —
POST/DELETE/GET /buckets/{pid}/permissionsfor granting, revoking, and listing file permissions. - Auto-registration — Files uploaded to private buckets are automatically registered as assets with admin permissions for the uploader.
- Asset CLI —
ppdrive asset grant/revoke/listcommands for managing file permissions from the terminal. - User CLI —
ppdrive user createcommand for creating user accounts. - AuthExtractor — Middleware supports both client tokens (
x-ppdrive-client) and user Bearer tokens (Authorization: Bearer).
Bug Fixes
- Fixed download flow to use proper bucket owner check instead of broken
check_ownership - Fixed
list_permissionsqueries to resolve grantees from both clients and users tables - Fixed user
createto includeupdated_atfield
Documentation
- Added File Permissions API reference
- Added User Authentication API reference
- Added Asset and User CLI command docs
- Added "How It Works" section to homepage with upload/download examples
- Updated Authentication page to cover both client and user auth
- Updated Download page to document file-level permission checks
- Updated Upload page to document private bucket asset auto-registration
Internal
- Made
validatoralways enabled in shared crate (no longer feature-gated) - Added
hexdependency for user token signing - Added
is_adminfield to users migration
v0.1.0 — First Stable Release
Highlights
- Per-IP rate limiting (100 req/s, burst 200)
POST /bucketsAPI for client bucket creation- HTTP metrics at
/metrics(Prometheus) - Health check at
/health - Graceful shutdown (SIGINT/SIGTERM)
- Configurable DB pool size via
db_pool_size - Request timeout (30s, HTTP 408)
- Temp file background cleanup (hourly, 2hr max age)
Security
- Timing-safe token comparison (Blake3)
- Stable ChaCha20-Poly1305 encryption
- Path traversal protection via
Path::components() - No hardcoded database credentials
- Secrets file: 56 bytes, mode
0600, zeroed on drop #[serde(deny_unknown_fields)]on all API request structs- Input validation on all API fields (length, range, format)
Bug Fixes
- Fixed dollar-sign format string in token parsing
- Fixed download route concurrency limit
- Fixed JSON error responses (no HTML leaking)
- Fixed path resolution (no directory creation on check)
- Fixed bucket size check using
get_folder_size - Fixed
AssetOwnerName::from(i16)silent default - Fixed
.unwrap()onHeaderValue::from_strin download handler
Performance
spawn_blockingfor path resolution (N+1 query fix)- SQLite WAL mode enabled
- Configurable connection pool size (
db_pool_size, default 10) - Connection pool: 30min max lifetime, 5min idle timeout
Docker & Deployment
- Multi-stage Dockerfile with non-root user
HEALTHCHECKin Dockerfile- Docker Compose with PostgreSQL + Redis
- Docker Compose health checks with
service_healthyconditions - Fixed port mapping (8000:8000)
- Volume mounts preserve config file
Install Scripts
- macOS support in
install.sh - ARM64 support (Linux, macOS, Windows)
- Version check (skip install if up to date)
- Windows: fixed URLs, User PATH (no admin required)
- Cleanup on failure (not just happy path)
Platforms
Linux (x86_64, arm64), macOS (x86_64, arm64), Windows (x86_64)