Files
ebooks/README.md
T
arnefandCopilot 817763887a refactor: replace can_upload boolean with role-based access control
Introduces a three-tier role hierarchy: reader < uploader < admin.

- internal/users/role.go: Role type, roleLevel map, AtLeast(min),
  ParseRole() — new roles added by inserting into roleLevel only
- internal/users/store.go: versioned migrations via _schema_version table;
  v2 migration adds 'role' column and migrates existing can_upload data;
  SetRole() replaces SetUpload(); Session carries Role instead of CanUpload
- internal/web/middleware.go: generic requireRole(minRole) middleware
  replaces the ad-hoc requireUpload
- internal/web/handlers.go: upload routes use requireRole(RoleUploader);
  listBooks derives canUpload from sess.Role.AtLeast(RoleUploader)
- cmd/admin/main.go: user add --role <reader|uploader|admin>,
  user set-role replaces user set-upload
- README, copilot-instructions updated

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-11 19:43:39 +02:00

1.7 KiB

eBook Library (Go + templ)

Minimalistische eBook-Bibliothek für den Tolino-Webbrowser.

Features (MVP)

  • Listet EPUB/PDF-Dateien aus books/
  • 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

Templ CLI installieren:

go install github.com/a-h/templ/cmd/templ@latest

Start

  1. Abhängigkeiten laden:
go mod tidy
  1. Templates generieren:
templ generate
  1. Ersten Benutzer anlegen:
go run ./cmd/admin user add <benutzername>
# mit Upload-Recht:
go run ./cmd/admin user add <benutzername> --upload
  1. Server starten:
go run ./cmd/server
  1. Browser öffnen:
  • http://localhost:8080

Bücher hinzufügen

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)

Rollen (aufsteigend): readeruploaderadmin

go run ./cmd/admin user add <name> [--role reader|uploader|admin]
go run ./cmd/admin user list
go run ./cmd/admin user delete <name>
go run ./cmd/admin user set-role <name> <reader|uploader|admin>

Konfiguration

Umgebungsvariablen:

Variable Standard Beschreibung
ADDR :8080 Listen-Adresse des Servers
BOOKS_DIR books Verzeichnis mit Büchern
USERS_DB users.db Pfad zur SQLite-Benutzerdatenbank