diff --git a/README.md b/README.md index 8b0d7c2..9ef2b7a 100644 --- a/README.md +++ b/README.md @@ -156,4 +156,6 @@ 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_IGNORE_AVATARS`: When set to `true`, avatars are not automatically downloaded in json-rpc mode (default: `false`) +* `JSON_RPC_IGNORE_STICKERS`: When set to `true`, sticker packs 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/docker-compose.yml b/docker-compose.yml index 30c3f7c..d921530 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,6 +10,8 @@ services: - PODMAN_USERNS=keep-id #- JSON_RPC_IGNORE_ATTACHMENTS=true #- JSON_RPC_IGNORE_STORIES=true + #- JSON_RPC_IGNORE_AVATARS=true + #- JSON_RPC_IGNORE_STICKERS=true #- RECEIVE_WEBHOOK_URL=http://127.0.0.1:8089/webhook #- JSON_RPC_TRUST_NEW_IDENTITIES=always #- RECEIVE_WEBHOOK_URL=http://127.0.0.1:8080/v1/plugins/abc diff --git a/src/api/api.go b/src/api/api.go index c524fa1..81e3a0c 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -670,6 +670,8 @@ func StringToBool(input string) bool { // @Param timeout query string false "Receive timeout in seconds (default: 1)" // @Param ignore_attachments query string false "Specify whether the attachments of the received message should be ignored" (default: false)" // @Param ignore_stories query string false "Specify whether stories should be ignored when receiving messages" (default: false)" +// @Param ignore_avatars query string false "Specify whether avatar downloads should be ignored when receiving messages" (default: false)" +// @Param ignore_stickers query string false "Specify whether sticker pack downloads should be ignored when receiving messages" (default: false)" // @Param max_messages query string false "Specify the maximum number of messages to receive (default: unlimited)". Not available in json-rpc mode. // @Param send_read_receipts query string false "Specify whether read receipts should be sent when receiving messages" (default: false)" // @Router /v1/receive/{number} [get] @@ -718,13 +720,25 @@ func (a *Api) Receive(c *gin.Context) { return } + ignoreAvatars := c.DefaultQuery("ignore_avatars", "false") + if ignoreAvatars != "true" && ignoreAvatars != "false" { + c.JSON(400, Error{Msg: "Couldn't process request - ignore_avatars parameter needs to be either 'true' or 'false'"}) + return + } + + ignoreStickers := c.DefaultQuery("ignore_stickers", "false") + if ignoreStickers != "true" && ignoreStickers != "false" { + c.JSON(400, Error{Msg: "Couldn't process request - ignore_stickers parameter needs to be either 'true' or 'false'"}) + return + } + sendReadReceipts := c.DefaultQuery("send_read_receipts", "false") if sendReadReceipts != "true" && sendReadReceipts != "false" { c.JSON(400, Error{Msg: "Couldn't process request - send_read_receipts parameter needs to be either 'true' or 'false'"}) return } - jsonStr, err := a.signalClient.Receive(number, timeoutInt, StringToBool(ignoreAttachments), StringToBool(ignoreStories), maxMessagesInt, StringToBool(sendReadReceipts)) + jsonStr, err := a.signalClient.Receive(number, timeoutInt, StringToBool(ignoreAttachments), StringToBool(ignoreStories), StringToBool(ignoreAvatars), StringToBool(ignoreStickers), maxMessagesInt, StringToBool(sendReadReceipts)) if err != nil { c.JSON(400, Error{Msg: err.Error()}) return diff --git a/src/client/client.go b/src/client/client.go index dcd6b48..fa3f937 100644 --- a/src/client/client.go +++ b/src/client/client.go @@ -993,7 +993,7 @@ func (s *SignalClient) SendV2(number string, message string, recps []string, bas return ×tamps, nil } -func (s *SignalClient) Receive(number string, timeout int64, ignoreAttachments bool, ignoreStories bool, maxMessages int64, sendReadReceipts bool) (string, error) { +func (s *SignalClient) Receive(number string, timeout int64, ignoreAttachments bool, ignoreStories bool, ignoreAvatars bool, ignoreStickers bool, maxMessages int64, sendReadReceipts bool) (string, error) { if s.signalCliMode == JsonRpc { return "", errors.New("Not implemented") } else { @@ -1007,6 +1007,14 @@ func (s *SignalClient) Receive(number string, timeout int64, ignoreAttachments b command = append(command, "--ignore-stories") } + if ignoreAvatars { + command = append(command, "--ignore-avatars") + } + + if ignoreStickers { + command = append(command, "--ignore-stickers") + } + if maxMessages > 0 { command = append(command, "--max-messages") command = append(command, strconv.FormatInt(maxMessages, 10)) diff --git a/src/docs/docs.go b/src/docs/docs.go index 3bf19e9..8137eb7 100644 --- a/src/docs/docs.go +++ b/src/docs/docs.go @@ -2043,6 +2043,18 @@ const docTemplate = `{ "name": "ignore_stories", "in": "query" }, + { + "type": "string", + "description": "Specify whether avatar downloads should be ignored when receiving messages", + "name": "ignore_avatars", + "in": "query" + }, + { + "type": "string", + "description": "Specify whether sticker pack downloads should be ignored when receiving messages", + "name": "ignore_stickers", + "in": "query" + }, { "type": "string", "description": "Specify the maximum number of messages to receive (default: unlimited)", diff --git a/src/docs/swagger.json b/src/docs/swagger.json index 8e10645..5337561 100644 --- a/src/docs/swagger.json +++ b/src/docs/swagger.json @@ -2040,6 +2040,18 @@ "name": "ignore_stories", "in": "query" }, + { + "type": "string", + "description": "Specify whether avatar downloads should be ignored when receiving messages", + "name": "ignore_avatars", + "in": "query" + }, + { + "type": "string", + "description": "Specify whether sticker pack downloads should be ignored when receiving messages", + "name": "ignore_stickers", + "in": "query" + }, { "type": "string", "description": "Specify the maximum number of messages to receive (default: unlimited)", diff --git a/src/docs/swagger.yaml b/src/docs/swagger.yaml index 48c00b5..f1638c7 100644 --- a/src/docs/swagger.yaml +++ b/src/docs/swagger.yaml @@ -1916,6 +1916,16 @@ paths: in: query name: ignore_stories type: string + - description: Specify whether avatar downloads should be ignored when receiving + messages + in: query + name: ignore_avatars + type: string + - description: Specify whether sticker pack downloads should be ignored when + receiving messages + in: query + name: ignore_stickers + type: string - description: 'Specify the maximum number of messages to receive (default: unlimited)' in: query diff --git a/src/main.go b/src/main.go index 67f6bbe..6c271ce 100644 --- a/src/main.go +++ b/src/main.go @@ -395,6 +395,8 @@ func main() { autoReceiveScheduleReceiveTimeout := utils.GetEnv("AUTO_RECEIVE_SCHEDULE_RECEIVE_TIMEOUT", "10") autoReceiveScheduleIgnoreAttachments := utils.GetEnv("AUTO_RECEIVE_SCHEDULE_IGNORE_ATTACHMENTS", "false") autoReceiveScheduleIgnoreStories := utils.GetEnv("AUTO_RECEIVE_SCHEDULE_IGNORE_STORIES", "false") + autoReceiveScheduleIgnoreAvatars := utils.GetEnv("AUTO_RECEIVE_SCHEDULE_IGNORE_AVATARS", "false") + autoReceiveScheduleIgnoreStickers := utils.GetEnv("AUTO_RECEIVE_SCHEDULE_IGNORE_STICKERS", "false") autoReceiveScheduleSendReadReceipts := utils.GetEnv("AUTO_RECEIVE_SCHEDULE_SEND_READ_RECEIPTS", "false") c := cron.New() @@ -424,6 +426,8 @@ func main() { q.Add("timeout", autoReceiveScheduleReceiveTimeout) q.Add("ignore_attachments", autoReceiveScheduleIgnoreAttachments) q.Add("ignore_stories", autoReceiveScheduleIgnoreStories) + q.Add("ignore_avatars", autoReceiveScheduleIgnoreAvatars) + q.Add("ignore_stickers", autoReceiveScheduleIgnoreStickers) q.Add("send_read_receipts", autoReceiveScheduleSendReadReceipts) req.URL.RawQuery = q.Encode() diff --git a/src/scripts/jsonrpc2-helper.go b/src/scripts/jsonrpc2-helper.go index 16309c7..36e3f0b 100644 --- a/src/scripts/jsonrpc2-helper.go +++ b/src/scripts/jsonrpc2-helper.go @@ -13,7 +13,7 @@ import ( const supervisorctlConfigTemplate = ` [program:%s] process_name=%s -command=signal-cli --output=json --config %s%s daemon %s%s --tcp 127.0.0.1:%d +command=signal-cli --output=json --config %s%s daemon %s%s%s%s --tcp 127.0.0.1:%d autostart=true autorestart=true startretries=10 @@ -55,6 +55,18 @@ func main() { 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() @@ -80,7 +92,8 @@ func main() { supervisorctlConfigFilename := "/etc/supervisor/conf.d/" + "signal-cli-json-rpc-1.conf" supervisorctlConfig := fmt.Sprintf(supervisorctlConfigTemplate, supervisorctlProgramName, supervisorctlProgramName, - signalCliConfigDir, trustNewIdentities, signalCliIgnoreAttachments, signalCliIgnoreStories, tcpPort, + signalCliConfigDir, trustNewIdentities, signalCliIgnoreAttachments, signalCliIgnoreStories, + signalCliIgnoreAvatars, signalCliIgnoreStickers, tcpPort, supervisorctlProgramName, supervisorctlProgramName) err = ioutil.WriteFile(supervisorctlConfigFilename, []byte(supervisorctlConfig), 0644)