From d768cbb1ffaf703b8b49f3579cc3858aafcc7280 Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Tue, 6 Nov 2018 18:38:20 +0100 Subject: [PATCH] Implement tipping for bongacams --- .../java/ctbrec/sites/bonga/BongaCams.java | 3 +- .../sites/bonga/BongaCamsHttpClient.java | 66 ++++++++++++++++--- .../ctbrec/sites/bonga/BongaCamsModel.java | 38 ++++++++++- 3 files changed, 94 insertions(+), 13 deletions(-) diff --git a/src/main/java/ctbrec/sites/bonga/BongaCams.java b/src/main/java/ctbrec/sites/bonga/BongaCams.java index 075c83b0..cead29b9 100644 --- a/src/main/java/ctbrec/sites/bonga/BongaCams.java +++ b/src/main/java/ctbrec/sites/bonga/BongaCams.java @@ -61,10 +61,11 @@ public class BongaCams extends AbstractSite { @Override public Integer getTokenBalance() throws IOException { + int userId = ((BongaCamsHttpClient)getHttpClient()).getUserId(); String url = BongaCams.BASE_URL + "/tools/amf.php"; RequestBody body = new FormBody.Builder() .add("method", "ping") - .add("args[]", "66050808") + .add("args[]", Integer.toString(userId)) .build(); Request request = new Request.Builder() .url(url) diff --git a/src/main/java/ctbrec/sites/bonga/BongaCamsHttpClient.java b/src/main/java/ctbrec/sites/bonga/BongaCamsHttpClient.java index 4a16ff98..c3af3b20 100644 --- a/src/main/java/ctbrec/sites/bonga/BongaCamsHttpClient.java +++ b/src/main/java/ctbrec/sites/bonga/BongaCamsHttpClient.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; +import org.json.JSONArray; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,6 +27,7 @@ import okio.ByteString; public class BongaCamsHttpClient extends HttpClient { private static final transient Logger LOG = LoggerFactory.getLogger(BongaCamsHttpClient.class); + private int userId = 0; @Override public synchronized boolean login() throws IOException { @@ -62,7 +64,12 @@ public class BongaCamsHttpClient extends HttpClient { } loggedIn = checkLoginSuccess(); - createWebSocket(); + if(loggedIn) { + LOG.info("Logged in. User ID is {}", userId); + createWebSocket(); + } else { + LOG.info("Login failed"); + } return loggedIn; } @@ -123,17 +130,20 @@ public class BongaCamsHttpClient extends HttpClient { /** - * check, if the login by sending a ping request + * Check, if the login worked by requesting roomdata and looking * @throws IOException */ private boolean checkLoginSuccess() throws IOException { + String modelName = getAnyModelName(); + // we request the roomData of a random model, because it contains + // user data, if the user is logged in, which we can use to verify, that the login worked String url = BongaCams.BASE_URL + "/tools/amf.php"; RequestBody body = new FormBody.Builder() - // .add("method", "getRoomData") - // .add("args[]", name) - // .add("args[]", "false") - .add("method", "ping") - .add("args[]", "66050808") // TODO where to get the userId + .add("method", "getRoomData") + .add("args[]", modelName) + .add("args[]", "false") + //.add("method", "ping") // TODO alternative request, but + //.add("args[]", ) // where to get the userId .build(); Request request = new Request.Builder() .url(url) @@ -147,8 +157,10 @@ public class BongaCamsHttpClient extends HttpClient { try(Response response = execute(request)) { if(response.isSuccessful()) { JSONObject json = new JSONObject(response.body().string()); - if(json.optString("status").equals("online")) { - return true; + if(json.optString("status").equals("success")) { + JSONObject userData = json.getJSONObject("userData"); + userId = userData.optInt("userId"); + return userId > 0; } else { throw new IOException("Request was not successful: " + json.toString(2)); } @@ -158,6 +170,36 @@ public class BongaCamsHttpClient extends HttpClient { } } + /** + * Fetches the list of online models and returns the name of the first model + */ + private String getAnyModelName() throws IOException { + Request request = new Request.Builder() + .url(BongaCams.BASE_URL + "/tools/listing_v3.php?livetab=female&online_only=true&is_mobile=true&offset=0") + .addHeader("User-Agent", "Mozilla/5.0 (Android 9.0; Mobile; rv:61.0) Gecko/61.0 Firefox/61.0") + .addHeader("Accept", "application/json, text/javascript, */*") + .addHeader("Accept-Language", "en") + .addHeader("Referer", BongaCams.BASE_URL) + .addHeader("X-Requested-With", "XMLHttpRequest") + .build(); + try(Response response = execute(request)) { + if (response.isSuccessful()) { + String content = response.body().string(); + JSONObject json = new JSONObject(content); + if(json.optString("status").equals("success")) { + JSONArray _models = json.getJSONArray("models"); + JSONObject m = _models.getJSONObject(0); + String name = m.getString("username"); + return name; + } else { + throw new IOException("Request was not successful: " + content); + } + } else { + throw new IOException(response.code() + ' ' + response.message()); + } + } + } + private void transferCookies(BongaCamsLoginDialog loginDialog) { HttpUrl redirectedUrl = HttpUrl.parse(loginDialog.getUrl()); List cookies = new ArrayList<>(); @@ -213,4 +255,10 @@ public class BongaCamsHttpClient extends HttpClient { // } // } + public int getUserId() throws IOException { + if(userId == 0) { + login(); + } + return userId; + } } diff --git a/src/main/java/ctbrec/sites/bonga/BongaCamsModel.java b/src/main/java/ctbrec/sites/bonga/BongaCamsModel.java index 5126b44a..2f29563b 100644 --- a/src/main/java/ctbrec/sites/bonga/BongaCamsModel.java +++ b/src/main/java/ctbrec/sites/bonga/BongaCamsModel.java @@ -113,7 +113,6 @@ public class BongaCamsModel extends AbstractModel { if(response.isSuccessful()) { JSONObject json = new JSONObject(response.body().string()); if(json.optString("status").equals("success")) { - System.out.println(json.toString(2)); JSONObject localData = json.getJSONObject("localData"); String server = localData.getString("videoServerUrl"); return "https:" + server + "/hls/stream_" + getName() + "/playlist.m3u8"; @@ -134,8 +133,41 @@ public class BongaCamsModel extends AbstractModel { @Override public void receiveTip(int tokens) throws IOException { - // TODO Auto-generated method stub - + // method=tipModel&args[]=Sweetsexbia&args[]=1&args[]=66050808&args[3]=&_csrf_token=dd304a3876025127cc487e71d44a5843 + String url = BongaCams.BASE_URL + "/chat-ajax-amf-service?" + System.currentTimeMillis(); + int userId = ((BongaCamsHttpClient)site.getHttpClient()).getUserId(); + RequestBody body = new FormBody.Builder() + .add("method", "tipModel") + .add("args[]", getName()) + .add("args[]", Integer.toString(tokens)) + .add("args[]", Integer.toString(userId)) + .add("args[3]", "") + .build(); + Request request = new Request.Builder() + .url(url) + .addHeader("User-Agent", "Mozilla/5.0 (Android 9.0; Mobile; rv:61.0) Gecko/61.0 Firefox/61.0") + .addHeader("Accept", "application/json, text/javascript, */*") + .addHeader("Accept-Language", "en") + .addHeader("Referer", BongaCams.BASE_URL + '/' + getName()) + .addHeader("X-Requested-With", "XMLHttpRequest") + .post(body) + .build(); + try(Response response = site.getHttpClient().execute(request, true)) { + if(response.isSuccessful()) { + // { + // "dataKey": "d40f579faf592324c1b0b97bd711039f", + // "amount": "1", + // "balance": 11, + // "actionKey": "b60f780c472e83b95167efe9bc9512bf", + // "description": "Sie haben erfolgreich Sweetsexbia 1 Token Trinkgeld gegeben!", + // "status": "success" + // } + JSONObject json = new JSONObject(response.body().string()); + System.out.println(json.toString(2)); + } else { + throw new IOException(response.code() + ' ' + response.message()); + } + } } @Override