mirror of
https://github.com/bbernhard/signal-cli-rest-api.git
synced 2026-05-19 13:34:19 +00:00
Compare commits
3 Commits
46bb0da9d5
...
84788c47e2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84788c47e2 | ||
|
|
e5e21518a5 | ||
|
|
354df7472c |
@ -761,53 +761,75 @@ func (s *SignalClient) RegisterNumber(number string, useVoice bool, captcha stri
|
|||||||
|
|
||||||
func (s *SignalClient) UnregisterNumber(number string, deleteAccount bool, deleteLocalData 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!")
|
type Request struct {
|
||||||
}
|
DeleteAccount bool `json:"delete-account,omitempty"`
|
||||||
|
|
||||||
command := []string{"--config", s.signalCliConfig, "-a", number, "unregister"}
|
|
||||||
if deleteAccount {
|
|
||||||
command = append(command, "--delete-account")
|
|
||||||
}
|
|
||||||
|
|
||||||
_, 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 (%s)", err, err2.Error())
|
|
||||||
} else if (err2 != nil) && (err == nil) {
|
|
||||||
err = err2
|
|
||||||
}
|
}
|
||||||
}
|
req := Request{}
|
||||||
|
|
||||||
return err
|
if deleteAccount {
|
||||||
|
req.DeleteAccount = true
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = jsonRpc2Client.getRaw("unregister", &number, req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if deleteLocalData {
|
||||||
|
return s.DeleteLocalAccountData(number, false)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
|
||||||
|
} else {
|
||||||
|
command := []string{"--config", s.signalCliConfig, "-a", number, "unregister"}
|
||||||
|
if deleteAccount {
|
||||||
|
command = append(command, "--delete-account")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, 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 (%s)", err, err2.Error())
|
||||||
|
} else if (err2 != nil) && (err == nil) {
|
||||||
|
err = err2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SignalClient) DeleteLocalAccountData(number string, ignoreRegistered bool) error {
|
func (s *SignalClient) DeleteLocalAccountData(number string, ignoreRegistered bool) error {
|
||||||
if s.signalCliMode == JsonRpc {
|
if s.signalCliMode == JsonRpc {
|
||||||
type Request struct {
|
type Request struct {
|
||||||
IgnoreRegistered bool `json:"ignore-registered,omitempty"`
|
IgnoreRegistered bool `json:"ignore-registered,omitempty"`
|
||||||
}
|
}
|
||||||
req := Request{}
|
req := Request{}
|
||||||
if ignoreRegistered {
|
if ignoreRegistered {
|
||||||
req.IgnoreRegistered = true
|
req.IgnoreRegistered = true
|
||||||
}
|
}
|
||||||
|
|
||||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, err = jsonRpc2Client.getRaw("deleteLocalAccountData", &number, req)
|
_, err = jsonRpc2Client.getRaw("deleteLocalAccountData", &number, req)
|
||||||
return err
|
return err
|
||||||
} else {
|
} else {
|
||||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "deleteLocalAccountData"}
|
cmd := []string{"--config", s.signalCliConfig, "-a", number, "deleteLocalAccountData"}
|
||||||
if ignoreRegistered {
|
if ignoreRegistered {
|
||||||
cmd = append(cmd, "--ignore-registered")
|
cmd = append(cmd, "--ignore-registered")
|
||||||
}
|
}
|
||||||
_, err := s.cliClient.Execute(true, cmd, "")
|
_, err := s.cliClient.Execute(true, cmd, "")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SignalClient) VerifyRegisteredNumber(number string, token string, pin string) error {
|
func (s *SignalClient) VerifyRegisteredNumber(number string, token string, pin string) error {
|
||||||
@ -1516,54 +1538,54 @@ func (s *SignalClient) GetQrCodeLink(deviceName string, qrCodeVersion int) ([]by
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *SignalClient) GetDeviceLinkUri(deviceName string) (string, error) {
|
func (s *SignalClient) GetDeviceLinkUri(deviceName string) (string, error) {
|
||||||
if s.signalCliMode == JsonRpc {
|
if s.signalCliMode == JsonRpc {
|
||||||
type StartResponse struct {
|
type StartResponse struct {
|
||||||
DeviceLinkUri string `json:"deviceLinkUri"`
|
DeviceLinkUri string `json:"deviceLinkUri"`
|
||||||
}
|
}
|
||||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
raw, err := jsonRpc2Client.getRaw("startLink", nil, struct{}{})
|
raw, err := jsonRpc2Client.getRaw("startLink", nil, struct{}{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New("Couldn't start link: " + err.Error())
|
return "", errors.New("Couldn't start link: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
var resp StartResponse
|
var resp StartResponse
|
||||||
if err := json.Unmarshal([]byte(raw), &resp); err != nil {
|
if err := json.Unmarshal([]byte(raw), &resp); err != nil {
|
||||||
return "", errors.New("Couldn't parse startLink response: " + err.Error())
|
return "", errors.New("Couldn't parse startLink response: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Complete the linking handshake in the background, just like GetQrCodeLink does.
|
// Complete the linking handshake in the background, just like GetQrCodeLink does.
|
||||||
s.finishLinkAsync(jsonRpc2Client, deviceName, resp.DeviceLinkUri)
|
s.finishLinkAsync(jsonRpc2Client, deviceName, resp.DeviceLinkUri)
|
||||||
return resp.DeviceLinkUri, nil
|
return resp.DeviceLinkUri, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := []string{"--config", s.signalCliConfig, "link", "-n", deviceName}
|
cmd := []string{"--config", s.signalCliConfig, "link", "-n", deviceName}
|
||||||
deviceLinkUri, err := s.cliClient.Execute(false, cmd, "")
|
deviceLinkUri, err := s.cliClient.Execute(false, cmd, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New("Couldn't create link URI: " + err.Error())
|
return "", errors.New("Couldn't create link URI: " + err.Error())
|
||||||
}
|
}
|
||||||
return strings.TrimSpace(deviceLinkUri), nil
|
return strings.TrimSpace(deviceLinkUri), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SignalClient) finishLinkAsync(jsonRpc2Client *JsonRpc2Client, deviceName string, deviceLinkUri string) {
|
func (s *SignalClient) finishLinkAsync(jsonRpc2Client *JsonRpc2Client, deviceName string, deviceLinkUri string) {
|
||||||
type finishRequest struct {
|
type finishRequest struct {
|
||||||
DeviceLinkUri string `json:"deviceLinkUri"`
|
DeviceLinkUri string `json:"deviceLinkUri"`
|
||||||
DeviceName string `json:"deviceName"`
|
DeviceName string `json:"deviceName"`
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
req := finishRequest{DeviceLinkUri: deviceLinkUri, DeviceName: deviceName}
|
req := finishRequest{DeviceLinkUri: deviceLinkUri, DeviceName: deviceName}
|
||||||
result, err := jsonRpc2Client.getRaw("finishLink", nil, &req)
|
result, err := jsonRpc2Client.getRaw("finishLink", nil, &req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debug("Error linking device: ", err.Error())
|
log.Debug("Error linking device: ", err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Debug("Linking device result: ", result)
|
log.Debug("Linking device result: ", result)
|
||||||
s.signalCliApiConfig.Load(s.signalCliApiConfigPath)
|
s.signalCliApiConfig.Load(s.signalCliApiConfigPath)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SignalClient) GetAccounts() ([]string, error) {
|
func (s *SignalClient) GetAccounts() ([]string, error) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user