feat: Add check for real ip

This commit is contained in:
Myzel394 2024-11-09 21:09:50 +01:00
parent dc31bf880c
commit 346b14bd53
No known key found for this signature in database
GPG Key ID: ED20A1D1D423AF3F
3 changed files with 29 additions and 8 deletions

View File

@ -1,5 +1,6 @@
import { Hono } from "hono"; import { Hono } from "hono";
import { portRoute } from "./routes/port"; import { portRoute } from "./routes/port";
import realIP from "./middlewares/real-ip";
const app = new Hono(); const app = new Hono();
@ -8,4 +9,4 @@ app.route("/", portRoute);
Bun.serve({ Bun.serve({
...app, ...app,
idleTimeout: 90, idleTimeout: 90,
}) });

View File

@ -0,0 +1,22 @@
import { getConnInfo } from "hono/bun";
import { createMiddleware } from "hono/factory";
const realIP = createMiddleware<{
Variables: {
ip: string;
};
}>(async (context, next) => {
const ip =
context.req.header("x-forwarded-for") ||
getConnInfo(context).remote.address;
if (!ip) {
return context.json({ error: "Your IP could not be found" }, 401);
}
context.set("ip", ip);
await next();
});
export default realIP;

View File

@ -3,6 +3,7 @@ import { getConnInfo } from "hono/bun";
import connectToAddress from "../utils/connect-to-address"; import connectToAddress from "../utils/connect-to-address";
import { z } from "zod"; import { z } from "zod";
import * as IP from "ip"; import * as IP from "ip";
import realIP from "../middlewares/real-ip";
export const portRoute = new Hono(); export const portRoute = new Hono();
@ -33,15 +34,12 @@ const schema = z.object({
.pipe(z.number().min(100).max(60_000)), .pipe(z.number().min(100).max(60_000)),
}); });
portRoute.get("/:port", async context => { portRoute.get("/:port", realIP, async context => {
const info = getConnInfo(context);
const rawData = { const rawData = {
ip: info.remote.address || "", ip: context.get("ip"),
port: context.req.param("port"), port: context.req.param("port"),
timeout: context.req.query("timeout") || context.req.query("t") || "", timeout: context.req.query("timeout") || context.req.query("t") || "",
}; };
console.log(info.remote.address);
console.log(context.req.header());
const parsedData = schema.safeParse(rawData); const parsedData = schema.safeParse(rawData);
if (!parsedData.success) { if (!parsedData.success) {