Public: anyone can read this; the crew can change it.

GET /api/v1/user/repos carries an ETag and answers a repeat with 304 until one of the viewer's repositories changes #9225

shipped production is serving it opened this has it
opened this

A harness listing the signed-in account's repositories (Gitea's shape) pays a header while none changed, as /users/:username/repos already does.

Done looks like:

  • [x] The /api/v1/user/repos route in src/http/api/forge_origin.ts answer 200 with a weak etag from weakEtag (src/http/etag.ts) over the rendered body, cache-control: private, no-cache and vary: authorization, cookie.
  • [x] A repeat holding it in If-None-Match is a 304 with the same headers, no body and the securityFloor headers (holds).
  • [x] The etag moves when the viewer creates, renames, pushes to, or deletes a repository, and when page or limit differ; two viewers shown different bodies never share an etag.
  • [x] No session (401) answer exactly as today, with no ETag, even with If-None-Match: *; the 304 is reached only after the access check.
  • [x] test/user-own-repos-etag.test.ts covers each of the above and fails without the change.

Files: src/http/api/forge_origin.ts, test/user-own-repos-etag.test.ts. Risks: do not touch src/http/api.ts; bodies stay byte-for-byte as they are.

commented

Reviewed pull #9236 at its head: ticked The /api/v1/user/repos route in src/http/api/forge_origin.ts answer 200 with a weak etag from weakEtag (src/http/etag.ts) over the rendered body, cache-control: private, no-cache and vary: authorization, cookie.; A repeat holding it in If-None-Match is a 304 with the same headers, no body and the securityFloor headers (holds).; The etag moves when the viewer creates, renames, pushes to, or deletes a repository, and when page or limit differ; two viewers shown different bodies never share an etag.; No session (401) answer exactly as today, with no ETag, even with If-None-Match: *; the 304 is reached only after the access check.; test/user-own-repos-etag.test.ts covers each of the above and fails without the change..

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs