Skip to content

Commit f69c049

Browse files
committed
fix: parse number from redis result
1 parent fd73397 commit f69c049

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

src/index.server.ts

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ console.log(process.env.REACT_APP_SSR);
1111
const app = new Koa();
1212
const router = new Router();
1313

14+
app.proxy = true;
15+
1416
app.use(
1517
serve(path.resolve('./build'), {
1618
index: false,

src/server/rateLimitMiddleware.ts

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
import { Middleware } from 'koa';
22
import { redis } from './CacheManager';
33

4+
const parseNumber = (value: string | null) => {
5+
if (value === null) return null;
6+
const parsed = parseInt(value, 10);
7+
if (isNaN(parsed)) return null;
8+
return parsed;
9+
};
10+
411
const rateLimitMiddleware: Middleware = async (ctx, next) => {
512
const ip = ctx.request.ips.slice(-1)[0] || ctx.request.ip;
613

@@ -9,14 +16,16 @@ const rateLimitMiddleware: Middleware = async (ctx, next) => {
916

1017
const blocked = await redis.get(blockedKey);
1118

12-
if (blocked) {
19+
if (parseNumber(blocked) === 1) {
1320
ctx.status = 429;
1421
ctx.body = { msg: 'Too many request' };
1522
return;
1623
}
1724
const exists = await redis.get(key);
25+
const parsed = parseNumber(exists);
1826

19-
if (typeof exists === 'number' && exists > 100) {
27+
if (parsed !== null && parsed >= 100) {
28+
console.log(`Blocking... ${ip} - ${exists}`);
2029
await redis.set(blockedKey, 1);
2130
await redis.expire(blockedKey, 300);
2231
ctx.status = 429;

src/server/ssrMiddleware.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ import { Middleware } from 'koa';
22
import serverRender from './serverRender';
33

44
const ssrMiddleware: Middleware = async (ctx, next) => {
5+
const ip = ctx.request.ips.slice(-1)[0] || ctx.request.ip;
56
// redirect to v3 for user posts tab
67
if (/^\/@([a-z0-9]+)$/.test(ctx.path)) {
78
ctx.redirect(`${ctx.path}/posts`);
89
return;
910
}
1011

11-
console.log('>> ' + ctx.url);
12+
console.log(ip + ' >> ' + ctx.url);
1213

1314
try {
1415
const result = await serverRender({
@@ -26,7 +27,7 @@ const ssrMiddleware: Middleware = async (ctx, next) => {
2627
} catch (e) {
2728
ctx.throw(500, e as any);
2829
}
29-
console.log('<< ' + ctx.url);
30+
console.log(ip + '<< ' + ctx.url);
3031
};
3132

3233
export default ssrMiddleware;

0 commit comments

Comments
 (0)