From ea8d63a24c8a7a9f513d4f39cd634be60700f7be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Spie=C3=9F?= Date: Sat, 18 Nov 2023 13:28:40 +0100 Subject: [PATCH 1/2] Add x-super-properties header --- .../dv8tion/jda/api/requests/RestConfig.java | 2 +- .../jda/internal/requests/Requester.java | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/dv8tion/jda/api/requests/RestConfig.java b/src/main/java/net/dv8tion/jda/api/requests/RestConfig.java index 0545798a1e..a0b51c6010 100644 --- a/src/main/java/net/dv8tion/jda/api/requests/RestConfig.java +++ b/src/main/java/net/dv8tion/jda/api/requests/RestConfig.java @@ -42,7 +42,7 @@ public class RestConfig * The default base url used by JDA for all REST-api requests. * This URL uses the API version defined by {@link JDAInfo#DISCORD_REST_VERSION} (v{@value JDAInfo#DISCORD_REST_VERSION}). */ - public static final String DEFAULT_BASE_URL = "https://discord.com/api/v" + JDAInfo.DISCORD_REST_VERSION + "/"; + public static final String DEFAULT_BASE_URL = "https://canary.discord.com/api/v" + JDAInfo.DISCORD_REST_VERSION + "/"; private String userAgent = USER_AGENT; private String baseUrl = DEFAULT_BASE_URL; diff --git a/src/main/java/net/dv8tion/jda/internal/requests/Requester.java b/src/main/java/net/dv8tion/jda/internal/requests/Requester.java index 4e687283b4..107aec13a4 100644 --- a/src/main/java/net/dv8tion/jda/internal/requests/Requester.java +++ b/src/main/java/net/dv8tion/jda/internal/requests/Requester.java @@ -39,6 +39,8 @@ import java.net.SocketException; import java.net.SocketTimeoutException; import java.net.UnknownHostException; +import java.nio.charset.StandardCharsets; +import java.util.Base64; import java.util.LinkedHashSet; import java.util.Locale; import java.util.Map.Entry; @@ -65,6 +67,7 @@ public class Requester private final Consumer customBuilder; private final OkHttpClient httpClient; + private volatile String superProperties; //when we actually set the shard info we can also set the mdc context map, before it makes no sense private boolean isContextReady = false; @@ -299,6 +302,7 @@ private void applyHeaders(Request apiRequest, okhttp3.Request.Builder builder builder.header("user-agent", userAgent) .header("accept-encoding", "gzip") .header("authorization", authConfig.getToken()) + .header("x-super-properties", getSuperProperties()) .header("x-ratelimit-precision", "millisecond"); // still sending this in case of regressions // Apply custom headers like X-Audit-Log-Reason @@ -310,6 +314,38 @@ private void applyHeaders(Request apiRequest, okhttp3.Request.Builder builder } } + private String getSuperProperties() + { + if (superProperties != null) + return superProperties; + + synchronized (this) + { + if (superProperties != null) + return superProperties; + + superProperties = new String(Base64.getEncoder().encode(DataObject.empty() + .put("os", "Windows") + .put("browser", "Discord Client") + .put("release_channel", "stable") + .put("client_version", "1.0.9024") + .put("os_version", "10.0.22621") + .put("os_arch", "x64") + .put("app_arch", "ia32") + .put("system_locale", "en-US") + .put("browser_user_agent", userAgent) + .put("browser_version", "22.3.26") + .put("client_build_number", 247232) + .put("native_build_number", 39566) + .put("client_event_source", null) + .put("design_id", 0) + .toJson() + ), StandardCharsets.UTF_8); + } + + return superProperties; + } + public OkHttpClient getHttpClient() { return this.httpClient; From 0f57f8a3962127885a5cf44be18b11005c72d3c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Spie=C3=9F?= Date: Sat, 18 Nov 2023 13:48:14 +0100 Subject: [PATCH 2/2] Make x-super-properties optional --- src/main/java/net/dv8tion/jda/api/requests/RestConfig.java | 2 +- src/main/java/net/dv8tion/jda/internal/requests/Requester.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/dv8tion/jda/api/requests/RestConfig.java b/src/main/java/net/dv8tion/jda/api/requests/RestConfig.java index a0b51c6010..0545798a1e 100644 --- a/src/main/java/net/dv8tion/jda/api/requests/RestConfig.java +++ b/src/main/java/net/dv8tion/jda/api/requests/RestConfig.java @@ -42,7 +42,7 @@ public class RestConfig * The default base url used by JDA for all REST-api requests. * This URL uses the API version defined by {@link JDAInfo#DISCORD_REST_VERSION} (v{@value JDAInfo#DISCORD_REST_VERSION}). */ - public static final String DEFAULT_BASE_URL = "https://canary.discord.com/api/v" + JDAInfo.DISCORD_REST_VERSION + "/"; + public static final String DEFAULT_BASE_URL = "https://discord.com/api/v" + JDAInfo.DISCORD_REST_VERSION + "/"; private String userAgent = USER_AGENT; private String baseUrl = DEFAULT_BASE_URL; diff --git a/src/main/java/net/dv8tion/jda/internal/requests/Requester.java b/src/main/java/net/dv8tion/jda/internal/requests/Requester.java index 107aec13a4..a21ad6b591 100644 --- a/src/main/java/net/dv8tion/jda/internal/requests/Requester.java +++ b/src/main/java/net/dv8tion/jda/internal/requests/Requester.java @@ -302,7 +302,6 @@ private void applyHeaders(Request apiRequest, okhttp3.Request.Builder builder builder.header("user-agent", userAgent) .header("accept-encoding", "gzip") .header("authorization", authConfig.getToken()) - .header("x-super-properties", getSuperProperties()) .header("x-ratelimit-precision", "millisecond"); // still sending this in case of regressions // Apply custom headers like X-Audit-Log-Reason @@ -314,7 +313,7 @@ private void applyHeaders(Request apiRequest, okhttp3.Request.Builder builder } } - private String getSuperProperties() + public String getSuperProperties() { if (superProperties != null) return superProperties;