mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 11:29:46 +00:00
Move rateLimiterMiddleware to a separate file
This commit is contained in:
parent
72f5391f97
commit
330b38ff68
2 changed files with 17 additions and 13 deletions
18
src/app.ts
18
src/app.ts
|
|
@ -1,10 +1,9 @@
|
||||||
import { Context, Env as HonoEnv, Handler, Hono, Input as HonoInput, MiddlewareHandler } from '@hono/hono';
|
import { Context, Env as HonoEnv, Handler, Hono, Input as HonoInput, MiddlewareHandler } from '@hono/hono';
|
||||||
import { cors } from '@hono/hono/cors';
|
import { cors } from '@hono/hono/cors';
|
||||||
import { getConnInfo, serveStatic } from '@hono/hono/deno';
|
import { serveStatic } from '@hono/hono/deno';
|
||||||
import { logger } from '@hono/hono/logger';
|
import { logger } from '@hono/hono/logger';
|
||||||
import { NostrEvent, NostrSigner, NStore, NUploader } from '@nostrify/nostrify';
|
import { NostrEvent, NostrSigner, NStore, NUploader } from '@nostrify/nostrify';
|
||||||
import Debug from '@soapbox/stickynotes/debug';
|
import Debug from '@soapbox/stickynotes/debug';
|
||||||
import { rateLimiter } from 'hono-rate-limiter';
|
|
||||||
|
|
||||||
import { Conf } from '@/config.ts';
|
import { Conf } from '@/config.ts';
|
||||||
import { cron } from '@/cron.ts';
|
import { cron } from '@/cron.ts';
|
||||||
|
|
@ -16,6 +15,7 @@ import {
|
||||||
accountLookupController,
|
accountLookupController,
|
||||||
accountSearchController,
|
accountSearchController,
|
||||||
accountStatusesController,
|
accountStatusesController,
|
||||||
|
blockController,
|
||||||
createAccountController,
|
createAccountController,
|
||||||
familiarFollowersController,
|
familiarFollowersController,
|
||||||
favouritesController,
|
favouritesController,
|
||||||
|
|
@ -24,6 +24,7 @@ import {
|
||||||
followingController,
|
followingController,
|
||||||
muteController,
|
muteController,
|
||||||
relationshipsController,
|
relationshipsController,
|
||||||
|
unblockController,
|
||||||
unfollowController,
|
unfollowController,
|
||||||
unmuteController,
|
unmuteController,
|
||||||
updateCredentialsController,
|
updateCredentialsController,
|
||||||
|
|
@ -112,11 +113,10 @@ import { nodeInfoController, nodeInfoSchemaController } from '@/controllers/well
|
||||||
import { nostrController } from '@/controllers/well-known/nostr.ts';
|
import { nostrController } from '@/controllers/well-known/nostr.ts';
|
||||||
import { auth98Middleware, requireProof, requireRole } from '@/middleware/auth98Middleware.ts';
|
import { auth98Middleware, requireProof, requireRole } from '@/middleware/auth98Middleware.ts';
|
||||||
import { cspMiddleware } from '@/middleware/cspMiddleware.ts';
|
import { cspMiddleware } from '@/middleware/cspMiddleware.ts';
|
||||||
|
import { rateLimitMiddleware } from '@/middleware/rateLimitMiddleware.ts';
|
||||||
import { requireSigner } from '@/middleware/requireSigner.ts';
|
import { requireSigner } from '@/middleware/requireSigner.ts';
|
||||||
import { signerMiddleware } from '@/middleware/signerMiddleware.ts';
|
import { signerMiddleware } from '@/middleware/signerMiddleware.ts';
|
||||||
import { storeMiddleware } from '@/middleware/storeMiddleware.ts';
|
import { storeMiddleware } from '@/middleware/storeMiddleware.ts';
|
||||||
import { blockController } from '@/controllers/api/accounts.ts';
|
|
||||||
import { unblockController } from '@/controllers/api/accounts.ts';
|
|
||||||
import { uploaderMiddleware } from '@/middleware/uploaderMiddleware.ts';
|
import { uploaderMiddleware } from '@/middleware/uploaderMiddleware.ts';
|
||||||
|
|
||||||
interface AppEnv extends HonoEnv {
|
interface AppEnv extends HonoEnv {
|
||||||
|
|
@ -147,15 +147,7 @@ if (Conf.cronEnabled) {
|
||||||
cron();
|
cron();
|
||||||
}
|
}
|
||||||
|
|
||||||
// @ts-ignore Mismatched Hono versions.
|
app.use('*', rateLimitMiddleware(300, Time.minutes(5)));
|
||||||
const limiter: MiddlewareHandler = rateLimiter({
|
|
||||||
limit: 300,
|
|
||||||
windowMs: Time.minutes(5),
|
|
||||||
// @ts-ignore Mismatched Hono versions.
|
|
||||||
keyGenerator: (c) => getConnInfo(c).remote.address!,
|
|
||||||
});
|
|
||||||
|
|
||||||
app.use('*', limiter);
|
|
||||||
|
|
||||||
app.use('/api/*', logger(debug));
|
app.use('/api/*', logger(debug));
|
||||||
app.use('/.well-known/*', logger(debug));
|
app.use('/.well-known/*', logger(debug));
|
||||||
|
|
|
||||||
12
src/middleware/rateLimitMiddleware.ts
Normal file
12
src/middleware/rateLimitMiddleware.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
import { MiddlewareHandler } from '@hono/hono';
|
||||||
|
import { rateLimiter } from 'hono-rate-limiter';
|
||||||
|
|
||||||
|
/** Rate limit middleware for Hono. */
|
||||||
|
export function rateLimitMiddleware(limit: number, windowMs: number): MiddlewareHandler {
|
||||||
|
return rateLimiter({
|
||||||
|
limit,
|
||||||
|
windowMs,
|
||||||
|
skip: (c) => !c.req.header('x-real-ip'),
|
||||||
|
keyGenerator: (c) => c.req.header('x-real-ip')!,
|
||||||
|
});
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue