diff --git a/src/middleware/userCounter.ts b/src/middleware/userCounter.ts index eda60a3..5575fd9 100644 --- a/src/middleware/userCounter.ts +++ b/src/middleware/userCounter.ts @@ -12,7 +12,7 @@ export function userCounter(req: Request, res: Response, next: NextFunction): vo if (Math.random() < 1 / config.userCounterRatio) { axios({ method: "post", - url: `${config.userCounterURL}/api/v1/addIP?hashedIP=${getIP(req)}`, + url: `${config.userCounterURL}/api/v1/addIP?hashedIP=${getIP(req, true)}`, httpAgent }).catch(() => /* instanbul skip next */ Logger.debug(`Failing to connect to user counter at: ${config.userCounterURL}`)); } diff --git a/src/utils/getIP.ts b/src/utils/getIP.ts index 85a7192..eebf586 100644 --- a/src/utils/getIP.ts +++ b/src/utils/getIP.ts @@ -2,7 +2,7 @@ import { config } from "../config"; import { Request } from "express"; import { IPAddress } from "../types/segments.model"; -export function getIP(req: Request): IPAddress { +export function getIP(req: Request, checkCloudflare = false): IPAddress { // if in testing mode, return immediately if (config.mode === "test") return "127.0.0.1" as IPAddress; @@ -10,11 +10,14 @@ export function getIP(req: Request): IPAddress { config.behindProxy = "X-Forwarded-For"; } + const cloudflareIP = req.headers["cf-connecting-ip"] as IPAddress; + if (checkCloudflare && cloudflareIP) return cloudflareIP; + switch (config.behindProxy as string) { case "X-Forwarded-For": return req.headers["x-forwarded-for"] as IPAddress; case "Cloudflare": - return req.headers["cf-connecting-ip"] as IPAddress; + return cloudflareIP; case "X-Real-IP": return req.headers["x-real-ip"] as IPAddress; default: