diff --git a/LaunchServer/resources/launchserver/defaults/config.cfg b/LaunchServer/resources/launchserver/defaults/config.cfg index 5a3defe..779d521 100644 --- a/LaunchServer/resources/launchserver/defaults/config.cfg +++ b/LaunchServer/resources/launchserver/defaults/config.cfg @@ -22,10 +22,12 @@ # Сообщения клиентам authRejectString: "Превышен лимит авторизаций, подождите некоторое время!"; + authNotWhitelistString: "Вашего IP нет в белом списке!"; authBannedString: "Ваш IP заблокирован!"; # Дополнительные настройки blockOnConnect: false; + onlyAllowIp: false; }; # Управление системой хранения и обработки UUID пользователей diff --git a/LaunchServer/source/auth/limiter/AuthLimiterConfig.java b/LaunchServer/source/auth/limiter/AuthLimiterConfig.java index b9b9af4..749f3c6 100644 --- a/LaunchServer/source/auth/limiter/AuthLimiterConfig.java +++ b/LaunchServer/source/auth/limiter/AuthLimiterConfig.java @@ -19,11 +19,15 @@ @LauncherAPI public String authBannedString; @LauncherAPI + public String authNotWhitelistString; + @LauncherAPI public boolean blockOnConnect; @LauncherAPI public boolean useAllowIp; @LauncherAPI public boolean useBlockIp; + @LauncherAPI + public boolean onlyAllowIp; @LauncherAPI public AuthLimiterConfig(BlockConfigEntry block) @@ -35,9 +39,12 @@ VerifyHelper.range(10, 10000000), "Illegal authRateLimitMillis"); authRejectString = block.hasEntry("authRejectString") ? block.getEntryValue("authRejectString", StringConfigEntry.class) : "Превышен лимит авторизаций. Подождите некоторое время перед повторной попыткой"; + authNotWhitelistString = block.hasEntry("authNotWhitelistString") ? + block.getEntryValue("authNotWhitelistString", StringConfigEntry.class) : "Вашего IP нет в белом списке!"; authBannedString = block.hasEntry("authBannedString") ? block.getEntryValue("authBannedString", StringConfigEntry.class) : "Ваш IP заблокирован!"; blockOnConnect = block.getEntryValue("blockOnConnect", BooleanConfigEntry.class); + onlyAllowIp = block.getEntryValue("onlyAllowIp", BooleanConfigEntry.class); useAllowIp = block.getEntryValue("useAllowIp", BooleanConfigEntry.class); useBlockIp = block.getEntryValue("useBlockIp", BooleanConfigEntry.class); } diff --git a/LaunchServer/source/response/ResponseThread.java b/LaunchServer/source/response/ResponseThread.java index a728994..7983525 100644 --- a/LaunchServer/source/response/ResponseThread.java +++ b/LaunchServer/source/response/ResponseThread.java @@ -46,7 +46,12 @@ @Override public void run() { - if (AuthLimiterIPConfig.Instance.getBlockIp().stream().anyMatch(s -> s.equals(ip)) && !server.config.authLimitConfig.blockOnConnect && server.config.authLimit && server.config.authLimitConfig.useBlockIp) + if (AuthLimiterIPConfig.Instance.getAllowIp().stream().noneMatch(s -> s.equals(ip)) && !server.config.authLimitConfig.blockOnConnect && server.config.authLimit && server.config.authLimitConfig.onlyAllowIp) + { + if (!server.serverSocketHandler.logConnections) LogHelper.debug("Blocked connection from %s [Not found in Allow List]", ip); + return; + } + else if (AuthLimiterIPConfig.Instance.getBlockIp().stream().anyMatch(s -> s.equals(ip)) && !server.config.authLimitConfig.blockOnConnect && server.config.authLimit && server.config.authLimitConfig.useBlockIp) { if (!server.serverSocketHandler.logConnections) LogHelper.debug("Blocked connection from %s [Found in Block List]", ip); return; diff --git a/LaunchServer/source/response/auth/AuthResponse.java b/LaunchServer/source/response/auth/AuthResponse.java index a453e8f..5953020 100644 --- a/LaunchServer/source/response/auth/AuthResponse.java +++ b/LaunchServer/source/response/auth/AuthResponse.java @@ -67,6 +67,12 @@ return; } + if (AuthLimiterIPConfig.Instance.getAllowIp().stream().noneMatch(s -> s.equals(ip)) && !server.config.authLimitConfig.blockOnConnect && server.config.authLimit && server.config.authLimitConfig.onlyAllowIp) + { + AuthProvider.authError(server.config.authLimitConfig.authNotWhitelistString); + return; + } + if (AuthLimiterIPConfig.Instance.getAllowIp().stream().noneMatch(s -> s.equals(ip)) && server.config.authLimit && server.config.authLimitConfig.useAllowIp) { if (server.limiter.isLimit(ip))