aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/cowtipper/cowlection/util/ApiUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/cowtipper/cowlection/util/ApiUtils.java')
-rw-r--r--src/main/java/de/cowtipper/cowlection/util/ApiUtils.java63
1 files changed, 30 insertions, 33 deletions
diff --git a/src/main/java/de/cowtipper/cowlection/util/ApiUtils.java b/src/main/java/de/cowtipper/cowlection/util/ApiUtils.java
index d820c83..b8fa4a5 100644
--- a/src/main/java/de/cowtipper/cowlection/util/ApiUtils.java
+++ b/src/main/java/de/cowtipper/cowlection/util/ApiUtils.java
@@ -8,7 +8,10 @@ import de.cowtipper.cowlection.chesttracker.data.HyItemsData;
import de.cowtipper.cowlection.chesttracker.data.LowestBinsCache;
import de.cowtipper.cowlection.command.exception.ThrowingConsumer;
import de.cowtipper.cowlection.config.CredentialStorage;
-import de.cowtipper.cowlection.data.*;
+import de.cowtipper.cowlection.data.Friend;
+import de.cowtipper.cowlection.data.HyPlayerData;
+import de.cowtipper.cowlection.data.HySkyBlockStats;
+import de.cowtipper.cowlection.data.HyStalkingData;
import de.cowtipper.cowlection.error.ApiHttpErrorEvent;
import de.cowtipper.cowlection.error.ApiHttpErrorException;
import net.minecraft.util.EnumChatFormatting;
@@ -30,13 +33,12 @@ import java.util.concurrent.Executors;
public class ApiUtils {
private static final String NAME_TO_UUID_URL = "https://api.mojang.com/users/profiles/minecraft/";
- private static final String ONLINE_STATUS_URL = "https://api.hypixel.net/status?key=%s&uuid=%s";
- private static final String SKYBLOCK_STATS_URL = "https://api.hypixel.net/skyblock/profiles?key=%s&uuid=%s";
+ private static final String ONLINE_STATUS_URL = "https://api.hypixel.net/status?uuid=%s";
+ private static final String SKYBLOCK_STATS_URL = "https://api.hypixel.net/skyblock/profiles?uuid=%s";
private static final String BAZAAR_URL = "https://api.hypixel.net/skyblock/bazaar";
public static final String LOWEST_BINS = "https://moulberry.codes/lowestbin.json";
private static final String ITEMS_URL = "https://api.hypixel.net/resources/skyblock/items";
- private static final String PLAYER_URL = "https://api.hypixel.net/player?key=%s&uuid=%s";
- private static final String API_KEY_URL = "https://api.hypixel.net/key?key=%s";
+ private static final String PLAYER_URL = "https://api.hypixel.net/player?uuid=%s";
private static final ExecutorService pool = Executors.newCachedThreadPool();
private ApiUtils() {
@@ -47,7 +49,7 @@ public class ApiUtils {
}
private static Friend getFriend(String name) {
- try (BufferedReader reader = makeApiCall(NAME_TO_UUID_URL + name)) {
+ try (BufferedReader reader = makeApiCall(NAME_TO_UUID_URL + name, false)) {
if (reader == null) {
return Friend.FRIEND_NOT_FOUND;
} else {
@@ -64,7 +66,7 @@ public class ApiUtils {
}
private static HyStalkingData stalkPlayer(Friend friend) {
- try (BufferedReader reader = makeApiCall(String.format(ONLINE_STATUS_URL, CredentialStorage.moo, UUIDTypeAdapter.fromUUID(friend.getUuid())))) {
+ try (BufferedReader reader = makeApiCall(String.format(ONLINE_STATUS_URL, UUIDTypeAdapter.fromUUID(friend.getUuid())), true)) {
if (reader != null) {
return GsonUtils.fromJson(reader, HyStalkingData.class);
}
@@ -79,7 +81,7 @@ public class ApiUtils {
}
private static HySkyBlockStats stalkSkyBlockStats(Friend friend) {
- try (BufferedReader reader = makeApiCall(String.format(SKYBLOCK_STATS_URL, CredentialStorage.moo, UUIDTypeAdapter.fromUUID(friend.getUuid())))) {
+ try (BufferedReader reader = makeApiCall(String.format(SKYBLOCK_STATS_URL, UUIDTypeAdapter.fromUUID(friend.getUuid())), true)) {
if (reader != null) {
return GsonUtils.fromJson(reader, HySkyBlockStats.class);
}
@@ -94,7 +96,7 @@ public class ApiUtils {
}
private static HyBazaarData getBazaarData() {
- try (BufferedReader reader = makeApiCall(BAZAAR_URL)) {
+ try (BufferedReader reader = makeApiCall(BAZAAR_URL, false)) {
if (reader != null) {
return GsonUtils.fromJson(reader, HyBazaarData.class);
}
@@ -109,7 +111,7 @@ public class ApiUtils {
}
private static LowestBinsCache getLowestBins() {
- try (BufferedReader reader = makeApiCall(LOWEST_BINS)) {
+ try (BufferedReader reader = makeApiCall(LOWEST_BINS, false)) {
if (reader != null) {
return GsonUtils.fromJson(reader, LowestBinsCache.class);
}
@@ -124,7 +126,7 @@ public class ApiUtils {
}
private static HyItemsData getItemsData() {
- try (BufferedReader reader = makeApiCall(ITEMS_URL)) {
+ try (BufferedReader reader = makeApiCall(ITEMS_URL, false)) {
if (reader != null) {
return GsonUtils.fromJson(reader, HyItemsData.class);
}
@@ -139,7 +141,7 @@ public class ApiUtils {
}
private static HyPlayerData stalkHyPlayer(Friend stalkedPlayer) {
- try (BufferedReader reader = makeApiCall(String.format(PLAYER_URL, CredentialStorage.moo, UUIDTypeAdapter.fromUUID(stalkedPlayer.getUuid())))) {
+ try (BufferedReader reader = makeApiCall(String.format(PLAYER_URL, UUIDTypeAdapter.fromUUID(stalkedPlayer.getUuid())), true)) {
if (reader != null) {
return GsonUtils.fromJson(reader, HyPlayerData.class);
}
@@ -149,34 +151,29 @@ public class ApiUtils {
return null;
}
- public static void fetchApiKeyInfo(String moo, ThrowingConsumer<HyApiKey> action) {
- pool.execute(() -> action.accept(getApiKeyInfo(moo)));
- }
-
- private static HyApiKey getApiKeyInfo(String moo) {
- try (BufferedReader reader = makeApiCall(String.format(API_KEY_URL, moo))) {
- if (reader != null) {
- return GsonUtils.fromJson(reader, HyApiKey.class);
- }
- } catch (IOException | JsonSyntaxException e) {
- handleApiException(e);
- }
- return null;
- }
-
private static void handleApiException(Exception e) {
e.printStackTrace();
if (e instanceof ApiHttpErrorException) {
- MinecraftForge.EVENT_BUS.post(new ApiHttpErrorEvent(e.getMessage(), ((ApiHttpErrorException) e).getUrl()));
+ MinecraftForge.EVENT_BUS.post(new ApiHttpErrorEvent(e.getMessage(), ((ApiHttpErrorException) e).getUrl(), ((ApiHttpErrorException) e).wasUsingApiKey()));
}
}
- private static BufferedReader makeApiCall(String url) throws IOException {
+ private static BufferedReader makeApiCall(String url, boolean sendApiKey) throws IOException {
+ return makeApiCall(url, sendApiKey, CredentialStorage.moo);
+ }
+
+ private static BufferedReader makeApiCall(String url, boolean sendApiKey, String key) throws IOException {
+ if (sendApiKey && !CredentialStorage.isMooValid) {
+ throw new ApiHttpErrorException("Your current Hypixel API key is invalid. Use /moo apikey to manually set your existing API key.", url);
+ }
try {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
if (CredentialStorage.sslContext != null && connection instanceof HttpsURLConnection) {
((HttpsURLConnection) connection).setSSLSocketFactory(CredentialStorage.sslContext.getSocketFactory());
}
+ if (sendApiKey) {
+ connection.addRequestProperty("API-Key", key);
+ }
connection.setConnectTimeout(5000);
connection.setReadTimeout(8000);
connection.addRequestProperty("User-Agent", "Forge Mod " + Cowlection.MODNAME + "/" + Cowlection.VERSION + " (" + Cowlection.GITURL + ")");
@@ -186,10 +183,11 @@ public class ApiUtils {
return null;
} else if (connection.getResponseCode() == HttpStatus.SC_BAD_GATEWAY && url.startsWith("https://api.hypixel.net/")) { // http status 502 (cloudflare)
throw new ApiHttpErrorException("Couldn't contact Hypixel API (502 Bad Gateway). API might be down, check https://status.hypixel.net for info.", "https://status.hypixel.net");
+ } else if (connection.getResponseCode() == HttpStatus.SC_FORBIDDEN && sendApiKey && url.startsWith("https://api.hypixel.net/")) { // http status 403 Forbidden
+ Cowlection.getInstance().getMoo().setMooValidity(false);
+ throw new ApiHttpErrorException("Your current Hypixel API key seems to be invalid. Use /moo apikey to manually set your existing API key.", url);
} else if (connection.getResponseCode() == HttpStatus.SC_SERVICE_UNAVAILABLE) { // http status 503 Service Unavailable
- int queryParamStart = url.indexOf('?', 10);
- String baseUrl = queryParamStart > 0 ? url.substring(0, queryParamStart) : url;
- throw new ApiHttpErrorException("Couldn't contact the API (503 Service unavailable). API might be down, or you might be blocked by Cloudflare, check if you can reach: " + baseUrl, url);
+ throw new ApiHttpErrorException("Couldn't contact the API (503 Service unavailable). API might be down, or you might be blocked by Cloudflare, check if you can reach: " + url, url, sendApiKey);
} else if (connection.getResponseCode() == HttpStatus.SC_BAD_GATEWAY && url.startsWith("https://moulberry.codes/")) { // http status 502 (cloudflare)
throw new ApiHttpErrorException("Couldn't contact Moulberry's API (502 Bad Gateway). API might be down, check if " + LOWEST_BINS + " is reachable.", LOWEST_BINS);
} else {
@@ -213,5 +211,4 @@ public class ApiUtils {
}
}
}
-
}