github: shadowy octopus with the head of a robot, emblazoned with the Dreamwidth swirl (Default)
github ([personal profile] github) wrote in [site community profile] changelog2026-02-12 09:54 pm

[dreamwidth/dreamwidth] a182d9: Rate Limiting (#3490)

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: a182d9895fbc8e9709c71c4e4361f1ba83afec23 https://github.com/dreamwidth/dreamwidth/commit/a182d9895fbc8e9709c71c4e4361f1ba83afec23 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-12 (Thu, 12 Feb 2026)

Changed paths: M .github/workflows/ci.yml M app.psgi M cgi-bin/Apache/LiveJournal.pm A cgi-bin/DW/API/RateLimit.pm M cgi-bin/DW/Controller/API/REST.pm M cgi-bin/DW/Controller/API/REST/Journals.pm A cgi-bin/DW/RateLimit.pm M cgi-bin/LJ/Console/Command/Suspend.pm M cgi-bin/LJ/Test.pm A cgi-bin/Plack/Middleware/DW/RateLimit.pm M doc/dependencies-cpanm M doc/raw/memcache-keys.txt M etc/config.pl.example A t/rate-limit.t

Log Message:


Rate Limiting (#3490)

  • Add basic rate limiting module

  • Add configuration overrides

This enables rate limits to be overridden.

  • Add API rate limit basics

  • Update Apache rate limiting to use new DW::RateLimit API

Move rate limiting after start_request() so get_remote() works, switch to rate-string API and check() method. Also restore approvenew setting lost during rebase.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • Add Plack rate limiting middleware

Port rate limiting from Apache::LiveJournal to a Plack middleware so it works under Starman. Same rates: 100/60s authenticated, 30/60s anonymous. Wired in after DW::Sysban in app.psgi.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • Fix tidy formatting in rate limiting code

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • Add rate limit tests to CI workflow

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • Add CPAN dependency install step to CI workflow

The devcontainer image bakes dependencies at build time, so new deps added in a PR aren't available until the image rebuilds. Running cpm install from the checked-out dependencies-cpanm ensures CI always has the right modules for the code under test.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com