mirror of
https://github.com/bbernhard/signal-cli-rest-api.git
synced 2026-05-18 13:24:15 +00:00
Compare commits
5 Commits
5d6c16d955
...
297685d39c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
297685d39c | ||
|
|
e5e21518a5 | ||
|
|
354df7472c | ||
|
|
f27a3c5206 | ||
|
|
1be5684ae3 |
@ -3,8 +3,27 @@
|
||||
set -x
|
||||
set -e
|
||||
|
||||
[ -d /etc/docker ] && echo "$FILE is a directory."
|
||||
|
||||
[ -z "${SIGNAL_CLI_CONFIG_DIR}" ] && echo "SIGNAL_CLI_CONFIG_DIR environmental variable needs to be set! Aborting!" && exit 1;
|
||||
|
||||
if [ "$(id -u)" -eq "${SIGNAL_CLI_UID}" ] && [ "$(id -g)" -eq "${SIGNAL_CLI_GID}" ]]
|
||||
then
|
||||
echo "UID and GID are already correct. Trying to start Signal Api"
|
||||
|
||||
# TODO: check mode
|
||||
if [ "$MODE" = "json-rpc" ]
|
||||
then
|
||||
/usr/bin/jsonrpc2-helper
|
||||
if [ -n "$JAVA_OPTS" ] ; then
|
||||
echo "export JAVA_OPTS='$JAVA_OPTS'" >> /etc/default/supervisor
|
||||
fi
|
||||
service supervisor start
|
||||
supervisorctl start all
|
||||
fi
|
||||
signal-cli-rest-api -signal-cli-config=${SIGNAL_CLI_CONFIG_DIR};
|
||||
fi
|
||||
|
||||
usermod -u ${SIGNAL_CLI_UID} signal-api
|
||||
groupmod -o -g ${SIGNAL_CLI_GID} signal-api
|
||||
|
||||
|
||||
@ -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 {
|
||||
if s.signalCliMode == JsonRpc {
|
||||
return errors.New("This functionality is only available in normal/native mode!")
|
||||
}
|
||||
|
||||
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
|
||||
type Request struct {
|
||||
DeleteAccount bool `json:"delete-account,omitempty"`
|
||||
}
|
||||
}
|
||||
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 {
|
||||
if s.signalCliMode == JsonRpc {
|
||||
type Request struct {
|
||||
IgnoreRegistered bool `json:"ignore-registered,omitempty"`
|
||||
}
|
||||
req := Request{}
|
||||
if ignoreRegistered {
|
||||
req.IgnoreRegistered = true
|
||||
}
|
||||
if s.signalCliMode == JsonRpc {
|
||||
type Request struct {
|
||||
IgnoreRegistered bool `json:"ignore-registered,omitempty"`
|
||||
}
|
||||
req := Request{}
|
||||
if ignoreRegistered {
|
||||
req.IgnoreRegistered = true
|
||||
}
|
||||
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("deleteLocalAccountData", &number, req)
|
||||
return err
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "deleteLocalAccountData"}
|
||||
if ignoreRegistered {
|
||||
cmd = append(cmd, "--ignore-registered")
|
||||
}
|
||||
_, err := s.cliClient.Execute(true, cmd, "")
|
||||
return err
|
||||
}
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("deleteLocalAccountData", &number, req)
|
||||
return err
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "deleteLocalAccountData"}
|
||||
if ignoreRegistered {
|
||||
cmd = append(cmd, "--ignore-registered")
|
||||
}
|
||||
_, err := s.cliClient.Execute(true, cmd, "")
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
if s.signalCliMode == JsonRpc {
|
||||
type StartResponse struct {
|
||||
DeviceLinkUri string `json:"deviceLinkUri"`
|
||||
}
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if s.signalCliMode == JsonRpc {
|
||||
type StartResponse struct {
|
||||
DeviceLinkUri string `json:"deviceLinkUri"`
|
||||
}
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
raw, err := jsonRpc2Client.getRaw("startLink", nil, struct{}{})
|
||||
if err != nil {
|
||||
return "", errors.New("Couldn't start link: " + err.Error())
|
||||
}
|
||||
raw, err := jsonRpc2Client.getRaw("startLink", nil, struct{}{})
|
||||
if err != nil {
|
||||
return "", errors.New("Couldn't start link: " + err.Error())
|
||||
}
|
||||
|
||||
var resp StartResponse
|
||||
if err := json.Unmarshal([]byte(raw), &resp); err != nil {
|
||||
return "", errors.New("Couldn't parse startLink response: " + err.Error())
|
||||
}
|
||||
var resp StartResponse
|
||||
if err := json.Unmarshal([]byte(raw), &resp); err != nil {
|
||||
return "", errors.New("Couldn't parse startLink response: " + err.Error())
|
||||
}
|
||||
|
||||
// Complete the linking handshake in the background, just like GetQrCodeLink does.
|
||||
s.finishLinkAsync(jsonRpc2Client, deviceName, resp.DeviceLinkUri)
|
||||
return resp.DeviceLinkUri, nil
|
||||
}
|
||||
// Complete the linking handshake in the background, just like GetQrCodeLink does.
|
||||
s.finishLinkAsync(jsonRpc2Client, deviceName, resp.DeviceLinkUri)
|
||||
return resp.DeviceLinkUri, nil
|
||||
}
|
||||
|
||||
cmd := []string{"--config", s.signalCliConfig, "link", "-n", deviceName}
|
||||
deviceLinkUri, err := s.cliClient.Execute(false, cmd, "")
|
||||
if err != nil {
|
||||
return "", errors.New("Couldn't create link URI: " + err.Error())
|
||||
}
|
||||
return strings.TrimSpace(deviceLinkUri), nil
|
||||
cmd := []string{"--config", s.signalCliConfig, "link", "-n", deviceName}
|
||||
deviceLinkUri, err := s.cliClient.Execute(false, cmd, "")
|
||||
if err != nil {
|
||||
return "", errors.New("Couldn't create link URI: " + err.Error())
|
||||
}
|
||||
return strings.TrimSpace(deviceLinkUri), nil
|
||||
}
|
||||
|
||||
func (s *SignalClient) finishLinkAsync(jsonRpc2Client *JsonRpc2Client, deviceName string, deviceLinkUri string) {
|
||||
type finishRequest struct {
|
||||
DeviceLinkUri string `json:"deviceLinkUri"`
|
||||
DeviceName string `json:"deviceName"`
|
||||
}
|
||||
type finishRequest struct {
|
||||
DeviceLinkUri string `json:"deviceLinkUri"`
|
||||
DeviceName string `json:"deviceName"`
|
||||
}
|
||||
|
||||
go func() {
|
||||
req := finishRequest{DeviceLinkUri: deviceLinkUri, DeviceName: deviceName}
|
||||
result, err := jsonRpc2Client.getRaw("finishLink", nil, &req)
|
||||
if err != nil {
|
||||
log.Debug("Error linking device: ", err.Error())
|
||||
return
|
||||
}
|
||||
log.Debug("Linking device result: ", result)
|
||||
s.signalCliApiConfig.Load(s.signalCliApiConfigPath)
|
||||
}()
|
||||
go func() {
|
||||
req := finishRequest{DeviceLinkUri: deviceLinkUri, DeviceName: deviceName}
|
||||
result, err := jsonRpc2Client.getRaw("finishLink", nil, &req)
|
||||
if err != nil {
|
||||
log.Debug("Error linking device: ", err.Error())
|
||||
return
|
||||
}
|
||||
log.Debug("Linking device result: ", result)
|
||||
s.signalCliApiConfig.Load(s.signalCliApiConfigPath)
|
||||
}()
|
||||
}
|
||||
|
||||
func (s *SignalClient) GetAccounts() ([]string, error) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user