import { logger } from "@/loggers"; import { errorResponse } from "@/response"; import type { SocketAddress } from "bun"; import { createMiddleware } from "hono/factory"; import { matches } from "ip-matching"; import { config } from "~/packages/config-manager"; import { LogLevel } from "~/packages/log-manager"; export const ipBans = createMiddleware(async (context, next) => { // Check for banned IPs const request_ip = context.env?.ip as SocketAddress | undefined | null; if (!request_ip?.address) { await next(); return; } for (const ip of config.http.banned_ips) { try { if (matches(ip, request_ip?.address)) { return errorResponse("Forbidden", 403); } } catch (e) { logger.log( LogLevel.ERROR, "Server.IPCheck", `Error while parsing banned IP "${ip}" `, ); logger.logError(LogLevel.ERROR, "Server.IPCheck", e as Error); return errorResponse( `A server error occured: ${(e as Error).message}`, 500, ); } } await next(); });