diff --git a/lib/middleware/access-control.test.ts b/lib/middleware/access-control.test.ts index 9ba156ce73..d5bfc476e5 100644 --- a/lib/middleware/access-control.test.ts +++ b/lib/middleware/access-control.test.ts @@ -5,6 +5,8 @@ import type { serve } from '@hono/node-server'; let server: ReturnType; +process.env.NODE_NAME = 'mock'; + function checkBlock(response) { expect(response.status).toBe(403); expect(response.text).toMatch(/Access denied\./); @@ -30,7 +32,7 @@ describe('access-control', () => { const response11 = await request.get('/test/1'); checkBlock(response11); - const response12 = await request.get('/test/1').set('X-Forwarded-For', '233.233.233.233'); + const response12 = await request.get('/test/1').set('X-Mock-IP', '233.233.233.233'); checkBlock(response12); const response13 = await request.get('/test/1').set('user-agent', 'blackua'); @@ -39,7 +41,7 @@ describe('access-control', () => { const response21 = await request.get('/test/2'); expect(response21.status).toBe(200); - const response22 = await request.get('/test/2').set('X-Forwarded-For', '233.233.233.233'); + const response22 = await request.get('/test/2').set('X-Mock-IP', '233.233.233.233'); checkBlock(response22); const response23 = await request.get('/test/2').set('user-agent', 'blackua'); @@ -53,17 +55,17 @@ describe('access-control', () => { expect(response312.status).toBe(200); // wrong key/code, on denylist - const response321 = await request.get(`/test/2?key=wrong+${key}`).set('X-Forwarded-For', '233.233.233.233'); + const response321 = await request.get(`/test/2?key=wrong+${key}`).set('X-Mock-IP', '233.233.233.233'); checkBlock(response321); - const response322 = await request.get(`/test/2?code=wrong+${code}`).set('X-Forwarded-For', '233.233.233.233'); + const response322 = await request.get(`/test/2?code=wrong+${code}`).set('X-Mock-IP', '233.233.233.233'); checkBlock(response322); // right key/code, on denylist - const response331 = await request.get(`/test/2?key=${key}`).set('X-Forwarded-For', '233.233.233.233'); + const response331 = await request.get(`/test/2?key=${key}`).set('X-Mock-IP', '233.233.233.233'); expect(response331.status).toBe(200); - const response332 = await request.get(`/test/2?code=${code}`).set('X-Forwarded-For', '233.233.233.233'); + const response332 = await request.get(`/test/2?code=${code}`).set('X-Mock-IP', '233.233.233.233'); expect(response332.status).toBe(200); }); @@ -84,7 +86,7 @@ describe('access-control', () => { const response11 = await request.get('/test/1'); expect(response11.status).toBe(200); - const response12 = await request.get('/test/1').set('X-Forwarded-For', '233.233.233.233'); + const response12 = await request.get('/test/1').set('X-Mock-IP', '233.233.233.233'); expect(response12.status).toBe(200); const response13 = await request.get('/test/1').set('user-agent', 'whiteua'); @@ -93,16 +95,16 @@ describe('access-control', () => { const response21 = await request.get('/test/2'); checkBlock(response21); - const response22 = await request.get('/test/2').set('X-Forwarded-For', '233.233.233.233'); + const response22 = await request.get('/test/2').set('X-Mock-IP', '233.233.233.233'); expect(response22.status).toBe(200); - const response221 = await request.get('/test/2').set('X-Forwarded-For', '103.31.4.0'); + const response221 = await request.get('/test/2').set('X-Mock-IP', '103.31.4.0'); expect(response221.status).toBe(200); - const response222 = await request.get('/test/2').set('X-Forwarded-For', '103.31.7.255'); + const response222 = await request.get('/test/2').set('X-Mock-IP', '103.31.7.255'); expect(response222.status).toBe(200); - const response223 = await request.get('/test/2').set('X-Forwarded-For', '103.31.8.0'); + const response223 = await request.get('/test/2').set('X-Mock-IP', '103.31.8.0'); checkBlock(response223); const response23 = await request.get('/test/2').set('user-agent', 'whiteua'); @@ -116,10 +118,10 @@ describe('access-control', () => { checkBlock(response312); // wrong key/code, on allowlist - const response321 = await request.get(`/test/2?code=wrong+${code}`).set('X-Forwarded-For', '233.233.233.233'); + const response321 = await request.get(`/test/2?code=wrong+${code}`).set('X-Mock-IP', '233.233.233.233'); expect(response321.status).toBe(200); - const response322 = await request.get(`/test/2?key=wrong+${key}`).set('X-Forwarded-For', '233.233.233.233'); + const response322 = await request.get(`/test/2?key=wrong+${key}`).set('X-Mock-IP', '233.233.233.233'); expect(response322.status).toBe(200); // right key/code diff --git a/lib/utils/helpers.ts b/lib/utils/helpers.ts index 32cff45b11..aeed986fa1 100644 --- a/lib/utils/helpers.ts +++ b/lib/utils/helpers.ts @@ -1,5 +1,6 @@ import { Context } from 'hono'; import { Ipware } from '@fullerstack/nax-ipware'; +import { config } from '@/config'; const ipware = new Ipware(); @@ -11,4 +12,4 @@ export const getRouteNameFromPath = (path: string) => { return null; }; -export const getIp = (ctx: Context) => ipware.getClientIP(ctx.req.raw)?.ip; +export const getIp = (ctx: Context) => (config.nodeName === 'mock' && ctx.req.header('X-Mock-IP') ? ctx.req.header('X-Mock-IP') : ipware.getClientIP(ctx.req.raw)?.ip);