d664b51c64
* rm tables * rm event-stream & proxied * Remove appview services, move label service to pds * only proxy appview stuff * delete more tables * Start removing message dispatched from pds * more syncing-up removal of message dispatcher in pds * merged * remove feedgens from pds, remove getPopular * remove unused image helper from pds * fixing compiler errors * clean up sharp * rm label service * first pass on cleaning up tests * fix up a bunch of tests * moderation view tests * last admin tests * got a lil overzealous in deletes * clean up unused cfg * clean up label table * simplify admin repo search query/logic * tidy pds entrypoint * in-progress pds config changes * cfg fiddling * finish cleaning up cfg/ctx * comments * building * pds prefix on env * test env * collapse pds migrations down into a single migration * fix up dev-env * tidy * cleanup * fix pds admin tests * fix handle test * fix pds proxy tests * fix subscribe repos test * fix sqlite config in pds tests * add sqlite clause in sequencer-leader * fix actor search w/ sqlite on pds * fixes * fix dev env build * update pds service entrypoint * simple env example * make takedown ids opaque identifiers in the pds * use pds routes for api tests * update pds dockerfile with volume and correct port env var * add a couple env vars to example * add comments to env example * @atproto/pds 0.2.0-beta.0 * @atproto/aws 0.0.1-beta.0 * appview did * @atproto/aws 0.0.1 * enable logs by default * update env example * bugfixing sandbox issues * consistency in pds env var name for appview url * log on pds start and stop, configure version at runtime * @atproto/pds 0.2.0-beta.1 * fix semver matching for pds beta version * v0.2.0-beta.2 * default invites to being not required * fix flaky test * limit db connections in tests * publish 0.2.0-beta.d3 * fix invite required parsing * @atproto/pds 0.2.0-beta.5 * Proxy getPopularFeedGenerators on simplified pds (#1222) proxy getPopularFeedGenerators on pds Co-authored-by: dholms <dtholmgren@gmail.com> * tidy migrations * fix service entry * bump version * change auth order * bump version * bump version * add upgradeRepoVersion & fallback url for cdn * bump version * merging * merge pds * building dev-env * merging tests * merge service entry * test fixing * tidy * fix admin search * tidy * tidy * add snap for getListFeed * add backup nameserver cfg * tidy + pr feedback * tidy * tidy env * bit more * re-add dotenv to root package.json * fix dep * build branch * fix tests * Refactor tests to make better use of dev-env (#1690) * refactor pds tests to use dev env * refactor bsky tests * fix pds test * tidy bsky tests * build pds correctly * fix entry point * default logging to false (for now) * format service entry * Switch takedown ids back to ints on pds distribution (#1694) * switch takedown ids back to ints, consistent with live pds * tidy/fix migration * update migration for sqlite * export moderation action reversal * takedown tests * dont build branch --------- Co-authored-by: Devin Ivy <devinivy@gmail.com>
71 lines
1.8 KiB
TypeScript
71 lines
1.8 KiB
TypeScript
import { AtpAgent } from '@atproto/api'
|
|
import { randomStr } from '@atproto/crypto'
|
|
import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env'
|
|
import userSeed from './seeds/basic'
|
|
|
|
describe('rate limits', () => {
|
|
let network: TestNetworkNoAppView
|
|
let agent: AtpAgent
|
|
let sc: SeedClient
|
|
let alice: string
|
|
let bob: string
|
|
|
|
beforeAll(async () => {
|
|
network = await TestNetworkNoAppView.create({
|
|
dbPostgresSchema: 'rate_limits',
|
|
pds: {
|
|
redisScratchAddress: process.env.REDIS_HOST,
|
|
redisScratchPassword: process.env.REDIS_PASSWORD,
|
|
rateLimitsEnabled: true,
|
|
},
|
|
})
|
|
agent = network.pds.getClient()
|
|
sc = network.getSeedClient()
|
|
await userSeed(sc)
|
|
alice = sc.dids.alice
|
|
bob = sc.dids.bob
|
|
})
|
|
|
|
afterAll(async () => {
|
|
await network.close()
|
|
})
|
|
|
|
it('rate limits by ip', async () => {
|
|
const attempt = () =>
|
|
agent.api.com.atproto.server.resetPassword({
|
|
token: randomStr(4, 'base32'),
|
|
password: 'asdf1234',
|
|
})
|
|
for (let i = 0; i < 50; i++) {
|
|
try {
|
|
await attempt()
|
|
} catch (err) {
|
|
// do nothing
|
|
}
|
|
}
|
|
await expect(attempt).rejects.toThrow('Rate Limit Exceeded')
|
|
})
|
|
|
|
it('rate limits by a custom key', async () => {
|
|
const attempt = () =>
|
|
agent.api.com.atproto.server.createSession({
|
|
identifier: sc.accounts[alice].handle,
|
|
password: 'asdf1234',
|
|
})
|
|
for (let i = 0; i < 30; i++) {
|
|
try {
|
|
await attempt()
|
|
} catch (err) {
|
|
// do nothing
|
|
}
|
|
}
|
|
await expect(attempt).rejects.toThrow('Rate Limit Exceeded')
|
|
|
|
// does not rate limit for another key
|
|
await agent.api.com.atproto.server.createSession({
|
|
identifier: sc.accounts[bob].handle,
|
|
password: sc.accounts[bob].password,
|
|
})
|
|
})
|
|
})
|