diff --git a/src/api/api.go b/src/api/api.go index 883bc9b..b6c9536 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -57,6 +57,7 @@ type UpdateGroupRequest struct { Description *string `json:"description"` Name *string `json:"name"` ExpirationTime *int `json:"expiration_time"` + GroupLinkState *string `json:"group_link" enums:"disabled,enabled,enabled-with-approval"` } type ChangeGroupMembersRequest struct { @@ -1521,7 +1522,18 @@ func (a *Api) UpdateGroup(c *gin.Context) { return } - err = a.signalClient.UpdateGroup(number, internalGroupId, req.Base64Avatar, req.Description, req.Name, req.ExpirationTime) + var groupLinkState *client.GroupLinkState = nil + if req.GroupLinkState != nil { + if !utils.StringInSlice(*req.GroupLinkState, []string{"enabled", "enabled-with-approval", "disabled"}) { + c.JSON(400, Error{Msg: "Invalid group link provided - only 'enabled', 'enabled-with-approval' and 'disabled' allowed!"}) + return + } + var gLinkState client.GroupLinkState + gLinkStateVal := gLinkState.FromString(*req.GroupLinkState) + groupLinkState = &gLinkStateVal + } + + err = a.signalClient.UpdateGroup(number, internalGroupId, req.Base64Avatar, req.Description, req.Name, req.ExpirationTime, groupLinkState) if err != nil { c.JSON(400, Error{Msg: err.Error()}) return diff --git a/src/client/client.go b/src/client/client.go index 35077b3..79246aa 100644 --- a/src/client/client.go +++ b/src/client/client.go @@ -1745,7 +1745,8 @@ func (s *SignalClient) QuitGroup(number string, groupId string) error { return err } -func (s *SignalClient) UpdateGroup(number string, groupId string, base64Avatar *string, groupDescription *string, groupName *string, expirationTime *int) error { +func (s *SignalClient) UpdateGroup(number string, groupId string, base64Avatar *string, groupDescription *string, + groupName *string, expirationTime *int, groupLinkState *GroupLinkState) error { var err error var avatarTmpPath string = "" if base64Avatar != nil { @@ -1790,6 +1791,7 @@ func (s *SignalClient) UpdateGroup(number string, groupId string, base64Avatar * Description *string `json:"description,omitempty"` Name *string `json:"name,omitempty"` Expiration int `json:"expiration,omitempty"` + Link string `json:"link,omitempty"` } request := Request{GroupId: groupId} @@ -1804,6 +1806,10 @@ func (s *SignalClient) UpdateGroup(number string, groupId string, base64Avatar * request.Expiration = *expirationTime } + if groupLinkState != nil { + request.Link = (*groupLinkState).String() + } + jsonRpc2Client, err := s.getJsonRpc2Client() if err != nil { return err @@ -1827,6 +1833,10 @@ func (s *SignalClient) UpdateGroup(number string, groupId string, base64Avatar * cmd = append(cmd, []string{"--expiration", strconv.Itoa(*expirationTime)}...) } + if groupLinkState != nil { + cmd = append(cmd, []string{"--link", (*groupLinkState).String()}...) + } + _, err = s.cliClient.Execute(true, cmd, "") }