fix: keep MANGA_WEB_HOST unset in .env.example and make no-op saves inert
Re-review of the fix wave found the .env.example edit defeated the fix
it belonged to: shipping MANGA_WEB_HOST=manga.example.com re-supplied
the value that ${MANGA_WEB_HOST:?} exists to reject, so a fresh
`cp .env.example .env` started fine and Traefik published the UI router
on a domain the operator does not own. Left commented, matching
MANGA_API_HOST; DEPLOY.md 1 now lists it among the required variables.
Also:
- uiChapter leaves last_chapter too, not only last_chapter_url, when the
submitted number is unchanged. It used to rewrite the display string
("45.0" to "45") behind a frozen updated_at.
- Design spec 4.2 documents the two-secret key derivation.
- Corrected the pruneLocked aliasing rationale and the stale
sessionKeyPurpose comment.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -122,11 +122,14 @@ Name `mangabm_session`. Value:
|
||||
|
||||
```
|
||||
<expiry_unix_ms> "." base64url(HMAC-SHA256(<expiry_unix_ms>, key))
|
||||
key = SHA256(API_TOKEN || "mangabm-web-session-v1")
|
||||
key = SHA256(API_TOKEN || 0x00 || WEB_PASSWORD || "mangabm-web-session-v1")
|
||||
```
|
||||
|
||||
Stateless: no session table, sessions survive restarts, and rotating
|
||||
`API_TOKEN` invalidates every session at once.
|
||||
Stateless: no session table, sessions survive restarts, and rotating either
|
||||
`API_TOKEN` or `WEB_PASSWORD` invalidates every session at once. Both secrets
|
||||
are bound in so that changing the password actually logs existing browsers out;
|
||||
the `0x00` separates the two variable-length secrets so no pair of different
|
||||
inputs can concatenate to the same string.
|
||||
|
||||
Attributes: `HttpOnly`, `SameSite=Lax`, `Path=/`, `Max-Age` 60 days so the phone
|
||||
stays logged in across long gaps. `Secure` is set when `r.TLS != nil` or
|
||||
|
||||
Reference in New Issue
Block a user