From 6cd57312a1396543f14b243ff19d2cf0db973588 Mon Sep 17 00:00:00 2001 From: AsamK Date: Sun, 18 Feb 2024 19:24:23 +0100 Subject: [PATCH] Add parameter to configure phone number privacy --- client/src/cli.rs | 4 ++++ client/src/jsonrpc.rs | 2 ++ client/src/main.rs | 10 +++++++++- .../java/org/asamk/signal/manager/Manager.java | 7 ++++++- .../signal/manager/internal/ManagerImpl.java | 17 ++++++++++++++++- .../syncStorage/AccountRecordProcessor.java | 1 - .../manager/syncStorage/StorageSyncModels.java | 2 +- man/signal-cli.1.adoc | 6 ++++++ .../signal/commands/UpdateAccountCommand.java | 10 +++++++++- .../org/asamk/signal/dbus/DbusManagerImpl.java | 7 ++++++- .../org/asamk/signal/dbus/DbusSignalImpl.java | 2 +- 11 files changed, 60 insertions(+), 8 deletions(-) diff --git a/client/src/cli.rs b/client/src/cli.rs index 33403890..e5a5a878 100644 --- a/client/src/cli.rs +++ b/client/src/cli.rs @@ -316,6 +316,10 @@ pub enum CliCommands { device_name: Option, #[arg(long = "unrestricted-unidentified-sender")] unrestricted_unidentified_sender: Option, + #[arg(long = "discoverable-by-number")] + discoverable_by_number: Option, + #[arg(long = "number-sharing")] + number_sharing: Option, }, UpdateConfiguration { #[arg(long = "read-receipts")] diff --git a/client/src/jsonrpc.rs b/client/src/jsonrpc.rs index 211eaad8..266047c2 100644 --- a/client/src/jsonrpc.rs +++ b/client/src/jsonrpc.rs @@ -301,6 +301,8 @@ pub trait Rpc { account: Option, deviceName: Option, unrestrictedUnidentifiedSender: Option, + discoverableByNumber: Option, + numberSharing: Option, ) -> Result; #[method(name = "updateConfiguration", param_kind = map)] diff --git a/client/src/main.rs b/client/src/main.rs index 61cbabf2..d934f800 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -275,9 +275,17 @@ async fn handle_command( CliCommands::UpdateAccount { device_name, unrestricted_unidentified_sender, + discoverable_by_number, + number_sharing, } => { client - .update_account(cli.account, device_name, unrestricted_unidentified_sender) + .update_account( + cli.account, + device_name, + unrestricted_unidentified_sender, + discoverable_by_number, + number_sharing, + ) .await } CliCommands::UpdateConfiguration { diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index e9eeb7c4..52d0aaff 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -90,7 +90,12 @@ public interface Manager extends Closeable { */ Map getUserStatus(Set numbers) throws IOException, RateLimitException; - void updateAccountAttributes(String deviceName, Boolean unrestrictedUnidentifiedSender) throws IOException; + void updateAccountAttributes( + String deviceName, + Boolean unrestrictedUnidentifiedSender, + final Boolean discoverableByNumber, + final Boolean numberSharing + ) throws IOException; Configuration getConfiguration(); diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java index b059e821..bd484bb7 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java @@ -43,6 +43,7 @@ import org.asamk.signal.manager.api.NotAGroupMemberException; import org.asamk.signal.manager.api.NotPrimaryDeviceException; import org.asamk.signal.manager.api.Pair; import org.asamk.signal.manager.api.PendingAdminApprovalException; +import org.asamk.signal.manager.api.PhoneNumberSharingMode; import org.asamk.signal.manager.api.PinLockedException; import org.asamk.signal.manager.api.Profile; import org.asamk.signal.manager.api.RateLimitException; @@ -277,13 +278,27 @@ public class ManagerImpl implements Manager { } @Override - public void updateAccountAttributes(String deviceName, Boolean unrestrictedUnidentifiedSender) throws IOException { + public void updateAccountAttributes( + String deviceName, + Boolean unrestrictedUnidentifiedSender, + final Boolean discoverableByNumber, + final Boolean numberSharing + ) throws IOException { if (deviceName != null) { context.getAccountHelper().setDeviceName(deviceName); } if (unrestrictedUnidentifiedSender != null) { account.setUnrestrictedUnidentifiedAccess(unrestrictedUnidentifiedSender); } + if (discoverableByNumber != null) { + account.getConfigurationStore().setPhoneNumberUnlisted(!discoverableByNumber); + } + if (numberSharing != null) { + account.getConfigurationStore() + .setPhoneNumberSharingMode(numberSharing + ? PhoneNumberSharingMode.EVERYBODY + : PhoneNumberSharingMode.NOBODY); + } context.getAccountHelper().updateAccountAttributes(); context.getAccountHelper().checkWhoAmiI(); } diff --git a/lib/src/main/java/org/asamk/signal/manager/syncStorage/AccountRecordProcessor.java b/lib/src/main/java/org/asamk/signal/manager/syncStorage/AccountRecordProcessor.java index e9cd1fa6..acce82e6 100644 --- a/lib/src/main/java/org/asamk/signal/manager/syncStorage/AccountRecordProcessor.java +++ b/lib/src/main/java/org/asamk/signal/manager/syncStorage/AccountRecordProcessor.java @@ -118,7 +118,6 @@ public class AccountRecordProcessor extends DefaultStorageRecordProcessor