From 52cdc8204406c2dec8a59ded7959055a6044efde Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Tue, 29 Dec 2020 14:43:26 +0100 Subject: [PATCH] Fix chaturbate follow/unfollow response parsing --- .../sites/chaturbate/ChaturbateModel.java | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/common/src/main/java/ctbrec/sites/chaturbate/ChaturbateModel.java b/common/src/main/java/ctbrec/sites/chaturbate/ChaturbateModel.java index 1d9b42c6..d663ab40 100644 --- a/common/src/main/java/ctbrec/sites/chaturbate/ChaturbateModel.java +++ b/common/src/main/java/ctbrec/sites/chaturbate/ChaturbateModel.java @@ -15,6 +15,7 @@ import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.Semaphore; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -211,11 +212,12 @@ public class ChaturbateModel extends AbstractModel { // NOSONAR .url(getUrl()) .header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent) .build(); - Response resp = site.getHttpClient().execute(req); - resp.close(); + try (Response resp = site.getHttpClient().execute(req)) { + // do an initial request to get cookies + } String url = null; - if(follow) { + if (follow) { url = getSite().getBaseUrl() + "/follow/follow/" + getName() + "/"; } else { url = getSite().getBaseUrl() + "/follow/unfollow/" + getName() + "/"; @@ -232,19 +234,20 @@ public class ChaturbateModel extends AbstractModel { // NOSONAR .header("X-CSRFToken", ((ChaturbateHttpClient)site.getHttpClient()).getToken()) .header(X_REQUESTED_WITH, XML_HTTP_REQUEST) .build(); - resp = site.getHttpClient().execute(req); - if(resp.isSuccessful()) { - String msg = resp.body().string(); - if(!msg.equalsIgnoreCase("ok")) { - LOG.debug(msg); - throw new IOException("Response was " + msg.substring(0, Math.min(msg.length(), 500))); + try (Response resp2 = site.getHttpClient().execute(req)) { + if (resp2.isSuccessful()) { + String responseBody = resp2.body().string(); + JSONObject json = new JSONObject(responseBody); + if (!json.has("following")) { + LOG.debug(responseBody); + throw new IOException("Response was " + responseBody.substring(0, Math.min(responseBody.length(), 500))); + } else { + LOG.debug("Follow/Unfollow -> {}", responseBody); + return json.getBoolean("following") == follow; + } } else { - LOG.debug("Follow/Unfollow -> {}", msg); - return true; + throw new HttpException(resp2.code(), resp2.message()); } - } else { - resp.close(); - throw new IOException("HTTP status " + resp.code() + " " + resp.message()); } }