From 6ec00f4589320c24ff54bee45bf69bdf267b3676 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 6 Sep 2023 00:59:14 -0400 Subject: [PATCH 1/2] Add the ability to refresh a group. --- .gitignore | 1 + src/api/api.go | 32 ++++++++++++++++++++++++++++++++ src/client/client.go | 18 ++++++++++++++++++ src/main.go | 1 + 4 files changed, 52 insertions(+) diff --git a/.gitignore b/.gitignore index 4d82527..8da7d43 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ signal-cli-config src/main src/signal-cli-rest-api +.idea/ diff --git a/src/api/api.go b/src/api/api.go index f105f4c..bae51bf 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -1229,6 +1229,38 @@ func (a *Api) QuitGroup(c *gin.Context) { c.Status(http.StatusNoContent) } +// @Summary Refresh the state of a Signal Group. +// @Tags Groups +// @Description Refresh the state of a Signal Group. +// @Accept json +// @Produce json +// @Success 204 {string} OK +// @Failure 400 {object} Error +// @Param number path string true "Registered Phone Number" +// @Param groupid path string true "Group ID" +// @Router /v1/groups/{number}/{groupid}/refresh [post] +func (a *Api) RefreshGroup(c *gin.Context) { + number := c.Param("number") + if number == "" { + c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) + return + } + + groupId := c.Param("groupid") + internalGroupId, err := client.ConvertGroupIdToInternalGroupId(groupId) + if err != nil { + c.JSON(400, Error{Msg: err.Error()}) + return + } + + err = a.signalClient.RefreshGroup(number, internalGroupId) + if err != nil { + c.JSON(400, Error{Msg: err.Error()}) + return + } + c.Status(http.StatusNoContent) +} + // @Summary Send a reaction. // @Tags Reactions // @Description React to a message diff --git a/src/client/client.go b/src/client/client.go index beb5e6d..cc1b1e6 100644 --- a/src/client/client.go +++ b/src/client/client.go @@ -1220,6 +1220,24 @@ func (s *SignalClient) QuitGroup(number string, groupId string) error { return err } +func (s *SignalClient) RefreshGroup(number string, groupId string) error { + var err error + if s.signalCliMode == JsonRpc { + type Request struct { + GroupId string `json:"groupId"` + } + request := Request{GroupId: groupId} + jsonRpc2Client, err := s.getJsonRpc2Client(number) + if err != nil { + return err + } + _, err = jsonRpc2Client.getRaw("updateGroup", request) + } else { + _, err = s.cliClient.Execute(true, []string{"--config", s.signalCliConfig, "-a", number, "updateGroup", "-g", groupId}, "") + } + return err +} + func (s *SignalClient) SendReaction(number string, recipient string, emoji string, target_author string, timestamp int64, remove bool) error { // see https://github.com/AsamK/signal-cli/blob/master/man/signal-cli.1.adoc#sendreaction var err error diff --git a/src/main.go b/src/main.go index 6ce5521..924db10 100644 --- a/src/main.go +++ b/src/main.go @@ -186,6 +186,7 @@ func main() { groups.POST(":number/:groupid/block", api.BlockGroup) groups.POST(":number/:groupid/join", api.JoinGroup) groups.POST(":number/:groupid/quit", api.QuitGroup) + groups.POST(":number/:groupid/refresh", api.RefreshGroup) groups.POST(":number/:groupid/members", api.AddMembersToGroup) groups.DELETE(":number/:groupid/members", api.RemoveMembersFromGroup) groups.POST(":number/:groupid/admins", api.AddAdminsToGroup) From 4eaf9a971b93eb88daf2dedaab44f4284b6b4646 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Sat, 9 Sep 2023 08:00:33 -0400 Subject: [PATCH 2/2] Update to a PUT request. --- src/api/api.go | 10 +++++----- src/client/client.go | 2 +- src/main.go | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/api/api.go b/src/api/api.go index bae51bf..e7439ba 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -1229,17 +1229,17 @@ func (a *Api) QuitGroup(c *gin.Context) { c.Status(http.StatusNoContent) } -// @Summary Refresh the state of a Signal Group. +// @Summary Update the state of a Signal Group. // @Tags Groups -// @Description Refresh the state of a Signal Group. +// @Description Update the state of a Signal Group. // @Accept json // @Produce json // @Success 204 {string} OK // @Failure 400 {object} Error // @Param number path string true "Registered Phone Number" // @Param groupid path string true "Group ID" -// @Router /v1/groups/{number}/{groupid}/refresh [post] -func (a *Api) RefreshGroup(c *gin.Context) { +// @Router /v1/groups/{number}/{groupid} [put] +func (a *Api) UpdateGroup(c *gin.Context) { number := c.Param("number") if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1253,7 +1253,7 @@ func (a *Api) RefreshGroup(c *gin.Context) { return } - err = a.signalClient.RefreshGroup(number, internalGroupId) + err = a.signalClient.UpdateGroup(number, internalGroupId) if err != nil { c.JSON(400, Error{Msg: err.Error()}) return diff --git a/src/client/client.go b/src/client/client.go index cc1b1e6..65b1ddc 100644 --- a/src/client/client.go +++ b/src/client/client.go @@ -1220,7 +1220,7 @@ func (s *SignalClient) QuitGroup(number string, groupId string) error { return err } -func (s *SignalClient) RefreshGroup(number string, groupId string) error { +func (s *SignalClient) UpdateGroup(number string, groupId string) error { var err error if s.signalCliMode == JsonRpc { type Request struct { diff --git a/src/main.go b/src/main.go index 924db10..7cd512b 100644 --- a/src/main.go +++ b/src/main.go @@ -186,7 +186,7 @@ func main() { groups.POST(":number/:groupid/block", api.BlockGroup) groups.POST(":number/:groupid/join", api.JoinGroup) groups.POST(":number/:groupid/quit", api.QuitGroup) - groups.POST(":number/:groupid/refresh", api.RefreshGroup) + groups.PUT(":number/:groupid", api.UpdateGroup) groups.POST(":number/:groupid/members", api.AddMembersToGroup) groups.DELETE(":number/:groupid/members", api.RemoveMembersFromGroup) groups.POST(":number/:groupid/admins", api.AddAdminsToGroup)