Move rateLimiterMiddleware to a separate file

This commit is contained in:
Alex Gleason 2024-06-18 14:28:13 -05:00
parent 72f5391f97
commit 330b38ff68
No known key found for this signature in database
GPG key ID: 7211D1F99744FBB7
2 changed files with 17 additions and 13 deletions

View file

@ -1,10 +1,9 @@
import { Context, Env as HonoEnv, Handler, Hono, Input as HonoInput, MiddlewareHandler } from '@hono/hono';
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 { NostrEvent, NostrSigner, NStore, NUploader } from '@nostrify/nostrify';
import Debug from '@soapbox/stickynotes/debug';
import { rateLimiter } from 'hono-rate-limiter';
import { Conf } from '@/config.ts';
import { cron } from '@/cron.ts';
@ -16,6 +15,7 @@ import {
accountLookupController,
accountSearchController,
accountStatusesController,
blockController,
createAccountController,
familiarFollowersController,
favouritesController,
@ -24,6 +24,7 @@ import {
followingController,
muteController,
relationshipsController,
unblockController,
unfollowController,
unmuteController,
updateCredentialsController,
@ -112,11 +113,10 @@ import { nodeInfoController, nodeInfoSchemaController } from '@/controllers/well
import { nostrController } from '@/controllers/well-known/nostr.ts';
import { auth98Middleware, requireProof, requireRole } from '@/middleware/auth98Middleware.ts';
import { cspMiddleware } from '@/middleware/cspMiddleware.ts';
import { rateLimitMiddleware } from '@/middleware/rateLimitMiddleware.ts';
import { requireSigner } from '@/middleware/requireSigner.ts';
import { signerMiddleware } from '@/middleware/signerMiddleware.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';
interface AppEnv extends HonoEnv {
@ -147,15 +147,7 @@ if (Conf.cronEnabled) {
cron();
}
// @ts-ignore Mismatched Hono versions.
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('*', rateLimitMiddleware(300, Time.minutes(5)));
app.use('/api/*', logger(debug));
app.use('/.well-known/*', logger(debug));

View 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')!,
});
}