- System.err.println("Command only works via dbus");
- return 1;
- }
- }
-
- /**
- * Uses $XDG_DATA_HOME/signal-cli if it exists, or if none of the legacy directories exist:
- * - $HOME/.config/signal
- * - $HOME/.config/textsecure
- *
- * @return the data directory to be used by signal-cli.
- */
- private static File getDefaultDataPath() {
- File dataPath = new File(IOUtils.getDataHomeDir(), "signal-cli");
- if (dataPath.exists()) {
- return dataPath;
- }
-
- File configPath = new File(System.getProperty("user.home"), ".config");
-
- File legacySettingsPath = new File(configPath, "signal");
- if (legacySettingsPath.exists()) {
- return legacySettingsPath;
- }
-
- legacySettingsPath = new File(configPath, "textsecure");
- if (legacySettingsPath.exists()) {
- return legacySettingsPath;
- }
-
- return dataPath;
- }
-
- private static Namespace parseArgs(String[] args) {
- ArgumentParser parser = buildArgumentParser();
-
- Namespace ns;
- try {
- ns = parser.parseArgs(args);
- } catch (ArgumentParserException e) {
- parser.handleError(e);
- return null;
- }
-
- if ("link".equals(ns.getString("command"))) {
- if (ns.getString("username") != null) {
- parser.printUsage();
- System.err.println("You cannot specify a username (phone number) when linking");
- System.exit(2);
- }
- } else if (!ns.getBoolean("dbus") && !ns.getBoolean("dbus_system")) {
- if (ns.getString("username") == null) {
- parser.printUsage();
- System.err.println("You need to specify a username (phone number)");
- System.exit(2);
- }
- if (!PhoneNumberFormatter.isValidNumber(ns.getString("username"), null)) {
- System.err.println("Invalid username (phone number), make sure you include the country code.");
- System.exit(2);
- }
- }
- if (ns.getList("recipient") != null && !ns.getList("recipient").isEmpty() && ns.getString("group") != null) {
- System.err.println("You cannot specify recipients by phone number and groups at the same time");
- System.exit(2);
- }
- return ns;
- }
-
- private static ArgumentParser buildArgumentParser() {
- ArgumentParser parser = ArgumentParsers.newFor("signal-cli")
- .build()
- .defaultHelp(true)
- .description("Commandline interface for Signal.")
- .version(BaseConfig.PROJECT_NAME + " " + BaseConfig.PROJECT_VERSION);
-
- parser.addArgument("-v", "--version").help("Show package version.").action(Arguments.version());
- parser.addArgument("--config")
- .help("Set the path, where to store the config (Default: $XDG_DATA_HOME/signal-cli , $HOME/.local/share/signal-cli).");
-
- MutuallyExclusiveGroup mut = parser.addMutuallyExclusiveGroup();
- mut.addArgument("-u", "--username").help("Specify your phone number, that will be used for verification.");
- mut.addArgument("--dbus").help("Make request via user dbus.").action(Arguments.storeTrue());
- mut.addArgument("--dbus-system").help("Make request via system dbus.").action(Arguments.storeTrue());
-
- Subparsers subparsers = parser.addSubparsers()
- .title("subcommands")
- .dest("command")
- .description("valid subcommands")
- .help("additional help");
-
- final Map<String, Command> commands = Commands.getCommands();
- for (Map.Entry<String, Command> entry : commands.entrySet()) {
- Subparser subparser = subparsers.addParser(entry.getKey());
- entry.getValue().attachToSubparser(subparser);