From 57141615675e7000c700ba1e5eb38ecb5c7d6486 Mon Sep 17 00:00:00 2001 From: Bernhard B Date: Mon, 8 Dec 2025 22:38:50 +0100 Subject: [PATCH] fixed bug in json-rpc mode * handle 'trust-new-identities' setting in json-rpc mode see #771 --- README.md | 1 + src/client/client.go | 8 ++++++-- src/scripts/jsonrpc2-helper.go | 23 +++++++++++++++++------ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 222c4d7..03c6dc0 100644 --- a/README.md +++ b/README.md @@ -156,3 +156,4 @@ There are a bunch of environmental variables that can be set inside the docker c * `JSON_RPC_IGNORE_ATTACHMENTS`: When set to `true`, attachments are not automatically downloaded in json-rpc mode (default: `false`) * `JSON_RPC_IGNORE_STORIES`: When set to `true`, stories are not automatically downloaded in json-rpc mode (default: `false`) +* `JSON_RPC_TRUST_NEW_IDENTITIES`: Choose how to trust new identities in json-rpc mode. Supported values: `on-first-use`, `always`, `never`. (default: `on-first-use`) diff --git a/src/client/client.go b/src/client/client.go index 6880e66..379bff4 100644 --- a/src/client/client.go +++ b/src/client/client.go @@ -2296,8 +2296,12 @@ func (s *SignalClient) ListDevices(number string) ([]ListDevicesResponse, error) } func (s *SignalClient) SetTrustMode(number string, trustMode utils.SignalCliTrustMode) error { - s.signalCliApiConfig.SetTrustModeForNumber(number, trustMode) - return s.signalCliApiConfig.Persist() + if s.signalCliMode == JsonRpc { + return errors.New("Not supported in json-rpc mode, use the environment variable JSON_RPC_TRUST_NEW_IDENTITIES instead!") + } else { + s.signalCliApiConfig.SetTrustModeForNumber(number, trustMode) + return s.signalCliApiConfig.Persist() + } } func (s *SignalClient) GetTrustMode(number string) utils.SignalCliTrustMode { diff --git a/src/scripts/jsonrpc2-helper.go b/src/scripts/jsonrpc2-helper.go index a05db04..a7bbc5d 100644 --- a/src/scripts/jsonrpc2-helper.go +++ b/src/scripts/jsonrpc2-helper.go @@ -2,18 +2,19 @@ package main import ( "fmt" - "github.com/bbernhard/signal-cli-rest-api/utils" - log "github.com/sirupsen/logrus" "io/ioutil" "os" "os/exec" "strings" + + "github.com/bbernhard/signal-cli-rest-api/utils" + log "github.com/sirupsen/logrus" ) const supervisorctlConfigTemplate = ` [program:%s] process_name=%s -command=bash -c "nc -l -p %d <%s | signal-cli --output=json --config %s jsonRpc%s%s >%s" +command=bash -c "nc -l -p %d <%s | signal-cli --output=json --config %s%s jsonRpc%s%s >%s" autostart=true autorestart=true startretries=10 @@ -77,16 +78,26 @@ func main() { log.Fatal("Couldn't create log folder ", supervisorctlLogFolder, ": ", err.Error()) } + trustNewIdentities := "" + trustNewIdentitiesEnv := utils.GetEnv("JSON_RPC_TRUST_NEW_IDENTITIES", "") + if trustNewIdentitiesEnv == "on-first-use" { + trustNewIdentities = " --trust-new-identities on-first-use" + } else if trustNewIdentitiesEnv == "always" { + trustNewIdentities = " --trust-new-identities always" + } else if trustNewIdentitiesEnv == "never" { + trustNewIdentities = " --trust-new-identities never" + } else if trustNewIdentitiesEnv != "" { + log.Fatal("Invalid JSON_RPC_TRUST_NEW_IDENTITIES environment variable set!") + } + log.Info("Updated jsonrpc2.yml") //write supervisorctl config supervisorctlConfigFilename := "/etc/supervisor/conf.d/" + "signal-cli-json-rpc-1.conf" - supervisorctlConfig := fmt.Sprintf(supervisorctlConfigTemplate, supervisorctlProgramName, supervisorctlProgramName, - tcpPort, fifoPathname, signalCliConfigDir, signalCliIgnoreAttachments, signalCliIgnoreStories, fifoPathname, + tcpPort, fifoPathname, signalCliConfigDir, trustNewIdentities, signalCliIgnoreAttachments, signalCliIgnoreStories, fifoPathname, supervisorctlProgramName, supervisorctlProgramName) - err = ioutil.WriteFile(supervisorctlConfigFilename, []byte(supervisorctlConfig), 0644) if err != nil {