X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/ef2a013db35f6c5ac65546857df27b584e176307..b91c162159c7c28d049ceb8889c419791573d3bb:/src/main/java/org/asamk/signal/App.java diff --git a/src/main/java/org/asamk/signal/App.java b/src/main/java/org/asamk/signal/App.java index 6b31e2bc..4aa510d6 100644 --- a/src/main/java/org/asamk/signal/App.java +++ b/src/main/java/org/asamk/signal/App.java @@ -16,6 +16,7 @@ import org.asamk.signal.commands.ProvisioningCommand; import org.asamk.signal.commands.RegistrationCommand; import org.asamk.signal.commands.SignalCreator; import org.asamk.signal.commands.exceptions.CommandException; +import org.asamk.signal.commands.exceptions.IOErrorException; import org.asamk.signal.commands.exceptions.UnexpectedErrorException; import org.asamk.signal.commands.exceptions.UserErrorException; import org.asamk.signal.manager.Manager; @@ -24,6 +25,7 @@ import org.asamk.signal.manager.ProvisioningManager; import org.asamk.signal.manager.RegistrationManager; import org.asamk.signal.manager.config.ServiceConfig; import org.asamk.signal.manager.config.ServiceEnvironment; +import org.asamk.signal.manager.storage.identities.TrustNewIdentity; import org.asamk.signal.util.IOUtils; import org.freedesktop.dbus.connections.impl.DBusConnection; import org.freedesktop.dbus.exceptions.DBusException; @@ -74,6 +76,11 @@ public class App { .type(Arguments.enumStringType(ServiceEnvironmentCli.class)) .setDefault(ServiceEnvironmentCli.LIVE); + parser.addArgument("--trust-new-identities") + .help("Choose when to trust new identities.") + .type(Arguments.enumStringType(TrustNewIdentityCli.class)) + .setDefault(TrustNewIdentityCli.ON_FIRST_USE); + var subparsers = parser.addSubparsers().title("subcommands").dest("command"); Commands.getCommandSubparserAttachers().forEach((key, value) -> { @@ -125,11 +132,6 @@ public class App { dataPath = getDefaultDataPath(); } - final var serviceEnvironmentCli = ns.get("service-environment"); - final var serviceEnvironment = serviceEnvironmentCli == ServiceEnvironmentCli.LIVE - ? ServiceEnvironment.LIVE - : ServiceEnvironment.SANDBOX; - if (!ServiceConfig.getCapabilities().isGv2()) { logger.warn("WARNING: Support for new group V2 is disabled," + " because the required native library dependency is missing: libzkgroup"); @@ -139,6 +141,16 @@ public class App { throw new UserErrorException("Missing required native library dependency: libsignal-client"); } + final var serviceEnvironmentCli = ns.get("service-environment"); + final var serviceEnvironment = serviceEnvironmentCli == ServiceEnvironmentCli.LIVE + ? ServiceEnvironment.LIVE + : ServiceEnvironment.SANDBOX; + + final var trustNewIdentityCli = ns.get("trust-new-identities"); + final var trustNewIdentity = trustNewIdentityCli == TrustNewIdentityCli.ON_FIRST_USE + ? TrustNewIdentity.ON_FIRST_USE + : trustNewIdentityCli == TrustNewIdentityCli.ALWAYS ? TrustNewIdentity.ALWAYS : TrustNewIdentity.NEVER; + if (command instanceof ProvisioningCommand) { if (username != null) { throw new UserErrorException("You cannot specify a username (phone number) when linking"); @@ -156,7 +168,8 @@ public class App { dataPath, serviceEnvironment, usernames, - outputWriter); + outputWriter, + trustNewIdentity); return; } @@ -181,7 +194,12 @@ public class App { throw new UserErrorException("Command only works via dbus"); } - handleLocalCommand((LocalCommand) command, username, dataPath, serviceEnvironment, outputWriter); + handleLocalCommand((LocalCommand) command, + username, + dataPath, + serviceEnvironment, + outputWriter, + trustNewIdentity); } private void handleProvisioningCommand( @@ -208,7 +226,7 @@ public class App { + e.getMessage() + " (" + e.getClass().getSimpleName() - + ")"); + + ")", e); } try (var m = manager) { command.handleCommand(ns, m); @@ -222,9 +240,10 @@ public class App { final String username, final File dataPath, final ServiceEnvironment serviceEnvironment, - final OutputWriter outputWriter + final OutputWriter outputWriter, + final TrustNewIdentity trustNewIdentity ) throws CommandException { - try (var m = loadManager(username, dataPath, serviceEnvironment)) { + try (var m = loadManager(username, dataPath, serviceEnvironment, trustNewIdentity)) { command.handleCommand(ns, m, outputWriter); } catch (IOException e) { logger.warn("Cleanup failed", e); @@ -236,12 +255,13 @@ public class App { final File dataPath, final ServiceEnvironment serviceEnvironment, final List usernames, - final OutputWriter outputWriter + final OutputWriter outputWriter, + final TrustNewIdentity trustNewIdentity ) throws CommandException { final var managers = new ArrayList(); for (String u : usernames) { try { - managers.add(loadManager(u, dataPath, serviceEnvironment)); + managers.add(loadManager(u, dataPath, serviceEnvironment, trustNewIdentity)); } catch (CommandException e) { logger.warn("Ignoring {}: {}", u, e.getMessage()); } @@ -269,28 +289,30 @@ public class App { } private Manager loadManager( - final String username, final File dataPath, final ServiceEnvironment serviceEnvironment + final String username, + final File dataPath, + final ServiceEnvironment serviceEnvironment, + final TrustNewIdentity trustNewIdentity ) throws CommandException { Manager manager; try { - manager = Manager.init(username, dataPath, serviceEnvironment, BaseConfig.USER_AGENT); + manager = Manager.init(username, dataPath, serviceEnvironment, BaseConfig.USER_AGENT, trustNewIdentity); } catch (NotRegisteredException e) { throw new UserErrorException("User " + username + " is not registered."); } catch (Throwable e) { - logger.debug("Loading state file failed", e); throw new UnexpectedErrorException("Error loading state file for user " + username + ": " + e.getMessage() + " (" + e.getClass().getSimpleName() - + ")"); + + ")", e); } try { manager.checkAccountState(); } catch (IOException e) { - throw new UnexpectedErrorException("Error while checking account " + username + ": " + e.getMessage()); + throw new IOErrorException("Error while checking account " + username + ": " + e.getMessage(), e); } return manager; @@ -315,7 +337,7 @@ public class App { } } catch (DBusException | IOException e) { logger.error("Dbus client failed", e); - throw new UnexpectedErrorException("Dbus client failed"); + throw new UnexpectedErrorException("Dbus client failed", e); } }