dev check violation for lawcase,complaint
Test Workflow / test (push) Has been cancelled

This commit is contained in:
2026-05-19 12:59:17 +07:00
parent 9dd1f8e6c8
commit 82e84514e4
@@ -11,6 +11,7 @@ import org.springframework.stereotype.Service;
import java.io.IOException; import java.io.IOException;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -21,7 +22,6 @@ import java.util.Set;
public class GeoCountryService { public class GeoCountryService {
private final DatabaseReader countryDbReader; private final DatabaseReader countryDbReader;
private final DatabaseReader cityDbReader; private final DatabaseReader cityDbReader;
public GeoCountryService() throws IOException { public GeoCountryService() throws IOException {
@@ -30,18 +30,25 @@ public class GeoCountryService {
Resource cityResource = new ClassPathResource("geo/GeoLite2-City.mmdb"); Resource cityResource = new ClassPathResource("geo/GeoLite2-City.mmdb");
this.cityDbReader = new DatabaseReader.Builder(cityResource.getInputStream()).build(); this.cityDbReader = new DatabaseReader.Builder(cityResource.getInputStream()).build();
} }
public String getCountryName(String input) { public String getCountryName(String input) {
try { try {
CountryResponse response = extractCountry(input); CountryResponse response = extractCountry(input);
return response.getCountry().getName() == null ? "Not defined": if (response == null || response.getCountry() == null) {
response.getCountry().getName(); return "Not defined";
}
String countryName = response.getCountry().getName();
return countryName != null ? countryName : "Not defined";
} catch (UnknownHostException e) {
log.warn("Cannot resolve host for input: {}", input);
return "Not defined";
} catch (Exception e) { } catch (Exception e) {
log.error("Failed for input: {}", input, e); log.error("Failed to get country for input: {}", input, e);
return "unknow"; return "unknown";
} }
} }
@@ -54,17 +61,17 @@ public class GeoCountryService {
for (String ip : ipList) { for (String ip : ipList) {
try { try {
String country = getCountryByIp(ip, locale); String country = getCountryByIp(ip, locale);
if (!"unknow".equals(country)) { if (!"unknown".equals(country) && !"Not defined".equals(country)) {
uniqueCountries.add(country); uniqueCountries.add(country);
} }
String countryCode = getCountryCodeByIp(ip); String countryCode = getCountryCodeByIp(ip);
if (!"unknow".equals(countryCode)) { if (!"unknown".equals(countryCode) && countryCode != null) {
uniqueCountryCodes.add(countryCode); uniqueCountryCodes.add(countryCode);
} }
String city = getCityByIp(ip, locale); String city = getCityByIp(ip, locale);
if (!"unknow".equals(city)) { if (!"unknown".equals(city) && !"Not defined".equals(city)) {
uniqueCities.add(city); uniqueCities.add(city);
} }
} catch (Exception e) { } catch (Exception e) {
@@ -84,11 +91,19 @@ public class GeoCountryService {
try { try {
CountryResponse response = extractCountry(input); CountryResponse response = extractCountry(input);
return response.getCountry().getIsoCode() == null ? "Not defined": if (response == null || response.getCountry() == null) {
response.getCountry().getIsoCode(); return "Not defined";
}
String isoCode = response.getCountry().getIsoCode();
return isoCode != null ? isoCode : "Not defined";
} catch (UnknownHostException e) {
log.warn("Cannot resolve host for input: {}", input);
return "Not defined";
} catch (Exception e) { } catch (Exception e) {
log.error("Failed for input: {}", input, e); log.error("Failed to get country code for input: {}", input, e);
return "unknow"; return "unknown";
} }
} }
@@ -96,13 +111,22 @@ public class GeoCountryService {
try { try {
InetAddress ipAddress = InetAddress.getByName(ip); InetAddress ipAddress = InetAddress.getByName(ip);
CityResponse response = cityDbReader.city(ipAddress); CityResponse response = cityDbReader.city(ipAddress);
if (response.getCity() == null) {
return "Not defined";
}
String cityName = response.getCity().getNames().getOrDefault(locale, String cityName = response.getCity().getNames().getOrDefault(locale,
response.getCity().getName()); response.getCity().getName());
return cityName == null ? "unknow": cityName; return cityName != null ? cityName : "Not defined";
} catch (UnknownHostException e) {
log.warn("Cannot resolve IP: {}", ip);
return "Not defined";
} catch (Exception e) { } catch (Exception e) {
log.error("Failed to get city for IP: {}", ip, e); log.error("Failed to get city for IP: {}", ip, e);
return "unknow"; return "unknown";
} }
} }
@@ -110,13 +134,22 @@ public class GeoCountryService {
try { try {
InetAddress ipAddress = InetAddress.getByName(ip); InetAddress ipAddress = InetAddress.getByName(ip);
CountryResponse response = countryDbReader.country(ipAddress); CountryResponse response = countryDbReader.country(ipAddress);
if (response.getCountry() == null) {
return "Not defined";
}
String countryName = response.getCountry().getNames().getOrDefault(locale, String countryName = response.getCountry().getNames().getOrDefault(locale,
response.getCountry().getName()); response.getCountry().getName());
return countryName == null ? "unknow": countryName; return countryName != null ? countryName : "Not defined";
} catch (UnknownHostException e) {
log.warn("Cannot resolve IP: {}", ip);
return "Not defined";
} catch (Exception e) { } catch (Exception e) {
log.error("Failed to get country for IP: {}", ip, e); log.error("Failed to get country for IP: {}", ip, e);
return "unknow"; return "unknown";
} }
} }
@@ -125,17 +158,34 @@ public class GeoCountryService {
InetAddress ipAddress = InetAddress.getByName(ip); InetAddress ipAddress = InetAddress.getByName(ip);
CountryResponse response = countryDbReader.country(ipAddress); CountryResponse response = countryDbReader.country(ipAddress);
return response.getCountry().getIsoCode(); return response.getCountry() != null ? response.getCountry().getIsoCode() : null;
} catch (UnknownHostException e) {
log.warn("Cannot resolve IP: {}", ip);
return null;
} catch (Exception e) { } catch (Exception e) {
log.error("Failed to get country code for IP: {}", ip, e); log.error("Failed to get country code for IP: {}", ip, e);
return "unknow"; return "unknown";
} }
} }
private CountryResponse extractCountry(String input) throws IOException, GeoIp2Exception { private CountryResponse extractCountry(String input) throws IOException, GeoIp2Exception {
String domain = extractDomain(input); String domain = extractDomain(input);
InetAddress ip = InetAddress.getByName(domain); InetAddress ip;
try {
ip = InetAddress.getByName(domain);
} catch (UnknownHostException e) {
if (!domain.startsWith("www.")) {
try {
ip = InetAddress.getByName("www." + domain);
} catch (UnknownHostException ex) {
throw new UnknownHostException("Cannot resolve domain: " + domain);
}
} else {
throw e;
}
}
return countryDbReader.country(ip); return countryDbReader.country(ip);
} }
@@ -145,10 +195,32 @@ public class GeoCountryService {
throw new IllegalArgumentException("Input is empty"); throw new IllegalArgumentException("Input is empty");
} }
String cleaned = input.replaceAll("^https?://", ""); try {
cleaned = cleaned.split("/")[0]; String cleaned = input.trim().toLowerCase();
cleaned = cleaned.split(":")[0];
return cleaned; cleaned = cleaned.replaceAll("^https?://", "");
cleaned = cleaned.replaceAll("^www\\.", "");
cleaned = cleaned.split("/")[0];
cleaned = cleaned.split(":")[0];
if (cleaned.contains("?")) {
cleaned = cleaned.split("\\?")[0];
}
cleaned = cleaned.trim();
if (!cleaned.contains(".") || cleaned.length() < 4) {
throw new IllegalArgumentException("Invalid domain format: " + cleaned);
}
return cleaned;
} catch (Exception e) {
log.error("Failed to extract domain from: {}", input, e);
throw new IllegalArgumentException("Cannot extract domain from: " + input, e);
}
} }
} }