X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/22f19c406779893d08675c2d06d2b7708cc3f2a8..e74be0c345321888c1fbfa05616cb90cf3f07ffb:/src/main/java/org/asamk/signal/Main.java diff --git a/src/main/java/org/asamk/signal/Main.java b/src/main/java/org/asamk/signal/Main.java index 6204778d..b9209631 100644 --- a/src/main/java/org/asamk/signal/Main.java +++ b/src/main/java/org/asamk/signal/Main.java @@ -32,9 +32,12 @@ import org.asamk.signal.commands.DbusCommand; import org.asamk.signal.commands.ExtendedDbusCommand; import org.asamk.signal.commands.LocalCommand; import org.asamk.signal.commands.ProvisioningCommand; +import org.asamk.signal.commands.RegistrationCommand; import org.asamk.signal.dbus.DbusSignalImpl; import org.asamk.signal.manager.Manager; +import org.asamk.signal.manager.NotRegisteredException; import org.asamk.signal.manager.ProvisioningManager; +import org.asamk.signal.manager.RegistrationManager; import org.asamk.signal.manager.ServiceConfig; import org.asamk.signal.util.IOUtils; import org.asamk.signal.util.SecurityProvider; @@ -43,7 +46,6 @@ import org.freedesktop.dbus.connections.impl.DBusConnection; import org.freedesktop.dbus.exceptions.DBusException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.whispersystems.signalservice.api.push.exceptions.AuthorizationFailedException; import org.whispersystems.signalservice.api.util.PhoneNumberFormatter; import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration; @@ -75,8 +77,14 @@ public class Main { } public static int init(Namespace ns) { + Command command = getCommand(ns); + if (command == null) { + logger.error("Command not implemented!"); + return 3; + } + if (ns.getBoolean("dbus") || ns.getBoolean("dbus_system")) { - return initDbusClient(ns, ns.getBoolean("dbus_system")); + return initDbusClient(command, ns, ns.getBoolean("dbus_system")); } final String username = ns.getString("username"); @@ -99,12 +107,31 @@ public class Main { if (username == null) { ProvisioningManager pm = new ProvisioningManager(dataPath, serviceConfiguration, BaseConfig.USER_AGENT); - return handleCommands(ns, pm); + return handleCommand(command, ns, pm); + } + + if (command instanceof RegistrationCommand) { + final RegistrationManager manager; + try { + manager = RegistrationManager.init(username, dataPath, serviceConfiguration, BaseConfig.USER_AGENT); + } catch (Throwable e) { + logger.error("Error loading or creating state file: {}", e.getMessage()); + return 2; + } + try (RegistrationManager m = manager) { + return handleCommand(command, ns, m); + } catch (Exception e) { + logger.error("Cleanup failed", e); + return 3; + } } Manager manager; try { manager = Manager.init(username, dataPath, serviceConfiguration, BaseConfig.USER_AGENT); + } catch (NotRegisteredException e) { + System.err.println("User is not registered."); + return 1; } catch (Throwable e) { logger.error("Error loading state file: {}", e.getMessage()); return 2; @@ -113,25 +140,19 @@ public class Main { try (Manager m = manager) { try { m.checkAccountState(); - } catch (AuthorizationFailedException e) { - if (!"register".equals(ns.getString("command"))) { - // Register command should still be possible, if current authorization fails - System.err.println("Authorization failed, was the number registered elsewhere?"); - return 2; - } } catch (IOException e) { logger.error("Error while checking account: {}", e.getMessage()); return 2; } - return handleCommands(ns, m); + return handleCommand(command, ns, m); } catch (IOException e) { logger.error("Cleanup failed", e); return 3; } } - private static int initDbusClient(final Namespace ns, final boolean systemBus) { + private static int initDbusClient(final Command command, final Namespace ns, final boolean systemBus) { try { DBusConnection.DBusBusType busType; if (systemBus) { @@ -144,7 +165,7 @@ public class Main { DbusConfig.SIGNAL_OBJECTPATH, Signal.class); - return handleCommands(ns, ts, dBusConn); + return handleCommand(command, ns, ts, dBusConn); } } catch (DBusException | IOException e) { logger.error("Dbus client failed", e); @@ -152,56 +173,51 @@ public class Main { } } - private static int handleCommands(Namespace ns, Signal ts, DBusConnection dBusConn) { + private static Command getCommand(Namespace ns) { String commandKey = ns.getString("command"); final Map commands = Commands.getCommands(); - if (commands.containsKey(commandKey)) { - Command command = commands.get(commandKey); + if (!commands.containsKey(commandKey)) { + return null; + } + return commands.get(commandKey); + } - if (command instanceof ExtendedDbusCommand) { - return ((ExtendedDbusCommand) command).handleCommand(ns, ts, dBusConn); - } else if (command instanceof DbusCommand) { - return ((DbusCommand) command).handleCommand(ns, ts); - } else { - System.err.println(commandKey + " is not yet implemented via dbus"); - return 1; - } + private static int handleCommand(Command command, Namespace ns, Signal ts, DBusConnection dBusConn) { + if (command instanceof ExtendedDbusCommand) { + return ((ExtendedDbusCommand) command).handleCommand(ns, ts, dBusConn); + } else if (command instanceof DbusCommand) { + return ((DbusCommand) command).handleCommand(ns, ts); + } else { + System.err.println("Command is not yet implemented via dbus"); + return 1; } - return 0; } - private static int handleCommands(Namespace ns, ProvisioningManager pm) { - String commandKey = ns.getString("command"); - final Map commands = Commands.getCommands(); - if (commands.containsKey(commandKey)) { - Command command = commands.get(commandKey); + private static int handleCommand(Command command, Namespace ns, ProvisioningManager pm) { + if (command instanceof ProvisioningCommand) { + return ((ProvisioningCommand) command).handleCommand(ns, pm); + } else { + System.err.println("Command only works with a username"); + return 1; + } + } - if (command instanceof ProvisioningCommand) { - return ((ProvisioningCommand) command).handleCommand(ns, pm); - } else { - System.err.println(commandKey + " only works with a username"); - return 1; - } + private static int handleCommand(Command command, Namespace ns, RegistrationManager m) { + if (command instanceof RegistrationCommand) { + return ((RegistrationCommand) command).handleCommand(ns, m); } - return 0; + return 1; } - private static int handleCommands(Namespace ns, Manager m) { - String commandKey = ns.getString("command"); - final Map commands = Commands.getCommands(); - if (commands.containsKey(commandKey)) { - Command command = commands.get(commandKey); - - if (command instanceof LocalCommand) { - return ((LocalCommand) command).handleCommand(ns, m); - } else if (command instanceof DbusCommand) { - return ((DbusCommand) command).handleCommand(ns, new DbusSignalImpl(m)); - } else if (command instanceof ExtendedDbusCommand) { - System.err.println(commandKey + " only works via dbus"); - } + private static int handleCommand(Command command, Namespace ns, Manager m) { + if (command instanceof LocalCommand) { + return ((LocalCommand) command).handleCommand(ns, m); + } else if (command instanceof DbusCommand) { + return ((DbusCommand) command).handleCommand(ns, new DbusSignalImpl(m)); + } else { + System.err.println("Command only works via dbus"); return 1; } - return 0; } /**