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;
parser.addArgument("-o", "--output")
.help("Choose to output in plain text or JSON")
- .type(Arguments.enumStringType(OutputType.class))
- .setDefault(OutputType.PLAIN_TEXT);
+ .type(Arguments.enumStringType(OutputType.class));
parser.addArgument("--service-environment")
.help("Choose the server environment to use.")
.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) -> {
}
public void init() throws CommandException {
- var outputType = ns.<OutputType>get("output");
- var outputWriter = outputType == OutputType.JSON
- ? new JsonWriterImpl(System.out)
- : new PlainTextWriterImpl(System.out);
-
var commandKey = ns.getString("command");
var command = Commands.getCommand(commandKey);
if (command == null) {
throw new UserErrorException("Command not implemented!");
}
- if (!command.getSupportedOutputTypes().contains(outputType)) {
- throw new UserErrorException("Command doesn't support output type " + outputType.toString());
+ var outputTypeInput = ns.<OutputType>get("output");
+ var outputType = outputTypeInput == null
+ ? command.getSupportedOutputTypes().stream().findFirst().orElse(null)
+ : outputTypeInput;
+ var outputWriter = outputType == null
+ ? null
+ : outputType == OutputType.JSON ? new JsonWriterImpl(System.out) : new PlainTextWriterImpl(System.out);
+
+ if (outputWriter != null && !command.getSupportedOutputTypes().contains(outputType)) {
+ throw new UserErrorException("Command doesn't support output type " + outputType);
}
var username = ns.getString("username");
dataPath = getDefaultDataPath();
}
- final var serviceEnvironmentCli = ns.<ServiceEnvironmentCli>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");
throw new UserErrorException("Missing required native library dependency: libsignal-client");
}
+ final var serviceEnvironmentCli = ns.<ServiceEnvironmentCli>get("service-environment");
+ final var serviceEnvironment = serviceEnvironmentCli == ServiceEnvironmentCli.LIVE
+ ? ServiceEnvironment.LIVE
+ : ServiceEnvironment.SANDBOX;
+
+ final var trustNewIdentityCli = ns.<TrustNewIdentityCli>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");
dataPath,
serviceEnvironment,
usernames,
- outputWriter);
+ outputWriter,
+ trustNewIdentity);
return;
}
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(
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);
final File dataPath,
final ServiceEnvironment serviceEnvironment,
final List<String> usernames,
- final OutputWriter outputWriter
+ final OutputWriter outputWriter,
+ final TrustNewIdentity trustNewIdentity
) throws CommandException {
final var managers = new ArrayList<Manager>();
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());
}
}
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) {