signal-cli-rest-api/src/scripts/jsonrpc2-helper.go

118 lines
3.7 KiB
Go

package main
import (
"fmt"
"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=%s --output=json --config %s%s daemon %s%s%s%s --tcp 127.0.0.1:%d
autostart=true
autorestart=true
startretries=10
user=signal-api
directory=/usr/bin/
redirect_stderr=true
stdout_logfile=/var/log/%s/out.log
stderr_logfile=/var/log/%s/err.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10
numprocs=1
`
func main() {
signalCliConfigDir := "/home/.local/share/signal-cli/"
signalCliConfigDirEnv := utils.GetEnv("SIGNAL_CLI_CONFIG_DIR", "")
if signalCliConfigDirEnv != "" {
signalCliConfigDir = signalCliConfigDirEnv
if !strings.HasSuffix(signalCliConfigDirEnv, "/") {
signalCliConfigDir += "/"
}
}
jsonRpc2ClientConfig := utils.NewJsonRpc2ClientConfig()
var tcpPort int64 = 6001
jsonRpc2ClientConfig.AddEntry(utils.MULTI_ACCOUNT_NUMBER, utils.JsonRpc2ClientConfigEntry{TcpPort: tcpPort})
signalCliBinary := "signal-cli"
signalMode := utils.GetEnv("MODE", "json-rpc")
if signalMode == "json-rpc-native" {
signalCliBinary = "signal-cli-native"
} else if signalMode != "json-rpc" {
log.Fatal("The mode needs to be either 'json-rpc' or 'json-rpc-native'")
}
signalCliIgnoreAttachments := ""
ignoreAttachments := utils.GetEnv("JSON_RPC_IGNORE_ATTACHMENTS", "")
if ignoreAttachments == "true" {
signalCliIgnoreAttachments = " --ignore-attachments"
}
signalCliIgnoreStories := ""
ignoreStories := utils.GetEnv("JSON_RPC_IGNORE_STORIES", "")
if ignoreStories == "true" {
signalCliIgnoreStories = " --ignore-stories"
}
signalCliIgnoreAvatars := ""
ignoreAvatars := utils.GetEnv("JSON_RPC_IGNORE_AVATARS", "")
if ignoreAvatars == "true" {
signalCliIgnoreAvatars = " --ignore-avatars"
}
signalCliIgnoreStickers := ""
ignoreStickers := utils.GetEnv("JSON_RPC_IGNORE_STICKERS", "")
if ignoreStickers == "true" {
signalCliIgnoreStickers = " --ignore-stickers"
}
supervisorctlProgramName := "signal-cli-json-rpc-1"
supervisorctlLogFolder := "/var/log/" + supervisorctlProgramName
_, err := exec.Command("mkdir", "-p", supervisorctlLogFolder).Output()
if err != nil {
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, signalCliBinary,
signalCliConfigDir, trustNewIdentities, signalCliIgnoreAttachments, signalCliIgnoreStories,
signalCliIgnoreAvatars, signalCliIgnoreStickers, tcpPort,
supervisorctlProgramName, supervisorctlProgramName)
err = os.WriteFile(supervisorctlConfigFilename, []byte(supervisorctlConfig), 0600)
if err != nil {
log.Fatal("Couldn't write ", supervisorctlConfigFilename, ": ", err.Error())
}
// write jsonrpc.yml config file
err = jsonRpc2ClientConfig.Persist(signalCliConfigDir + "jsonrpc2.yml")
if err != nil {
log.Fatal("Couldn't persist jsonrpc2.yaml: ", err.Error())
}
}