]> nmode's Git Repositories - signal-cli/commitdiff
Implement Dbus setPin and removePin (#733)
authorJohn Freed <okgithub@johnfreed.com>
Tue, 21 Sep 2021 20:26:26 +0000 (22:26 +0200)
committerGitHub <noreply@github.com>
Tue, 21 Sep 2021 20:26:26 +0000 (22:26 +0200)
and update documentation

.gitignore
man/signal-cli-dbus.5.adoc
src/main/java/org/asamk/Signal.java
src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java

index 8fa9c8bd03ed0e924cf87e943fbd56a14a8094e2..e41d1e405ff52983d8af894ce4a4250d2233ea29 100644 (file)
@@ -11,3 +11,4 @@ local.properties
 .settings/
 out/
 .DS_Store
+/bin/
index 4ff5e9945c4403e745e9b80761b37a30cb5ce5c6..d562d06479b2871fc80f39bb0b9a23621e849b9b 100755 (executable)
@@ -229,6 +229,19 @@ isGroupBlocked(groupId<ay>) -> state<b>::
 
 Exceptions: None, for unknown groups 0 (false) is returned
 
+removePin() -> <>::
+
+Removes registration PIN protection.
+
+Exception: Failure
+
+setPin(pin<s>) -> <>::
+* pin               : PIN you set after registration (resets after 7 days of inactivity)
+
+Sets a registration lock PIN, to prevent others from registering your number.
+
+Exception: Failure
+
 version() -> version<s>::
 * version : Version string of signal-cli
 
index 868de02b924c8483815990a8435d75cecae0d749..a30f8f3b2f5e3560618172758eff9effa08a0931 100644 (file)
@@ -1,10 +1,13 @@
 package org.asamk;
 
+import org.asamk.Signal.Error;
 import org.freedesktop.dbus.exceptions.DBusException;
 import org.freedesktop.dbus.exceptions.DBusExecutionException;
 import org.freedesktop.dbus.interfaces.DBusInterface;
 import org.freedesktop.dbus.messages.DBusSignal;
+import org.whispersystems.libsignal.util.guava.Optional;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -87,6 +90,10 @@ public interface Signal extends DBusInterface {
             String name, String about, String aboutEmoji, String avatarPath, boolean removeAvatar
     ) throws Error.Failure;
 
+    void removePin();
+
+    void setPin(String registrationLockPin);
+
     String version();
 
     List<String> listNumbers();
index 5e8fd4324ae00f486c92a0a6a6168824b00c7e27..44250d5b136ca4205602ca9643b2381f2b56fa4d 100644 (file)
@@ -18,6 +18,7 @@ import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.manager.storage.identities.IdentityInfo;
 import org.asamk.signal.util.ErrorUtils;
 import org.asamk.signal.util.Util;
+
 import org.freedesktop.dbus.exceptions.DBusExecutionException;
 import org.whispersystems.libsignal.util.Pair;
 import org.whispersystems.libsignal.util.guava.Optional;
@@ -25,6 +26,7 @@ import org.whispersystems.signalservice.api.groupsv2.GroupLinkNotActiveException
 import org.whispersystems.signalservice.api.messages.SendMessageResult;
 import org.whispersystems.signalservice.api.push.exceptions.UnregisteredUserException;
 import org.whispersystems.signalservice.api.util.InvalidNumberException;
+import org.whispersystems.signalservice.internal.contacts.crypto.UnauthenticatedResponseException;
 
 import java.io.File;
 import java.io.IOException;
@@ -413,6 +415,28 @@ public class DbusSignalImpl implements Signal {
         }
     }
 
+    @Override
+    public void removePin() {
+        try {
+            m.setRegistrationLockPin(Optional.absent());
+        } catch (UnauthenticatedResponseException e) {
+            throw new Error.Failure("Remove pin failed with unauthenticated response: " + e.getMessage());
+        } catch (IOException e) {
+            throw new Error.Failure("Remove pin error: " + e.getMessage());
+        }
+    }
+
+    @Override
+    public void setPin(String registrationLockPin)  {
+        try {
+            m.setRegistrationLockPin(Optional.of(registrationLockPin));
+        } catch (UnauthenticatedResponseException e) {
+            throw new Error.Failure("Set pin error failed with unauthenticated response: " + e.getMessage());
+        } catch (IOException e) {
+            throw new Error.Failure("Set pin error: " + e.getMessage());
+        }
+    }
+
     // Provide option to query a version string in order to react on potential
     // future interface changes
     @Override