extended unregister API endpoint

* added possibility to delete the local data with the
  "deleteLocalAccountData" signal-cli command

see #242
This commit is contained in:
Bernhard B
2022-05-28 18:49:53 +02:00
parent 102fc5cdab
commit 7747944775
2 changed files with 17 additions and 2 deletions

View File

@@ -70,6 +70,7 @@ type RegisterNumberRequest struct {
type UnregisterNumberRequest struct { type UnregisterNumberRequest struct {
DeleteAccount bool `json:"delete_account" example:"false"` DeleteAccount bool `json:"delete_account" example:"false"`
DeleteLocalData bool `json:"delete_local_data" example:"false"`
} }
type VerifyNumberSettings struct { type VerifyNumberSettings struct {
@@ -223,6 +224,7 @@ func (a *Api) UnregisterNumber(c *gin.Context) {
number := c.Param("number") number := c.Param("number")
deleteAccount := false deleteAccount := false
deleteLocalData := false
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
buf.ReadFrom(c.Request.Body) buf.ReadFrom(c.Request.Body)
if buf.String() != "" { if buf.String() != "" {
@@ -234,9 +236,10 @@ func (a *Api) UnregisterNumber(c *gin.Context) {
return return
} }
deleteAccount = req.DeleteAccount deleteAccount = req.DeleteAccount
deleteLocalData = req.DeleteLocalData
} }
err := a.signalClient.UnregisterNumber(number, deleteAccount) err := a.signalClient.UnregisterNumber(number, deleteAccount, deleteLocalData)
if err != nil { if err != nil {
c.JSON(400, gin.H{"error": err.Error()}) c.JSON(400, gin.H{"error": err.Error()})
return return

View File

@@ -9,6 +9,7 @@ import (
"path/filepath" "path/filepath"
"strconv" "strconv"
"strings" "strings"
"fmt"
securejoin "github.com/cyphar/filepath-securejoin" securejoin "github.com/cyphar/filepath-securejoin"
"github.com/gabriel-vasile/mimetype" "github.com/gabriel-vasile/mimetype"
@@ -427,7 +428,7 @@ func (s *SignalClient) RegisterNumber(number string, useVoice bool, captcha stri
return err 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 { if s.signalCliMode == JsonRpc {
return errors.New("This functionality is only available in normal/native mode!") 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, "") _, 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 return err
} }