From 4cc8a8eb8038c8a1319eafa0ea4b0057f112cfab Mon Sep 17 00:00:00 2001 From: theselfspace Date: Thu, 17 Nov 2022 20:20:35 +0530 Subject: [PATCH] Login bugfix and option to disable headless mode Handled login issue and option to disable the headless mode in case someone wants to realise any similar issue. Bu default headless mode is kept enabled. --- pom.xml | 4 +-- .../java/trade/theself/fyers/FyersFly.java | 2 +- .../fyers/boilerplate/LoginHandler.java | 34 +++++++++++++------ 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index 0bacd6b..5c3d9bc 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 space.theself fyers-java - 1.0.1 + 1.0.2 space.theself:fyers-java @@ -47,7 +47,7 @@ maven-javadoc-plugin 2.9.1 - ${java.home}/../bin/javadoc + ${java.home}/bin/javadoc diff --git a/src/main/java/trade/theself/fyers/FyersFly.java b/src/main/java/trade/theself/fyers/FyersFly.java index 4848c12..be2a197 100644 --- a/src/main/java/trade/theself/fyers/FyersFly.java +++ b/src/main/java/trade/theself/fyers/FyersFly.java @@ -134,11 +134,11 @@ public String generateAccessToken(String authCode) throws LoginException { try { CloseableHttpResponse response = client.execute(httpPost); - client.close(); InputStream is = response.getEntity().getContent(); StringBuffer sb = new StringBuffer(); byte[] allBytes = ByteStreams.toByteArray(is); is.close(); + client.close(); sb.append(new String(allBytes, StandardCharsets.US_ASCII)); JsonElement jsonElement = jsonParser.parse(sb.toString()); this.accessToken = jsonElement.getAsJsonObject().get("access_token").getAsString(); diff --git a/src/main/java/trade/theself/fyers/boilerplate/LoginHandler.java b/src/main/java/trade/theself/fyers/boilerplate/LoginHandler.java index ccb8118..a868f45 100755 --- a/src/main/java/trade/theself/fyers/boilerplate/LoginHandler.java +++ b/src/main/java/trade/theself/fyers/boilerplate/LoginHandler.java @@ -6,6 +6,8 @@ import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.StringUtils; @@ -39,7 +41,7 @@ public class LoginHandler { private String clientCode = StringUtils.EMPTY; private String redirectUrl = StringUtils.EMPTY; private String state = "sample_state"; - + private boolean enableHeadless = true; /** * Login to the portal through browser path.. This could break if Fyers decide to update their UI * @param clientId - Client ID of the user @@ -67,15 +69,17 @@ public String login(String clientId, String otp, String totp) throws LoginExcept WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); - options.addArguments( - "--headless", - "--disable-gpu", - "--ignore-certificate-errors", - "--disable-extensions", - "--no-sandbox", - "--disable-dev-shm-usage", - "--incognito"); - + List argList = new ArrayList<>(); + argList.add("--disable-gpu"); + argList.add("--ignore-certificate-errors"); + argList.add("--disable-extensions"); + argList.add("--no-sandbox"); + argList.add("--disable-dev-shm-usage"); + argList.add("--incognito"); + if(enableHeadless) + argList.add("--headless"); + options.addArguments(argList); + WebDriver driver = new ChromeDriver(options); WebDriverWait wait = new WebDriverWait(driver, 30); driver.get(loginUrl); @@ -158,8 +162,10 @@ public String login(String clientId, String otp, String totp) throws LoginExcept try { List params = URLEncodedUtils.parse(new URI(currentUrl), Charset.forName("UTF-8")); for (NameValuePair param : params) { - if(param.getName().equals("auth_code")) + if(param.getName().equals("auth_code")) { authCode = param.getValue(); + break; + } } } catch (URISyntaxException e) { throw new LoginException(e.getMessage()); @@ -214,4 +220,10 @@ public void setState(String state) { this.state = state; } + /** + * Method primarily to disable headless mode in case any browser related debugging is required. + * @param state + */ + public void setEnableHeadless(boolean state) { this.enableHeadless = state;} + }