Add commands to update contact names on Signal servers

As Signal Desktop does not allow its users to update the contact names,
it would be nice to be able to update contact names from signal-cli when
the latter is the master device.

The command `setContactName` allow to set the name for the given contact
in the local store. `sendContacts` can then be used to push the updated
contact list on Signal servers.

Closes #228
This commit is contained in:
Jérémy Bobbio 2019-09-24 19:43:40 +02:00 committed by AsamK
parent 0722ec2361
commit 53e7f83188
5 changed files with 78 additions and 1 deletions

View file

@ -20,6 +20,8 @@ public class Commands {
addCommand("removeDevice", new RemoveDeviceCommand());
addCommand("removePin", new RemovePinCommand());
addCommand("send", new SendCommand());
addCommand("sendContacts", new SendContactsCommand());
addCommand("setContactName", new SetContactNameCommand());
addCommand("setPin", new SetPinCommand());
addCommand("trust", new TrustCommand());
addCommand("unregister", new UnregisterCommand());

View file

@ -0,0 +1,31 @@
package org.asamk.signal.commands;
import net.sourceforge.argparse4j.inf.Namespace;
import net.sourceforge.argparse4j.inf.Subparser;
import org.asamk.signal.manager.Manager;
import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
import java.io.IOException;
public class SendContactsCommand implements LocalCommand {
@Override
public void attachToSubparser(final Subparser subparser) {
subparser.help("Send contacts to the signal server.");
}
@Override
public int handleCommand(final Namespace ns, final Manager m) {
if (!m.isRegistered()) {
System.err.println("User is not registered.");
return 1;
}
try {
m.sendContacts();
return 0;
} catch (IOException | UntrustedIdentityException e) {
System.err.println("SendContacts error: " + e.getMessage());
return 3;
}
}
}

View file

@ -0,0 +1,34 @@
package org.asamk.signal.commands;
import net.sourceforge.argparse4j.impl.Arguments;
import net.sourceforge.argparse4j.inf.Namespace;
import net.sourceforge.argparse4j.inf.Subparser;
import org.asamk.signal.manager.Manager;
public class SetContactNameCommand implements LocalCommand {
@Override
public void attachToSubparser(final Subparser subparser) {
subparser.addArgument("number")
.help("Contact number");
subparser.addArgument("name")
.help("New contact name");
subparser.help("Set the name of a given contact");
}
@Override
public int handleCommand(final Namespace ns, final Manager m) {
if (!m.isRegistered()) {
System.err.println("User is not registered.");
return 1;
}
String number = ns.getString("number");
String name = ns.getString("name");
m.setContactName(number, name);
return 0;
}
}

View file

@ -1416,7 +1416,7 @@ public class Manager implements Signal {
}
}
private void sendContacts() throws IOException, UntrustedIdentityException {
public void sendContacts() throws IOException, UntrustedIdentityException {
File contactsFile = IOUtils.createTempFile();
try {