From 706fdf5844d5a6b67c0a43c000cc16b689732479 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Sun, 2 Jun 2019 03:05:14 +0200 Subject: [PATCH 1/3] Expose loginIndex and otp fields from runescape client Signed-off-by: Tomas Slusny --- .../src/main/java/net/runelite/api/Client.java | 14 ++++++++++++++ .../main/java/net/runelite/rs/api/RSClient.java | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 213bda81cd..fc1e564c0a 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -151,6 +151,13 @@ public interface Client extends GameEngine */ void setPassword(String password); + /** + * Sets the 6 digit pin used for authenticator on login screen. + * + * @param otp one time password + */ + void setOtp(String otp); + /** * Gets currently selected login field. 0 is username, and 1 is password. * @@ -158,6 +165,13 @@ public interface Client extends GameEngine */ int getCurrentLoginField(); + /** + * Gets index of current login state. 2 is username/password form, 4 is authenticator form + * + * @return current login state index + */ + int getLoginIndex(); + /** * Gets the account type of the logged in player. * diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index 838a7ea344..6381dd3f99 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -248,10 +248,18 @@ public interface RSClient extends RSGameEngine, Client @Override void setPassword(String password); + @Import("otp") + @Override + void setOtp(String otp); + @Import("currentLoginField") @Override int getCurrentLoginField(); + @Import("loginIndex") + @Override + int getLoginIndex(); + @Import("playerOptions") @Override String[] getPlayerOptions(); From e48a7e4a540daf8ef49e7c17b4f705434116ba8b Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Sun, 2 Jun 2019 03:07:32 +0200 Subject: [PATCH 2/3] Add LOGIN_SCREEN_AUTHENTICATOR game state Signed-off-by: Tomas Slusny --- runelite-api/src/main/java/net/runelite/api/GameState.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/GameState.java b/runelite-api/src/main/java/net/runelite/api/GameState.java index 0751fe0e71..5f9083f9ca 100644 --- a/runelite-api/src/main/java/net/runelite/api/GameState.java +++ b/runelite-api/src/main/java/net/runelite/api/GameState.java @@ -41,6 +41,10 @@ public enum GameState * The client is at the login screen. */ LOGIN_SCREEN(10), + /** + * The client is at the login screen entering authenticator code. + */ + LOGIN_SCREEN_AUTHENTICATOR(11), /** * There is a player logging in. */ From b3e02ac9b7677388a4c9127d7286ab8dd58605f2 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Sun, 2 Jun 2019 03:05:39 +0200 Subject: [PATCH 3/3] Add support for pasting authenticator code on login screen Signed-off-by: Tomas Slusny --- .../loginscreen/LoginScreenPlugin.java | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenPlugin.java index 4da52e1492..bda2e5cdf2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenPlugin.java @@ -54,6 +54,7 @@ public class LoginScreenPlugin extends Plugin implements KeyListener { private static final int MAX_USERNAME_LENGTH = 254; private static final int MAX_PASSWORD_LENGTH = 20; + private static final int MAX_PIN_LENGTH = 6; @Inject private Client client; @@ -163,7 +164,9 @@ public class LoginScreenPlugin extends Plugin implements KeyListener @Override public void keyPressed(KeyEvent e) { - if (!config.pasteEnabled() || client.getGameState() != GameState.LOGIN_SCREEN) + if (!config.pasteEnabled() || ( + client.getGameState() != GameState.LOGIN_SCREEN && + client.getGameState() != GameState.LOGIN_SCREEN_AUTHENTICATOR)) { return; } @@ -182,16 +185,27 @@ public class LoginScreenPlugin extends Plugin implements KeyListener .toString() .trim(); - // 0 is username, 1 is password - if (client.getCurrentLoginField() == 0) + switch (client.getLoginIndex()) { - // Truncate data to maximum username length if necessary - client.setUsername(data.substring(0, Math.min(data.length(), MAX_USERNAME_LENGTH))); - } - else - { - // Truncate data to maximum password length if necessary - client.setPassword(data.substring(0, Math.min(data.length(), MAX_PASSWORD_LENGTH))); + // Username/password form + case 2: + if (client.getCurrentLoginField() == 0) + { + // Truncate data to maximum username length if necessary + client.setUsername(data.substring(0, Math.min(data.length(), MAX_USERNAME_LENGTH))); + } + else + { + // Truncate data to maximum password length if necessary + client.setPassword(data.substring(0, Math.min(data.length(), MAX_PASSWORD_LENGTH))); + } + + break; + // Authenticator form + case 4: + // Truncate data to maximum OTP code length if necessary + client.setOtp(data.substring(0, Math.min(data.length(), MAX_PIN_LENGTH))); + break; } } catch (UnsupportedFlavorException | IOException ex)