Use the headers provided by a context to get the IP address

should acknowledge #1975
This commit is contained in:
KingRainbow44
2023-05-31 02:10:25 -04:00
Unverified
parent 6c97da3715
commit ff421c01f9
5 changed files with 59 additions and 31 deletions
+28 -5
View File
@@ -1,17 +1,18 @@
package emu.grasscutter.utils;
import static emu.grasscutter.utils.FileUtils.getResourcePath;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.config.ConfigContainer;
import emu.grasscutter.data.DataLoader;
import emu.grasscutter.game.world.Position;
import io.javalin.http.Context;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList;
import org.slf4j.Logger;
import javax.annotation.Nullable;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
@@ -23,8 +24,9 @@ import java.time.ZonedDateTime;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
import javax.annotation.Nullable;
import org.slf4j.Logger;
import static emu.grasscutter.utils.FileUtils.getResourcePath;
import static emu.grasscutter.utils.lang.Language.translate;
@SuppressWarnings({"UnusedReturnValue", "BooleanMethodIsAlwaysInverted"})
public final class Utils {
@@ -463,4 +465,25 @@ public final class Utils {
if (start < input.length()) output.add(input.substring(start));
return output;
}
/**
* Fetches the IP address of a web request.
*
* @param ctx The context of the request.
* @return The IP address of the request.
*/
public static String address(Context ctx) {
// Check headers.
var address = ctx.header("CF-Connecting-IP");
if (address != null) return address;
address = ctx.header("X-Forwarded-For");
if (address != null) return address;
address = ctx.header("X-Real-IP");
if (address != null) return address;
// Return the request IP.
return ctx.ip();
}
}