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
+36
View File
@@ -208,3 +208,39 @@ code {
border: 1px solid #000;
padding: 0.1rem 0.3rem;
}
/* --- Auth & Upload --- */
.btn-logout {
background: none;
border: 1px solid #000;
cursor: pointer;
padding: 0.3rem 0.6rem;
font-size: 0.9rem;
}
.login-box {
max-width: 22rem;
margin-top: 3rem;
}
.login-form,
.upload-form {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.login-form input,
.upload-form input[type="file"] {
padding: 0.5rem;
font-size: 1rem;
border: 1px solid #000;
}
.error {
border: 2px solid #000;
padding: 0.5rem 0.75rem;
margin-bottom: 0.75rem;
font-weight: bold;
}