From: AsamK Date: Sun, 22 Nov 2020 10:03:14 +0000 (+0100) Subject: Add possibility to pass a captcha token to register command X-Git-Tag: v0.6.12~3 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/c3e1d4fc750998a946a5c5b60d705e5eb582afd9 Add possibility to pass a captcha token to register command Fixes #251 --- diff --git a/man/signal-cli.1.adoc b/man/signal-cli.1.adoc index 98a5da2a..0bef0afc 100644 --- a/man/signal-cli.1.adoc +++ b/man/signal-cli.1.adoc @@ -54,6 +54,12 @@ Use the verify command to complete the verification. *-v*, *--voice*:: The verification should be done over voice, not SMS. +*--captcha*:: +The captcha token, required if registration failed with a captcha required error. +To get the token, go to https://signalcaptchas.org/registration/generate.html +Check the developer tools for a redirect starting with signalcaptcha:// +Everything after signalcaptcha:// is the captcha token. + === verify Verify the number using the code received via SMS or voice. diff --git a/src/main/java/org/asamk/signal/commands/RegisterCommand.java b/src/main/java/org/asamk/signal/commands/RegisterCommand.java index e95487bf..f69e0844 100644 --- a/src/main/java/org/asamk/signal/commands/RegisterCommand.java +++ b/src/main/java/org/asamk/signal/commands/RegisterCommand.java @@ -16,15 +16,19 @@ public class RegisterCommand implements LocalCommand { subparser.addArgument("-v", "--voice") .help("The verification should be done over voice, not sms.") .action(Arguments.storeTrue()); + subparser.addArgument("--captcha") + .help("The captcha token, required if registration failed with a captcha required error."); } @Override public int handleCommand(final Namespace ns, final Manager m) { try { - m.register(ns.getBoolean("voice")); + final boolean voiceVerification = ns.getBoolean("voice"); + final String captcha = ns.getString("captcha"); + m.register(voiceVerification, captcha); return 0; } catch (CaptchaRequiredException e) { - System.err.println("Captcha required for verification (" + e.getMessage() + ")"); + System.err.println("Captcha invalid or required for verification (" + e.getMessage() + ")"); return 1; } catch (IOException e) { System.err.println("Request verify error: " + e.getMessage()); diff --git a/src/main/java/org/asamk/signal/manager/Manager.java b/src/main/java/org/asamk/signal/manager/Manager.java index 63c6ee7d..83a3926a 100644 --- a/src/main/java/org/asamk/signal/manager/Manager.java +++ b/src/main/java/org/asamk/signal/manager/Manager.java @@ -298,7 +298,7 @@ public class Manager implements Closeable { return account.isRegistered(); } - public void register(boolean voiceVerification) throws IOException { + public void register(boolean voiceVerification, String captcha) throws IOException { account.setPassword(KeyUtils.createPassword()); // Resetting UUID, because registering doesn't work otherwise @@ -306,9 +306,9 @@ public class Manager implements Closeable { accountManager = createSignalServiceAccountManager(); if (voiceVerification) { - accountManager.requestVoiceVerificationCode(Locale.getDefault(), Optional.absent(), Optional.absent()); + accountManager.requestVoiceVerificationCode(Locale.getDefault(), Optional.fromNullable(captcha), Optional.absent()); } else { - accountManager.requestSmsVerificationCode(false, Optional.absent(), Optional.absent()); + accountManager.requestSmsVerificationCode(false, Optional.fromNullable(captcha), Optional.absent()); } account.setRegistered(false);