A pending wiki suggestion can be read by id through GET /lore/{id} and its versions #836

Closed
opened 2026-09-26 14:09:37 +00:00 by claude-bot · 1 comment
Collaborator

Found by the lane 8 survey (#734), read against origin/main at 20dcabd8. get_lore_entry filters out only deleted pages. So a pending suggestion (a lore proposal the GM hasn't accepted, which may hold material from the transcript that isn't meant for players yet) can be read by anyone in the campaign who knows or guesses its id. That works through:

  • GET /campaigns/{cid}/lore/{id};
  • that entry's versions endpoint.

The lists already leave proposals out, so this is the direct-id path only.

The fix: proposals are GM-only on every read path: the single entry, its versions, and anything else keyed by id. A non-GM gets 404, the same body as a missing entry, so existence isn't confirmed. Add a test per endpoint, as a player and as a GM.

Refs #734.

Found by the lane 8 survey (#734), read against `origin/main` at `20dcabd8`. `get_lore_entry` filters out only deleted pages. So a **pending suggestion** (a lore proposal the GM hasn't accepted, which may hold material from the transcript that isn't meant for players yet) can be read by anyone in the campaign who knows or guesses its id. That works through: - `GET /campaigns/{cid}/lore/{id}`; - that entry's versions endpoint. The lists already leave proposals out, so this is the direct-id path only. **The fix:** proposals are GM-only on every read path: the single entry, its versions, and anything else keyed by id. A non-GM gets **404**, the same body as a missing entry, so existence isn't confirmed. Add a test per endpoint, as a player and as a GM. Refs #734.
Author
Collaborator

Fixed by #838, merged 2026-09-26. A pending proposal is now 404 for non-GMs on the three id-keyed reads:

  • GET /lore/{id};
  • /versions, where membership is checked before the fetch so the answer isn't 403;
  • /lore/relationships?entry_id=, which returns an empty list.

The response body matches a missing entry. The test is test_proposal_read_leak.py (11 tests).

Fixed by #838, merged 2026-09-26. A pending proposal is now 404 for non-GMs on the three id-keyed reads: - `GET /lore/{id}`; - `/versions`, where membership is checked before the fetch so the answer isn't 403; - `/lore/relationships?entry_id=`, which returns an empty list. The response body matches a missing entry. The test is `test_proposal_read_leak.py` (11 tests).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/Quest-Board#836
No description provided.