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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user