/* * IpMe - A self-hosted API for obtaining your public IP address. * Copyright (C) 2023 Foster Hangdaan * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ import { getVersion } from "./utils/app.ts"; const port = Number(Deno.env.get("PORT")) || 8000; const ROOT_PATTERN = new URLPattern({ pathname: "/" }); const handler = (req: Request): Response => { const rootMatch = ROOT_PATTERN.exec(req.url); if (rootMatch && req.method === "GET") { const clientIpAddress = req.headers.get("x-forwarded-for")?.split(",").shift() || req.headers.get("host"); const url = new URL(req.url); const format = url.searchParams.get("format"); if (format === "json") { return new Response(JSON.stringify({ ip: clientIpAddress }), { headers: { "content-type": "application/json", }, }); } else { return new Response(clientIpAddress); } } else { return new Response("Not found", { status: 404 }); } }; console.log("IpMe - A self-hosted API for obtaining your public IP address.") console.log(`Version: ${getVersion()}`); console.log("Source Code: https://code.fosterhangdaan.com/foster/ipme") console.log("License: GNU AGPL (version 3 or later)") Deno.serve({ port }, handler);