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)