Name each capture's posting by an opaque key on the API (#711) #1077
No reviewers
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo!1077
Loading…
Reference in a new issue
No description provided.
Delete branch "711-captures-posting-key"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The browser extension counts the postings waiting for review once each, merging
Postulo's list with its own unsent captures, and to do it carried a port of
same_url() with cases of its own. Two copies of one rule drift, and the day they
did the badge and the review list would disagree with Postulo about what is one
posting.
Every capture the API answers with (GET /captures, POST /captures, the rendering
call) now carries
posting_key: an HMAC of the storedCapture.url_keyand theowner's id, under a key derived from the instance's key with a domain prefix of
its own (secrets.posting_key, beside backup_mac). Two captures of one posting
share it, two postings do not, and it is stable while the instance's key is.
Not the normalised address: a token holding only
capturesis not told theaddress (#761), and a normalised one per row, or a bare SHA of it, would hand it
back. The keyed hash says nothing without the key, so it is told to that token
too. The owner's id is in it so two accounts' keys cannot be matched against each
other. An address with no host has an empty key, as same_url() matches nothing.
POST /captures/known answers each asked address's key as well, so a client can
put what it has not sent yet beside the list without reducing an address itself;
it tells a captures-only token nothing /known did not already say. The field is
described in the OpenAPI schema; the threat model says what a captures token sees.
Closes #711
Notes for review
posting_key, an HMAC-SHA256 (keyed fromPOSTULO_FIELD_KEY, elseSECRET_KEY) of the owner's id and the storedurl_key.urlstays blank, as #761 requires.POST /captures/knownalso returns the key for each address asked about, so the extension can key its unsent captures too. A capture-only token learns nothing new, since/knownalready says whether a capture exists.same_url()copy, filed on postulo-chromium.🤖 Generated with Claude Code
72ce330b502e01143c75