From 1b11af8872fbd6d0c27f0a3a09e000f9490118ee Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Tue, 6 Nov 2018 22:17:30 +0100 Subject: [PATCH] Try to restore HTTP session with cookies before login in All the HTTP clients now check, if loading the cookies was sufficient to restore the HTTP session. If yes, we assume that we are logged in. If not, the normal login procedure is done. --- .../sites/bonga/BongaCamsHttpClient.java | 7 +++++ .../ctbrec/sites/cam4/Cam4HttpClient.java | 7 +++++ .../sites/camsoda/CamsodaHttpClient.java | 7 +++++ .../chaturbate/ChaturbateHttpClient.java | 28 +++++++++++++++++++ .../sites/mfc/MyFreeCamsHttpClient.java | 27 ++++++++++++++++++ 5 files changed, 76 insertions(+) diff --git a/src/main/java/ctbrec/sites/bonga/BongaCamsHttpClient.java b/src/main/java/ctbrec/sites/bonga/BongaCamsHttpClient.java index 26e08381..80f4c303 100644 --- a/src/main/java/ctbrec/sites/bonga/BongaCamsHttpClient.java +++ b/src/main/java/ctbrec/sites/bonga/BongaCamsHttpClient.java @@ -36,6 +36,13 @@ public class BongaCamsHttpClient extends HttpClient { return true; } + boolean cookiesWorked = checkLoginSuccess(); + if(cookiesWorked) { + loggedIn = true; + LOG.debug("Logged in with cookies"); + return true; + } + BlockingQueue queue = new LinkedBlockingQueue<>(); Runnable showDialog = () -> { diff --git a/src/main/java/ctbrec/sites/cam4/Cam4HttpClient.java b/src/main/java/ctbrec/sites/cam4/Cam4HttpClient.java index f6434401..968d1de4 100644 --- a/src/main/java/ctbrec/sites/cam4/Cam4HttpClient.java +++ b/src/main/java/ctbrec/sites/cam4/Cam4HttpClient.java @@ -33,6 +33,13 @@ public class Cam4HttpClient extends HttpClient { return true; } + boolean cookiesWorked = checkLoginSuccess(); + if(cookiesWorked) { + loggedIn = true; + LOG.debug("Logged in with cookies"); + return true; + } + BlockingQueue queue = new LinkedBlockingQueue<>(); Runnable showDialog = () -> { diff --git a/src/main/java/ctbrec/sites/camsoda/CamsodaHttpClient.java b/src/main/java/ctbrec/sites/camsoda/CamsodaHttpClient.java index b6148863..fbb90d6c 100644 --- a/src/main/java/ctbrec/sites/camsoda/CamsodaHttpClient.java +++ b/src/main/java/ctbrec/sites/camsoda/CamsodaHttpClient.java @@ -39,6 +39,13 @@ public class CamsodaHttpClient extends HttpClient { return true; } + // persisted cookies might let us log in + if(checkLoginSuccess()) { + loggedIn = true; + LOG.debug("Logged in with cookies"); + return true; + } + String url = Camsoda.BASE_URI + "/api/v1/auth/login"; FormBody body = new FormBody.Builder() .add("username", Config.getInstance().getSettings().camsodaUsername) diff --git a/src/main/java/ctbrec/sites/chaturbate/ChaturbateHttpClient.java b/src/main/java/ctbrec/sites/chaturbate/ChaturbateHttpClient.java index 06ce6262..58e1f059 100644 --- a/src/main/java/ctbrec/sites/chaturbate/ChaturbateHttpClient.java +++ b/src/main/java/ctbrec/sites/chaturbate/ChaturbateHttpClient.java @@ -42,6 +42,16 @@ public class ChaturbateHttpClient extends HttpClient { @Override public boolean login() throws IOException { + if(loggedIn) { + return true; + } + + if(checkLogin()) { + loggedIn = true; + LOG.debug("Logged in with cookies"); + return true; + } + try { Request login = new Request.Builder() .url(Chaturbate.BASE_URI + "/auth/login/") @@ -86,6 +96,24 @@ public class ChaturbateHttpClient extends HttpClient { return loggedIn; } + private boolean checkLogin() throws IOException { + String url = "https://chaturbate.com/p/" + Config.getInstance().getSettings().username + "/"; + Request req = new Request.Builder().url(url).build(); + Response resp = execute(req); + if (resp.isSuccessful()) { + String profilePage = resp.body().string(); + try { + HtmlParser.getText(profilePage, "span.tokencount"); + return true; + } catch(Exception e) { + LOG.debug("Token tag not found. Login failed"); + return false; + } + } else { + throw new IOException("HTTP response: " + resp.code() + " - " + resp.message()); + } + } + @Override public Response execute(Request req, boolean requiresLogin) throws IOException { Response resp = super.execute(req, requiresLogin); diff --git a/src/main/java/ctbrec/sites/mfc/MyFreeCamsHttpClient.java b/src/main/java/ctbrec/sites/mfc/MyFreeCamsHttpClient.java index 7d49237b..62c6229c 100644 --- a/src/main/java/ctbrec/sites/mfc/MyFreeCamsHttpClient.java +++ b/src/main/java/ctbrec/sites/mfc/MyFreeCamsHttpClient.java @@ -5,11 +5,13 @@ import java.util.List; import java.util.NoSuchElementException; import java.util.Objects; +import org.jsoup.select.Elements; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ctbrec.Config; import ctbrec.io.HttpClient; +import ctbrec.ui.HtmlParser; import okhttp3.Cookie; import okhttp3.CookieJar; import okhttp3.FormBody; @@ -34,6 +36,12 @@ public class MyFreeCamsHttpClient extends HttpClient { return true; } + if(checkLogin()) { + loggedIn = true; + LOG.debug("Logged in with cookies"); + return true; + } + String username = Config.getInstance().getSettings().mfcUsername; String password = Config.getInstance().getSettings().mfcPassword; RequestBody body = new FormBody.Builder() @@ -65,6 +73,25 @@ public class MyFreeCamsHttpClient extends HttpClient { } } + private boolean checkLogin() throws IOException { + Request req = new Request.Builder().url(MyFreeCams.BASE_URI + "/php/account.php?request=status").build(); + Response resp = execute(req); + if(resp.isSuccessful()) { + String content = resp.body().string(); + try { + Elements tags = HtmlParser.getTags(content, "div.content > p > b"); + tags.get(2).text(); + return true; + } catch(Exception e) { + LOG.debug("Token tag not found. Login failed"); + return false; + } + } else { + resp.close(); + throw new IOException(resp.code() + " " + resp.message()); + } + } + public WebSocket newWebSocket(Request req, WebSocketListener webSocketListener) { return client.newWebSocket(req, webSocketListener); }