Merge origin/main into feature/config-validation (TODO.md bookkeeping)
This commit is contained in:
32
TODO.md
32
TODO.md
@@ -19,11 +19,8 @@ on main.
|
|||||||
|
|
||||||
# Next Step
|
# Next Step
|
||||||
|
|
||||||
P0: manual test pass of the auth and encrypted URL flows, then commit
|
P0: implement cache size management and eviction so the disk cannot
|
||||||
the checked-off results to TODO.md: visit / and see the login form;
|
fill up
|
||||||
wrong key shows an error; correct signing key shows the generator form;
|
|
||||||
a generated encrypted URL serves the image; an expired URL (short TTL)
|
|
||||||
returns 410; logout redirects back to login
|
|
||||||
|
|
||||||
# Completed Steps
|
# Completed Steps
|
||||||
|
|
||||||
@@ -33,6 +30,29 @@ returns 410; logout redirects back to login
|
|||||||
to omitted keys), unknown config keys abort startup, a malformed
|
to omitted keys), unknown config keys abort startup, a malformed
|
||||||
config file aborts instead of being skipped, and `state_dir` is
|
config file aborts instead of being skipped, and `state_dir` is
|
||||||
verified creatable and writable before the listener binds
|
verified creatable and writable before the listener binds
|
||||||
|
- 2026-08-07 manual test pass of the auth and encrypted URL flows
|
||||||
|
against a locally built and running `pixad` (built from `main` at
|
||||||
|
`6573b9d`, port 18099, local throwaway config); all six checks
|
||||||
|
passed, plus all nine tests in `scripts/manual-test.sh` (closes #49):
|
||||||
|
- [x] visit `/` and see the login form: HTTP 200, `Pixa - Login`
|
||||||
|
page with `name="key"` password form
|
||||||
|
- [x] wrong key shows an error: POST `/` with `key=wrong-key`
|
||||||
|
returned HTTP 200 login page containing "Invalid signing key"
|
||||||
|
- [x] correct signing key shows the generator form: POST `/`
|
||||||
|
returned HTTP 303 to `/` with
|
||||||
|
`Set-Cookie: pixa_session=...; HttpOnly; Secure; SameSite=Strict`;
|
||||||
|
GET `/` with that cookie rendered `Pixa - URL Generator` with the
|
||||||
|
`/generate` form and logout link
|
||||||
|
- [x] a generated encrypted URL serves the image: POST `/generate`
|
||||||
|
(ttl=3600) produced a `/v1/e/<token>/img.jpeg` URL that returned
|
||||||
|
HTTP 200, `Content-Type: image/jpeg`, an 800x600 baseline JPEG of
|
||||||
|
61706 bytes
|
||||||
|
- [x] an expired URL (short TTL) returns 410: a ttl=1 URL fetched
|
||||||
|
after 3 s returned HTTP 410 Gone with
|
||||||
|
`{"error":"URL has expired","status":410,...}`
|
||||||
|
- [x] logout redirects back to login: GET `/logout` returned HTTP
|
||||||
|
303 to `/` with `Set-Cookie: pixa_session=; Max-Age=0`;
|
||||||
|
subsequent GET `/` rendered the login form again
|
||||||
- 2026-08-07 fix the two remaining gosec findings (G124 in
|
- 2026-08-07 fix the two remaining gosec findings (G124 in
|
||||||
internal/session): session cookies now always carry
|
internal/session): session cookies now always carry
|
||||||
Secure/HttpOnly/SameSite=Strict on both the set and clear paths;
|
Secure/HttpOnly/SameSite=Strict on both the set and clear paths;
|
||||||
@@ -59,8 +79,6 @@ returns 410; logout redirects back to login
|
|||||||
|
|
||||||
# Future Steps
|
# Future Steps
|
||||||
|
|
||||||
- P0: implement cache size management and eviction so the disk cannot
|
|
||||||
fill up
|
|
||||||
- P1: implement blocked networks configuration to extend SSRF
|
- P1: implement blocked networks configuration to extend SSRF
|
||||||
protection
|
protection
|
||||||
- P1: rate limit global concurrent upstream fetches to prevent
|
- P1: rate limit global concurrent upstream fetches to prevent
|
||||||
|
|||||||
Reference in New Issue
Block a user