]> nmode's Git Repositories - signal-cli/commitdiff
Implement dbus support for listIdentities
authorAsamK <asamk@gmx.de>
Fri, 19 Apr 2024 15:07:18 +0000 (17:07 +0200)
committerAsamK <asamk@gmx.de>
Fri, 19 Apr 2024 15:07:18 +0000 (17:07 +0200)
Fixes #195

graalvm-config-dir/proxy-config.json
graalvm-config-dir/reflect-config.json
lib/src/main/java/org/asamk/signal/manager/api/Identity.java
lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java
src/main/java/org/asamk/Signal.java
src/main/java/org/asamk/signal/commands/ListIdentitiesCommand.java
src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java
src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java

index d9a734a8a205249115cc85795fade390875eefdc..1a97b30a2cd94780ee935722e29bfb1671755729 100644 (file)
@@ -14,6 +14,9 @@
   {
     "interfaces":["org.asamk.Signal$Group"]
   },
   {
     "interfaces":["org.asamk.Signal$Group"]
   },
+  {
+    "interfaces":["org.asamk.Signal$Identity"]
+  },
   {
     "interfaces":["org.asamk.SignalControl"]
   },
   {
     "interfaces":["org.asamk.SignalControl"]
   },
index c6e85760e6da37e061261998ccef8979d671fd54..67252c9d44fc3779ba5e182df595512e5f47a7e4 100644 (file)
   "name":"org.asamk.Signal",
   "allDeclaredMethods":true,
   "allDeclaredClasses":true,
   "name":"org.asamk.Signal",
   "allDeclaredMethods":true,
   "allDeclaredClasses":true,
