diff --git a/src/api/api.go b/src/api/api.go index 811e584..a7be4f8 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -70,6 +70,7 @@ type RegisterNumberRequest struct { type UnregisterNumberRequest struct { DeleteAccount bool `json:"delete_account" example:"false"` + DeleteLocalData bool `json:"delete_local_data" example:"false"` } type VerifyNumberSettings struct { @@ -223,6 +224,7 @@ func (a *Api) UnregisterNumber(c *gin.Context) { number := c.Param("number") deleteAccount := false + deleteLocalData := false buf := new(bytes.Buffer) buf.ReadFrom(c.Request.Body) if buf.String() != "" { @@ -234,9 +236,10 @@ func (a *Api) UnregisterNumber(c *gin.Context) { return } deleteAccount = req.DeleteAccount + deleteLocalData = req.DeleteLocalData } - err := a.signalClient.UnregisterNumber(number, deleteAccount) + err := a.signalClient.UnregisterNumber(number, deleteAccount, deleteLocalData) if err != nil { c.JSON(400, gin.H{"error": err.Error()}) return diff --git a/src/client/client.go b/src/client/client.go index ba2969f..96db759 100644 --- a/src/client/client.go +++ b/src/client/client.go @@ -9,6 +9,7 @@ import ( "path/filepath" "strconv" "strings" + "fmt" securejoin "github.com/cyphar/filepath-securejoin" "github.com/gabriel-vasile/mimetype" @@ -427,7 +428,7 @@ func (s *SignalClient) RegisterNumber(number string, useVoice bool, captcha stri return err } -func (s *SignalClient) UnregisterNumber(number string, deleteAccount bool) error { +func (s *SignalClient) UnregisterNumber(number string, deleteAccount bool, deleteLocalData bool) error { if s.signalCliMode == JsonRpc { return errors.New("This functionality is only available in normal/native mode!") } @@ -438,6 +439,17 @@ func (s *SignalClient) UnregisterNumber(number string, deleteAccount bool) error } _, err := s.cliClient.Execute(true, command, "") + + if deleteLocalData { + command := []string{"--config", s.signalCliConfig, "-a", number, "deleteLocalAccountData"} + _, err2 := s.cliClient.Execute(true, command, "") + if (err2 != nil) && (err != nil) { + err = fmt.Errorf("%w (%w)", err, err2) + } else if (err2 != nil) && (err == nil) { + err = err2 + } + } + return err }