From 6bfcba49406a3ac4f3d7fee51ca46c17e1a74680 Mon Sep 17 00:00:00 2001 From: AsamK Date: Tue, 1 Dec 2020 19:06:41 +0100 Subject: [PATCH 01/15] Only update account attributes if already registered --- src/main/java/org/asamk/signal/manager/Manager.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/asamk/signal/manager/Manager.java b/src/main/java/org/asamk/signal/manager/Manager.java index 56376f0e..3eab843e 100644 --- a/src/main/java/org/asamk/signal/manager/Manager.java +++ b/src/main/java/org/asamk/signal/manager/Manager.java @@ -250,13 +250,15 @@ public class Manager implements Closeable { Manager m = new Manager(account, pathConfig, serviceConfiguration, userAgent); m.migrateLegacyConfigs(); - m.updateAccountAttributes(); + if (m.isRegistered()) { + m.updateAccountAttributes(); + } return m; } private void migrateLegacyConfigs() { - if (account.getProfileKey() == null) { + if (account.getProfileKey() == null && isRegistered()) { // Old config file, creating new profile key account.setProfileKey(KeyUtils.createProfileKey()); account.save(); From d267974223294b9ac08491999d8f2bece2b80c54 Mon Sep 17 00:00:00 2001 From: AsamK Date: Fri, 4 Dec 2020 19:51:36 +0100 Subject: [PATCH 02/15] Show pending and requesting members of v2 groups --- .../signal/commands/ListGroupsCommand.java | 17 ++++++++++++++-- .../org/asamk/signal/manager/Manager.java | 4 +--- .../signal/storage/groups/GroupInfo.java | 10 ++++++++++ .../signal/storage/groups/GroupInfoV2.java | 20 +++++++++++++++++++ 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/asamk/signal/commands/ListGroupsCommand.java b/src/main/java/org/asamk/signal/commands/ListGroupsCommand.java index 9e13685e..d6297f9d 100644 --- a/src/main/java/org/asamk/signal/commands/ListGroupsCommand.java +++ b/src/main/java/org/asamk/signal/commands/ListGroupsCommand.java @@ -22,8 +22,21 @@ public class ListGroupsCommand implements LocalCommand { .map(m::resolveSignalServiceAddress) .map(SignalServiceAddress::getLegacyIdentifier) .collect(Collectors.toSet()); - System.out.println(String.format("Id: %s Name: %s Active: %s Blocked: %b Members: %s", - Base64.encodeBytes(group.groupId), group.getTitle(), group.isMember(m.getSelfAddress()), group.isBlocked(), members)); + + Set pendingMembers = group.getPendingMembers() + .stream() + .map(m::resolveSignalServiceAddress) + .map(SignalServiceAddress::getLegacyIdentifier) + .collect(Collectors.toSet()); + + Set requestingMembers = group.getRequestingMembers() + .stream() + .map(m::resolveSignalServiceAddress) + .map(SignalServiceAddress::getLegacyIdentifier) + .collect(Collectors.toSet()); + + System.out.println(String.format("Id: %s Name: %s Active: %s Blocked: %b Members: %s Pending members: %s Requesting members: %s", + Base64.encodeBytes(group.groupId), group.getTitle(), group.isMember(m.getSelfAddress()), group.isBlocked(), members, pendingMembers, requestingMembers)); } else { System.out.println(String.format("Id: %s Name: %s Active: %s Blocked: %b", Base64.encodeBytes(group.groupId), group.getTitle(), group.isMember(m.getSelfAddress()), group.isBlocked())); diff --git a/src/main/java/org/asamk/signal/manager/Manager.java b/src/main/java/org/asamk/signal/manager/Manager.java index 3eab843e..ba499093 100644 --- a/src/main/java/org/asamk/signal/manager/Manager.java +++ b/src/main/java/org/asamk/signal/manager/Manager.java @@ -250,9 +250,6 @@ public class Manager implements Closeable { Manager m = new Manager(account, pathConfig, serviceConfiguration, userAgent); m.migrateLegacyConfigs(); - if (m.isRegistered()) { - m.updateAccountAttributes(); - } return m; } @@ -290,6 +287,7 @@ public class Manager implements Closeable { account.setUuid(accountManager.getOwnUuid()); account.save(); } + updateAccountAttributes(); } } diff --git a/src/main/java/org/asamk/signal/storage/groups/GroupInfo.java b/src/main/java/org/asamk/signal/storage/groups/GroupInfo.java index db4f4690..d24a2694 100644 --- a/src/main/java/org/asamk/signal/storage/groups/GroupInfo.java +++ b/src/main/java/org/asamk/signal/storage/groups/GroupInfo.java @@ -23,6 +23,16 @@ public abstract class GroupInfo { @JsonIgnore public abstract Set getMembers(); + @JsonIgnore + public Set getPendingMembers() { + return Set.of(); + } + + @JsonIgnore + public Set getRequestingMembers() { + return Set.of(); + } + @JsonIgnore public abstract boolean isBlocked(); diff --git a/src/main/java/org/asamk/signal/storage/groups/GroupInfoV2.java b/src/main/java/org/asamk/signal/storage/groups/GroupInfoV2.java index 5e3115a1..823912d9 100644 --- a/src/main/java/org/asamk/signal/storage/groups/GroupInfoV2.java +++ b/src/main/java/org/asamk/signal/storage/groups/GroupInfoV2.java @@ -51,6 +51,26 @@ public class GroupInfoV2 extends GroupInfo { .collect(Collectors.toSet()); } + @Override + public Set getPendingMembers() { + if (this.group == null) { + return Collections.emptySet(); + } + return group.getPendingMembersList().stream() + .map(m -> new SignalServiceAddress(UuidUtil.parseOrThrow(m.getUuid().toByteArray()), null)) + .collect(Collectors.toSet()); + } + + @Override + public Set getRequestingMembers() { + if (this.group == null) { + return Collections.emptySet(); + } + return group.getRequestingMembersList().stream() + .map(m -> new SignalServiceAddress(UuidUtil.parseOrThrow(m.getUuid().toByteArray()), null)) + .collect(Collectors.toSet()); + } + @Override public boolean isBlocked() { return blocked; From 4f2261e86f493a9c8954c02c52ddaa9a46490d20 Mon Sep 17 00:00:00 2001 From: AsamK Date: Mon, 7 Dec 2020 21:06:07 +0100 Subject: [PATCH 03/15] Implement creating V2 Groups --- .idea/codeStyles/Project.xml | 13 + .../org/asamk/signal/dbus/DbusSignalImpl.java | 25 +- .../org/asamk/signal/manager/KeyUtils.java | 4 - .../org/asamk/signal/manager/Manager.java | 961 ++++++++++++------ .../signal/manager/helper/GroupHelper.java | 106 ++ .../manager/helper/MessagePipeProvider.java | 8 + .../helper/MessageReceiverProvider.java | 8 + .../signal/manager/helper/ProfileHelper.java | 135 +++ .../helper/ProfileKeyCredentialProvider.java | 9 + .../manager/helper/ProfileKeyProvider.java | 9 + .../manager/helper/ProfileProvider.java | 9 + .../manager/helper/SelfAddressProvider.java | 8 + .../helper/SelfProfileKeyProvider.java | 8 + .../helper/UnidentifiedAccessHelper.java | 102 ++ .../helper/UnidentifiedAccessProvider.java | 10 + ...tifiedAccessSenderCertificateProvider.java | 6 + .../signal/storage/groups/JsonGroupStore.java | 13 +- .../signal/storage/profiles/ProfileStore.java | 53 +- .../storage/profiles/SignalProfileEntry.java | 26 +- 19 files changed, 1157 insertions(+), 356 deletions(-) create mode 100644 src/main/java/org/asamk/signal/manager/helper/GroupHelper.java create mode 100644 src/main/java/org/asamk/signal/manager/helper/MessagePipeProvider.java create mode 100644 src/main/java/org/asamk/signal/manager/helper/MessageReceiverProvider.java create mode 100644 src/main/java/org/asamk/signal/manager/helper/ProfileHelper.java create mode 100644 src/main/java/org/asamk/signal/manager/helper/ProfileKeyCredentialProvider.java create mode 100644 src/main/java/org/asamk/signal/manager/helper/ProfileKeyProvider.java create mode 100644 src/main/java/org/asamk/signal/manager/helper/ProfileProvider.java create mode 100644 src/main/java/org/asamk/signal/manager/helper/SelfAddressProvider.java create mode 100644 src/main/java/org/asamk/signal/manager/helper/SelfProfileKeyProvider.java create mode 100644 src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessHelper.java create mode 100644 src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessProvider.java create mode 100644 src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessSenderCertificateProvider.java diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index a9284fc3..5efac8c1 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -50,10 +50,23 @@