Skip to content

Commit 42452fd

Browse files
committed
feat(rateLimiters): add multiple rate limiters for enhanced security
1 parent e4ff9f8 commit 42452fd

2 files changed

Lines changed: 29 additions & 7 deletions

File tree

server/src/index.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,16 @@ import attachmentRoutes from "./routes/attachments";
1212
import templatesRoutes from "./routes/templates";
1313
import aiRoutes from "./routes/ai";
1414
import { requireAuth } from "./middleware/auth";
15-
import { healthCheckLimiter, staticFileLimiter, aiLimiter } from "./middleware/rateLimiters";
15+
import {
16+
healthCheckLimiter,
17+
staticFileLimiter,
18+
aiLimiter,
19+
readLimiter,
20+
fileOperationLimiter,
21+
searchLimiter,
22+
fileTransferLimiter,
23+
authLimiter,
24+
} from "./middleware/rateLimiters";
1625
import { GitService } from "./services/gitService";
1726
import { DATA_DIR as DEFAULT_DATA_DIR, FileSystemService } from "./services/fileSystem";
1827

@@ -252,12 +261,12 @@ app.get("/api", (req: Request, res: Response) => {
252261
});
253262

254263
// Routes
255-
app.use("/api/auth", authRoutes); // Auth routes (public)
256-
app.use("/api/folders", requireAuth, folderRoutes); // Protected
257-
app.use("/api/pages", requireAuth, pageRoutes); // Protected
258-
app.use("/api/templates", requireAuth, templatesRoutes); // Protected
259-
app.use("/api/search", requireAuth, searchRoutes); // Protected
260-
app.use("/api/attachments", requireAuth, attachmentRoutes); // Protected
264+
app.use("/api/auth", authLimiter, authRoutes); // Auth routes (public, rate limited)
265+
app.use("/api/folders", requireAuth, fileOperationLimiter, folderRoutes); // Protected
266+
app.use("/api/pages", requireAuth, fileOperationLimiter, pageRoutes); // Protected
267+
app.use("/api/templates", requireAuth, readLimiter, templatesRoutes); // Protected
268+
app.use("/api/search", requireAuth, searchLimiter, searchRoutes); // Protected
269+
app.use("/api/attachments", requireAuth, fileTransferLimiter, attachmentRoutes); // Protected
261270
app.use("/api/ai", requireAuth, aiLimiter, aiRoutes); // Protected - AI chat
262271

263272
// Health check

server/src/middleware/rateLimiters.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,16 @@ export const aiLimiter = rateLimit({
9090
standardHeaders: true,
9191
legacyHeaders: false,
9292
});
93+
94+
/**
95+
* Rate limiter for authentication operations
96+
* Prevents brute force attacks on login
97+
* Limit: 10 requests per minute per IP
98+
*/
99+
export const authLimiter = rateLimit({
100+
windowMs: 60 * 1000, // 1 minute
101+
max: 10,
102+
message: { error: "Too many login attempts, please try again later" },
103+
standardHeaders: true,
104+
legacyHeaders: false,
105+
});

0 commit comments

Comments
 (0)