Skip to content

feat(api): add per-actor rate limit on POST /events/submit (and future /forms, /announcements submit) #2008

@cdcore09

Description

@cdcore09

Summary

POST /events/submit is auth-gated but unbounded — a single member could enqueue arbitrary draft events into the staff review queue. Same concern will apply to future member-facing submission endpoints in Plans 4 and 5.

Requirements

  • Decide a sensible cap (e.g., 10 submissions per actor per 24h)
  • Implement per-actor rate limit middleware that applies to POST /events/submit
  • Surface rate-limit-exceeded as 429 Too Many Requests with a Retry-After header
  • Add unit test covering the cap
  • Make the middleware composable so future submission endpoints (Plans 4 + 5) can opt in

Context

Flagged in the Plan 2 review. Rate limiting is best done at the Worker layer (e.g., Cloudflare Workers KV or Durable Object). Plan 4 (forms) and Plan 5 (announcements/broadcast) will benefit from the same primitive.

Implementation Notes

Options:

  • Cloudflare Workers Rate Limiting API (built-in, easy)
  • KV-backed counter with TTL (cheap, works on the existing stack)
  • Postgres-backed counter (consistent but adds DB hops to every submit)

Workers Rate Limiting API is the YAGNI default unless we need cross-region consistency.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions