From 23c53382c2f9e6ff9cf958fec82e5c9ba7db13ed Mon Sep 17 00:00:00 2001 From: Bernhard B Date: Sat, 7 Feb 2026 00:15:21 +0100 Subject: [PATCH] return group permissions in groups request see #781 --- src/api/api.go | 30 +++++++---------- src/client/client.go | 59 ++++++++++++++++++++++------------ src/datastructs/datastructs.go | 14 +++++--- 3 files changed, 60 insertions(+), 43 deletions(-) diff --git a/src/api/api.go b/src/api/api.go index 07cc3bd..c4c0731 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -38,28 +38,22 @@ type UpdateContactRequest struct { ExpirationInSeconds *int `json:"expiration_in_seconds"` } -type GroupPermissions struct { - AddMembers string `json:"add_members" enums:"only-admins,every-member"` - EditGroup string `json:"edit_group" enums:"only-admins,every-member"` - SendMessages string `json:"send_messages" enums:"only-admins,every-member"` -} - type CreateGroupRequest struct { - Name string `json:"name"` - Members []string `json:"members"` - Description string `json:"description"` - Permissions GroupPermissions `json:"permissions"` - GroupLinkState string `json:"group_link" enums:"disabled,enabled,enabled-with-approval"` - ExpirationTime *int `json:"expiration_time"` + Name string `json:"name"` + Members []string `json:"members"` + Description string `json:"description"` + Permissions ds.GroupPermissions `json:"permissions"` + GroupLinkState string `json:"group_link" enums:"disabled,enabled,enabled-with-approval"` + ExpirationTime *int `json:"expiration_time"` } type UpdateGroupRequest struct { - Base64Avatar *string `json:"base64_avatar"` - Description *string `json:"description"` - Name *string `json:"name"` - ExpirationTime *int `json:"expiration_time"` - GroupLinkState *string `json:"group_link" enums:"disabled,enabled,enabled-with-approval"` - Permissions *GroupPermissions `json:"permissions"` + Base64Avatar *string `json:"base64_avatar"` + Description *string `json:"description"` + Name *string `json:"name"` + ExpirationTime *int `json:"expiration_time"` + GroupLinkState *string `json:"group_link" enums:"disabled,enabled,enabled-with-approval"` + Permissions *ds.GroupPermissions `json:"permissions"` } type ChangeGroupMembersRequest struct { diff --git a/src/client/client.go b/src/client/client.go index 84337ed..9ec41f8 100644 --- a/src/client/client.go +++ b/src/client/client.go @@ -113,16 +113,17 @@ func (g GroupLinkState) FromString(input string) GroupLinkState { } type GroupEntry struct { - Name string `json:"name"` - Description string `json:"description"` - Id string `json:"id"` - InternalId string `json:"internal_id"` - Members []string `json:"members"` - Blocked bool `json:"blocked"` - PendingInvites []string `json:"pending_invites"` - PendingRequests []string `json:"pending_requests"` - InviteLink string `json:"invite_link"` - Admins []string `json:"admins"` + Name string `json:"name"` + Description string `json:"description"` + Id string `json:"id"` + InternalId string `json:"internal_id"` + Members []string `json:"members"` + Blocked bool `json:"blocked"` + PendingInvites []string `json:"pending_invites"` + PendingRequests []string `json:"pending_requests"` + InviteLink string `json:"invite_link"` + Admins []string `json:"admins"` + Permissions ds.GroupPermissions `json:"permissions"` } type IdentityEntry struct { @@ -145,17 +146,20 @@ type SignalCliGroupAdmin struct { } type SignalCliGroupEntry struct { - Name string `json:"name"` - Description string `json:"description"` - Id string `json:"id"` - IsMember bool `json:"isMember"` - IsBlocked bool `json:"isBlocked"` - Members []SignalCliGroupMember `json:"members"` - PendingMembers []SignalCliGroupMember `json:"pendingMembers"` - RequestingMembers []SignalCliGroupMember `json:"requestingMembers"` - GroupInviteLink string `json:"groupInviteLink"` - Admins []SignalCliGroupAdmin `json:"admins"` - Uuid string `json:"uuid"` + Name string `json:"name"` + Description string `json:"description"` + Id string `json:"id"` + IsMember bool `json:"isMember"` + IsBlocked bool `json:"isBlocked"` + Members []SignalCliGroupMember `json:"members"` + PendingMembers []SignalCliGroupMember `json:"pendingMembers"` + RequestingMembers []SignalCliGroupMember `json:"requestingMembers"` + GroupInviteLink string `json:"groupInviteLink"` + Admins []SignalCliGroupAdmin `json:"admins"` + Uuid string `json:"uuid"` + PermissionEditDetails string `json:"permissionEditDetails"` + PermissionAddMember string `json:"permissionAddMember"` + PermissionSendMessage string `json:"permissionSendMessage"` } type SignalCliIdentityEntry struct { @@ -271,6 +275,16 @@ func getStringInBetween(str string, start string, end string) (result string) { return str[i : i+j] } +func signalCliGroupPermissionToRestApiGroupPermission(permission string) string { + if permission == "EVERY_MEMBER" { + return "every-member" + } else if permission == "ONLY_ADMINS" { + return "only-admins" + } + + return "" +} + func parseWhitespaceDelimitedKeyValueStringList(in string, keys []string) []map[string]string { l := []map[string]string{} lines := strings.Split(in, "\n") @@ -1314,6 +1328,9 @@ func (s *SignalClient) GetGroups(number string) ([]GroupEntry, error) { groupEntry.Id = convertInternalGroupIdToGroupId(signalCliGroupEntry.Id) groupEntry.Blocked = signalCliGroupEntry.IsBlocked groupEntry.Description = signalCliGroupEntry.Description + groupEntry.Permissions.SendMessages = signalCliGroupPermissionToRestApiGroupPermission(signalCliGroupEntry.PermissionSendMessage) + groupEntry.Permissions.EditGroup = signalCliGroupPermissionToRestApiGroupPermission(signalCliGroupEntry.PermissionSendMessage) + groupEntry.Permissions.AddMembers = signalCliGroupPermissionToRestApiGroupPermission(signalCliGroupEntry.PermissionAddMember) members := []string{} for _, val := range signalCliGroupEntry.Members { diff --git a/src/datastructs/datastructs.go b/src/datastructs/datastructs.go index 824f4be..4046111 100644 --- a/src/datastructs/datastructs.go +++ b/src/datastructs/datastructs.go @@ -28,10 +28,10 @@ type SendMessageRecipient struct { } type LinkPreviewType struct { - Url string `json:"url"` - Title string `json:"title"` - Description string `json:"description"` - Base64Thumbnail string `json:"base64_thumbnail"` + Url string `json:"url"` + Title string `json:"title"` + Description string `json:"description"` + Base64Thumbnail string `json:"base64_thumbnail"` } type SignalCliSendRequest struct { @@ -52,3 +52,9 @@ type SignalCliSendRequest struct { LinkPreview *LinkPreviewType ViewOnce *bool } + +type GroupPermissions struct { + AddMembers string `json:"add_members" enums:"only-admins,every-member"` + EditGroup string `json:"edit_group" enums:"only-admins,every-member"` + SendMessages string `json:"send_messages" enums:"only-admins,every-member"` +}