Change login process of Amateur.tv

This commit is contained in:
0xb00bface 2021-09-09 18:37:06 +02:00
parent 3f75e03766
commit f98e01d08c
3 changed files with 49 additions and 17 deletions

View File

@ -1,3 +1,9 @@
4.5.4
========================
* Fix LiveJasmin followed tab
* Add buttons to settings to delete cookies per site
* Fix bug in minimal browser
4.5.3 4.5.3
======================== ========================
* Fix Cam4 login * Fix Cam4 login

View File

@ -41,6 +41,7 @@ public class ExternalBrowser implements AutoCloseable {
private Object browserReadyLock = new Object(); private Object browserReadyLock = new Object();
private Map<String, CompletableFuture<Object>> responseFutures = new HashMap<>(); private Map<String, CompletableFuture<Object>> responseFutures = new HashMap<>();
private Runnable onReadyCallback;
public static ExternalBrowser getInstance() { public static ExternalBrowser getInstance() {
return INSTANCE; return INSTANCE;
@ -77,6 +78,8 @@ public class ExternalBrowser implements AutoCloseable {
out.write('\n'); out.write('\n');
out.flush(); out.flush();
onReadyCallback.run();
LOG.debug("Waiting for browser to terminate"); LOG.debug("Waiting for browser to terminate");
p.waitFor(); p.waitFor();
int exitValue = p.exitValue(); int exitValue = p.exitValue();
@ -231,4 +234,9 @@ public class ExternalBrowser implements AutoCloseable {
break; break;
} }
} }
public ExternalBrowser onReady(Runnable onReadyCallback) {
this.onReadyCallback = onReadyCallback;
return this;
}
} }

View File

@ -34,7 +34,9 @@ public class AmateurTvElectronLoginDialog {
config.put("h", 480); config.put("h", 480);
var msg = new JSONObject(); var msg = new JSONObject();
msg.put("config", config); msg.put("config", config);
browser.run(msg, msgHandler); browser
.onReady(this::onReady)
.run(msg, msgHandler);
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
throw new IOException("Couldn't wait for login dialog", e); throw new IOException("Couldn't wait for login dialog", e);
@ -48,22 +50,6 @@ public class AmateurTvElectronLoginDialog {
LOG.error("Didn't received a JSON object {}", line); LOG.error("Didn't received a JSON object {}", line);
} else { } else {
var json = new JSONObject(line); var json = new JSONObject(line);
try {
browser.executeJavaScript("let loginDialogVisible = document.querySelectorAll('div[class~=\"MuiDialog-container\"]').length > 1");
browser.executeJavaScript("if (!loginDialogVisible) { document.querySelector('button').innerHTML.indexOf('I agree') >= 0 && document.querySelector('button').click(); }");
browser.executeJavaScript("if (!loginDialogVisible) { document.querySelector('button[aria-label=\"open drawer\"]').click(); }"); // open the burger menu to get to the login button
browser.executeJavaScript("if (!loginDialogVisible) { document.querySelectorAll('button').forEach(function(b) { if (b.textContent === 'Log in') b.click(); }); }"); // click the login button to open the login dialog
browser.executeJavaScript("loginDialogVisible = document.querySelectorAll('div[class~=\"MuiDialog-container\"]').length > 1");
browser.executeJavaScript("if (loginDialogVisible) throw new Error(\"Stop execution right here\")");
// String username = Config.getInstance().getSettings().amateurTvUsername;
// String password = Config.getInstance().getSettings().amateurTvPassword;
// browser.executeJavaScript("if (loginDialogVisible) { document.querySelectorAll('div[class~=\"MuiDialog-container\"] input').item(0).value = '" + username + "' }"); // enter username
// browser.executeJavaScript("if (loginDialogVisible) { document.querySelectorAll('div[class~=\"MuiDialog-container\"] input').item(1).value = '" + password + "' }"); // enter password
//browser.executeJavaScript("console.log('submit')");
// browser.executeJavaScript("if(loginDialogVisible) { document.querySelector('div[class~=\"MuiDialog-container\"] button[type=\"submit\"]').click() }"); // click the submit button
} catch(Exception e) {
LOG.warn("Couldn't auto fill username and password for Amateur.TV", e);
}
var loginSuccessful = false; var loginSuccessful = false;
if (json.has("cookies")) { if (json.has("cookies")) {
@ -99,10 +85,42 @@ public class AmateurTvElectronLoginDialog {
if (loginSuccessful) { if (loginSuccessful) {
try { try {
browser.close(); browser.close();
return;
} catch (IOException e) { } catch (IOException e) {
LOG.error("Couldn't send shutdown request to external browser", e); LOG.error("Couldn't send shutdown request to external browser", e);
} }
} }
try {
browser.executeJavaScript("document.querySelector('div[class~=\"cy_ubCoins\"]') != null")
.thenAccept(b -> {
LOG.debug("Result: {}", b);
if (Boolean.TRUE.equals(b)) {
try {
browser.close();
} catch (IOException e) {
e.printStackTrace();
}
}
})
.exceptionally(ex -> {LOG.error("Error", ex); return null;});
browser.executeJavaScript("if (!loginDialogVisible) { document.querySelector('button').innerHTML.indexOf('I agree') >= 0 && document.querySelector('button').click(); }");
browser.executeJavaScript("if (!loginDialogVisible) { document.querySelector('button[aria-label=\"open drawer\"]').click(); }"); // open the burger menu to get to the login button
browser.executeJavaScript("if (!loginDialogVisible) { document.querySelectorAll('button').forEach(function(b) { if (b.textContent === 'Log in') b.click(); }); }"); // click the login button to open the login dialog
browser.executeJavaScript("loginDialogVisible = document.querySelectorAll('div[class~=\"MuiDialog-container\"]').length > 1");
browser.executeJavaScript("if (loginDialogVisible) throw new Error(\"Stop execution right here\")");
} catch(Exception e) {
LOG.warn("Couldn't auto fill username and password for Amateur.TV", e);
}
} }
}; };
private void onReady() {
try {
browser.executeJavaScript("let loginDialogVisible = document.querySelectorAll('div[class~=\"MuiDialog-container\"]').length > 1");
} catch(Exception e) {
LOG.warn("Couldn't auto fill username and password for Amateur.TV", e);
}
}
} }