feat: add authentication and book upload

- Session-based login (username/password, 30-day cookie)
- SQLite user store with bcrypt password hashing (modernc.org/sqlite)
- Per-user upload permission (can_upload flag)
- Admin CLI (cmd/admin) for user management:
  user add/list/delete/set-upload
- Upload handler for EPUB/PDF with path-traversal protection
- All routes protected by requireAuth middleware;
  /upload additionally requires requireUpload
- Login/logout UI, upload form, logout button in header
- New env var: USERS_DB (default: users.db, gitignored)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-08-11 19:11:40 +02:00
co-authored by Copilot
parent a8b31dae8a
commit a66c370de4
13 changed files with 1115 additions and 111 deletions
+28 -4
View File
@@ -8,6 +8,8 @@ Minimalistische eBook-Bibliothek für den Tolino-Webbrowser.
- Detailseite pro Buch
- Download-Link pro Buch (für Tolino)
- Schlichtes, kontrastreiches UI ohne JavaScript-Abhängigkeit
- Login-Pflicht (Session-Cookie, 30 Tage)
- Optionaler Buch-Upload für berechtigte Benutzer
## Voraussetzungen
@@ -34,13 +36,21 @@ go mod tidy
templ generate
```
3. Server starten:
3. Ersten Benutzer anlegen:
```bash
go run ./cmd/admin user add <benutzername>
# mit Upload-Recht:
go run ./cmd/admin user add <benutzername> --upload
```
4. Server starten:
```bash
go run ./cmd/server
```
4. Browser öffnen:
5. Browser öffnen:
- `http://localhost:8080`
@@ -51,9 +61,23 @@ Lege deine Dateien in den Ordner `books/`:
- `.epub` (bevorzugt)
- `.pdf` (optional)
Alternativ können Benutzer mit Upload-Recht Bücher direkt im Browser hochladen.
## Benutzerverwaltung (CLI)
```bash
go run ./cmd/admin user list
go run ./cmd/admin user add <name> [--upload]
go run ./cmd/admin user delete <name>
go run ./cmd/admin user set-upload <name> <true|false>
```
## Konfiguration
Umgebungsvariablen:
- `ADDR` (Standard `:8080`)
- `BOOKS_DIR` (Standard `books`)
| Variable | Standard | Beschreibung |
|------------|------------|---------------------------------|
| `ADDR` | `:8080` | Listen-Adresse des Servers |
| `BOOKS_DIR`| `books` | Verzeichnis mit Büchern |
| `USERS_DB` | `users.db` | Pfad zur SQLite-Benutzerdatenbank |