-  "methods":[{"name":"getContactName","parameterTypes":["java.lang.String"] }, {"name":"getDevice","parameterTypes":["long"] }, {"name":"getGroup","parameterTypes":["byte[]"] }, {"name":"getSelfNumber","parameterTypes":[] }, {"name":"getThisDevice","parameterTypes":[] }, {"name":"listDevices","parameterTypes":[] }, {"name":"sendGroupMessageReaction","parameterTypes":["java.lang.String","boolean","java.lang.String","long","byte[]"] }, {"name":"sendMessage","parameterTypes":["java.lang.String","java.util.List","java.lang.String"] }, {"name":"sendMessage","parameterTypes":["java.lang.String","java.util.List","java.util.List"] }, {"name":"sendMessageReaction","parameterTypes":["java.lang.String","boolean","java.lang.String","long","java.util.List"] }, {"name":"subscribeReceive","parameterTypes":[] }, {"name":"unsubscribeReceive","parameterTypes":[] }, {"name":"version","parameterTypes":[] }]
+  "methods":[{"name":"getContactName","parameterTypes":["java.lang.String"] }, {"name":"getDevice","parameterTypes":["long"] }, {"name":"getGroup","parameterTypes":["byte[]"] }, {"name":"getSelfNumber","parameterTypes":[] }, {"name":"getThisDevice","parameterTypes":[] }, {"name":"listDevices","parameterTypes":[] }, {"name":"listIdentities","parameterTypes":[] }, {"name":"sendGroupMessageReaction","parameterTypes":["java.lang.String","boolean","java.lang.String","long","byte[]"] }, {"name":"sendMessage","parameterTypes":["java.lang.String","java.util.List","java.lang.String"] }, {"name":"sendMessage","parameterTypes":["java.lang.String","java.util.List","java.util.List"] }, {"name":"sendMessageReaction","parameterTypes":["java.lang.String","boolean","java.lang.String","long","java.util.List"] }, {"name":"subscribeReceive","parameterTypes":[] }, {"name":"unsubscribeReceive","parameterTypes":[] }, {"name":"version","parameterTypes":[] }]
 },
 {
   "name":"org.asamk.Signal$Configuration",
 },
 {
   "name":"org.asamk.Signal$Configuration",
 },
 {
   "name":"org.asamk.Signal$StructIdentity",
 },
 {
   "name":"org.asamk.Signal$StructIdentity",
-  "allDeclaredFields":true
+  "allDeclaredFields":true,
+  "queryAllDeclaredConstructors":true,
+  "methods":[{"name":"<init>","parameterTypes":["org.freedesktop.dbus.DBusPath","java.lang.String","java.lang.String"] }]
 },
 {
   "name":"org.asamk.Signal$SyncMessageReceived",
 },
 {
   "name":"org.asamk.Signal$SyncMessageReceived",
index 5d43aacc11f93a316dbcb6482d7ccdcec7988d06..91f4675090ad56159fff67351166c63db17310d1 100644 (file)
@@ -1,17 +1,10 @@
 package org.asamk.signal.manager.api;
 
 package org.asamk.signal.manager.api;
 
-import org.signal.libsignal.protocol.IdentityKey;
-
 public record Identity(
         RecipientAddress recipient,
 public record Identity(
         RecipientAddress recipient,
-        IdentityKey identityKey,
+        byte[] fingerprint,
         String safetyNumber,
         byte[] scannableSafetyNumber,
         TrustLevel trustLevel,
         long dateAddedTimestamp
         String safetyNumber,
         byte[] scannableSafetyNumber,
         TrustLevel trustLevel,
         long dateAddedTimestamp
-) {
-
-    public byte[] getFingerprint() {
-        return identityKey.getPublicKey().serialize();
-    }
-}
+) {}
index 8b32b19bd9aa0755725b44468645c287b4092575..ef2e52e312ce3b754172ea684660282877666479 100644 (file)
@@ -1366,7 +1366,7 @@ public class ManagerImpl implements Manager {
         final var scannableFingerprint = context.getIdentityHelper()
                 .computeSafetyNumberForScanning(identityInfo.getServiceId(), identityInfo.getIdentityKey());
         return new Identity(address.toApiRecipientAddress(),
         final var scannableFingerprint = context.getIdentityHelper()
                 .computeSafetyNumberForScanning(identityInfo.getServiceId(), identityInfo.getIdentityKey());
         return new Identity(address.toApiRecipientAddress(),
-                identityInfo.getIdentityKey(),
+                identityInfo.getIdentityKey().getPublicKey().serialize(),
                 context.getIdentityHelper()
                         .computeSafetyNumber(identityInfo.getServiceId(), identityInfo.getIdentityKey()),
                 scannableFingerprint == null ? null : scannableFingerprint.getSerialized(),
                 context.getIdentityHelper()
                         .computeSafetyNumber(identityInfo.getServiceId(), identityInfo.getIdentityKey()),
                 scannableFingerprint == null ? null : scannableFingerprint.getSerialized(),
index 1fab81029d3c5111f49792f31686c0a6c4e5baec..1d71565969d696fdf557e059a595c2cb429744aa 100644 (file)
@@ -642,7 +642,7 @@ public interface Signal extends DBusInterface {
     @DBusProperty(name = "Fingerprint", type = Byte[].class, access = DBusProperty.Access.READ)
     @DBusProperty(name = "SafetyNumber", type = String.class, access = DBusProperty.Access.READ)
     @DBusProperty(name = "TrustLevel", type = String.class, access = DBusProperty.Access.READ)
     @DBusProperty(name = "Fingerprint", type = Byte[].class, access = DBusProperty.Access.READ)
     @DBusProperty(name = "SafetyNumber", type = String.class, access = DBusProperty.Access.READ)
     @DBusProperty(name = "TrustLevel", type = String.class, access = DBusProperty.Access.READ)
-    @DBusProperty(name = "AddedDate", type = Integer.class, access = DBusProperty.Access.READ)
+    @DBusProperty(name = "AddedDate", type = Long.class, access = DBusProperty.Access.READ)
     @DBusProperty(name = "ScannableSafetyNumber", type = Byte[].class, access = DBusProperty.Access.READ)
     interface Identity extends DBusInterface, Properties {
 
     @DBusProperty(name = "ScannableSafetyNumber", type = Byte[].class, access = DBusProperty.Access.READ)
     interface Identity extends DBusInterface, Properties {
 
index 3c4e7a19de8ef5796e2eae6368a1e8020bcdb0cf..6b49a81207bf3371bf9ea1022d874c49ffc4cce7 100644 (file)
@@ -34,7 +34,7 @@ public class ListIdentitiesCommand implements JsonRpcLocalCommand {
                 theirId.recipient().getLegacyIdentifier(),
                 theirId.trustLevel(),
                 DateUtils.formatTimestamp(theirId.dateAddedTimestamp()),
                 theirId.recipient().getLegacyIdentifier(),
                 theirId.trustLevel(),
                 DateUtils.formatTimestamp(theirId.dateAddedTimestamp()),
-                Hex.toString(theirId.getFingerprint()),
+                Hex.toString(theirId.fingerprint()),
                 Util.formatSafetyNumber(theirId.safetyNumber()));
     }
 
                 Util.formatSafetyNumber(theirId.safetyNumber()));
     }
 
@@ -70,7 +70,7 @@ public class ListIdentitiesCommand implements JsonRpcLocalCommand {
                     var scannableSafetyNumber = id.scannableSafetyNumber();
                     return new JsonIdentity(address.number().orElse(null),
                             address.uuid().map(UUID::toString).orElse(null),
                     var scannableSafetyNumber = id.scannableSafetyNumber();
                     return new JsonIdentity(address.number().orElse(null),
                             address.uuid().map(UUID::toString).orElse(null),
-                            Hex.toString(id.getFingerprint()),
+                            Hex.toString(id.fingerprint()),
                             safetyNumber,
                             scannableSafetyNumber == null
                                     ? null
                             safetyNumber,
                             scannableSafetyNumber == null
                                     ? null
index 4573b861734a05bd1ac6570c0404b78393d18f41..574f68c6bb1a56c05cb9ecc74cef9302d7aacfcf 100644 (file)
@@ -41,6 +41,7 @@ import org.asamk.signal.manager.api.StickerPack;
 import org.asamk.signal.manager.api.StickerPackId;
 import org.asamk.signal.manager.api.StickerPackInvalidException;
 import org.asamk.signal.manager.api.StickerPackUrl;
 import org.asamk.signal.manager.api.StickerPackId;
 import org.asamk.signal.manager.api.StickerPackInvalidException;
 import org.asamk.signal.manager.api.StickerPackUrl;
+import org.asamk.signal.manager.api.TrustLevel;
 import org.asamk.signal.manager.api.TypingAction;
 import org.asamk.signal.manager.api.UnregisteredRecipientException;
 import org.asamk.signal.manager.api.UpdateGroup;
 import org.asamk.signal.manager.api.TypingAction;
 import org.asamk.signal.manager.api.UnregisteredRecipientException;
 import org.asamk.signal.manager.api.UpdateGroup;
@@ -759,12 +760,26 @@ public class DbusManagerImpl implements Manager {
 
     @Override
     public List<Identity> getIdentities() {
 
     @Override
     public List<Identity> getIdentities() {
-        throw new UnsupportedOperationException();
+        final var identities = signal.listIdentities();
+        return identities.stream().map(Signal.StructIdentity::getObjectPath).map(this::getIdentity).toList();
     }
 
     @Override
     public List<Identity> getIdentities(final RecipientIdentifier.Single recipient) {
     }
 
     @Override
     public List<Identity> getIdentities(final RecipientIdentifier.Single recipient) {
-        throw new UnsupportedOperationException();
+        final var path = signal.getIdentity(recipient.getIdentifier());
+        return List.of(getIdentity(path));
+    }
+
+    private Identity getIdentity(final DBusPath identityPath) {
+        final var group = getRemoteObject(identityPath, Signal.Identity.class).GetAll("org.asamk.Signal.Identity");
+        final var aci = (String) group.get("Uuid").getValue();
+        final var number = (String) group.get("Number").getValue();
+        return new Identity(new RecipientAddress(aci, null, number, null),
+                (byte[]) group.get("Fingerprint").getValue(),
+                (String) group.get("SafetyNumber").getValue(),
+                (byte[]) group.get("ScannableSafetyNumber").getValue(),
+                TrustLevel.valueOf((String) group.get("TrustLevel").getValue()),
+                (Long) group.get("AddedDate").getValue());
     }
 
     @Override
     }
 
     @Override
index 65c210fc851d80718a7d2ebedc6ea1c66c274a93..fae0c0a551446a4f7de0d1e362d40fd76086800e 100644 (file)
@@ -1105,7 +1105,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
                     List.of(new DbusProperty<>("Number", () -> identity.recipient().number().orElse("")),
                             new DbusProperty<>("Uuid",
                                     () -> identity.recipient().uuid().map(UUID::toString).orElse("")),
                     List.of(new DbusProperty<>("Number", () -> identity.recipient().number().orElse("")),
                             new DbusProperty<>("Uuid",
                                     () -> identity.recipient().uuid().map(UUID::toString).orElse("")),
-                            new DbusProperty<>("Fingerprint", identity::getFingerprint),
+                            new DbusProperty<>("Fingerprint", identity::fingerprint),
                             new DbusProperty<>("SafetyNumber", identity::safetyNumber),
                             new DbusProperty<>("ScannableSafetyNumber", identity::scannableSafetyNumber),
                             new DbusProperty<>("TrustLevel", identity::trustLevel),
                             new DbusProperty<>("SafetyNumber", identity::safetyNumber),
                             new DbusProperty<>("ScannableSafetyNumber", identity::scannableSafetyNumber),
                             new DbusProperty<>("TrustLevel", identity::trustLevel),