test: mock client ip

This commit is contained in:
DIYgod
2024-02-26 22:38:18 +08:00
parent 373b188e0c
commit 5645b8466a
2 changed files with 17 additions and 14 deletions
+15 -13
View File
@@ -5,6 +5,8 @@ import type { serve } from '@hono/node-server';
let server: ReturnType<typeof serve>;
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
+2 -1
View File
@@ -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);