From b23e67ae6a24addf1864b7f7ab5868229709fb5e Mon Sep 17 00:00:00 2001 From: Nicola Murino Date: Sat, 12 Oct 2024 11:25:07 +0200 Subject: [PATCH] EventManager: add escaped virtual path Signed-off-by: Nicola Murino --- internal/common/eventmanager.go | 1 + internal/common/protocol_test.go | 4 +++- static/locales/en/translation.json | 1 + static/locales/it/translation.json | 1 + templates/webadmin/eventaction.html | 3 +++ 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/internal/common/eventmanager.go b/internal/common/eventmanager.go index 9c28bab55..749590763 100644 --- a/internal/common/eventmanager.go +++ b/internal/common/eventmanager.go @@ -787,6 +787,7 @@ func (p *EventParams) getStringReplacements(addObjectData, jsonEscaped bool) []s "{{Event}}", p.Event, "{{Status}}", fmt.Sprintf("%d", p.Status), "{{VirtualPath}}", p.getStringReplacement(p.VirtualPath, jsonEscaped), + "{{EscapedVirtualPath}}", p.getStringReplacement(url.QueryEscape(p.VirtualPath), jsonEscaped), "{{FsPath}}", p.getStringReplacement(p.FsPath, jsonEscaped), "{{VirtualTargetPath}}", p.getStringReplacement(p.VirtualTargetPath, jsonEscaped), "{{FsTargetPath}}", p.getStringReplacement(p.FsTargetPath, jsonEscaped), diff --git a/internal/common/protocol_test.go b/internal/common/protocol_test.go index 85e9543b0..9ddb3e1ae 100644 --- a/internal/common/protocol_test.go +++ b/internal/common/protocol_test.go @@ -26,6 +26,7 @@ import ( "math" "net" "net/http" + "net/url" "os" "path" "path/filepath" @@ -6118,7 +6119,7 @@ func TestEventActionEmailAttachments(t *testing.T) { EmailConfig: dataprovider.EventActionEmailConfig{ Recipients: []string{"test@example.com"}, Subject: `"{{Event}}" from "{{Name}}"`, - Body: "Fs path {{FsPath}}, size: {{FileSize}}, protocol: {{Protocol}}, IP: {{IP}}", + Body: "Fs path {{FsPath}}, size: {{FileSize}}, protocol: {{Protocol}}, IP: {{IP}} {{EscapedVirtualPath}}", Attachments: []string{"/archive/{{VirtualPath}}.zip"}, }, }, @@ -6177,6 +6178,7 @@ func TestEventActionEmailAttachments(t *testing.T) { assert.Len(t, email.To, 1) assert.True(t, slices.Contains(email.To, "test@example.com")) assert.Contains(t, email.Data, `Subject: "upload" from`) + assert.Contains(t, email.Data, url.QueryEscape("/"+testFileName)) assert.Contains(t, email.Data, "Content-Disposition: attachment") } } diff --git a/static/locales/en/translation.json b/static/locales/en/translation.json index a643567f5..225c88809 100644 --- a/static/locales/en/translation.json +++ b/static/locales/en/translation.json @@ -1043,6 +1043,7 @@ "status_string": "Status as string. Possible values \"OK\", \"KO\"", "error_string": "Error details. Replaced with an empty string if no errors occur", "virtual_path": "Path seen by SFTPGo users, for example \"/adir/afile.txt\"", + "escaped_virtual_path": "HTTP query string encoded path, for example \"%2Fadir%2Fafile.txt\".", "virtual_dir_path": "Parent directory for \"VirtualPath\", for example if \"VirtualPath\" is \"/adir/afile.txt\", \"VirtualDirPath\" is \"/adir\"", "fs_path": "Full filesystem path, for example \"/user/homedir/adir/afile.txt\" or \"C:/data/user/homedir/adir/afile.txt\" on Windows", "ext": "File extension, for example \".txt\" if the filename is \"afile.txt\"", diff --git a/static/locales/it/translation.json b/static/locales/it/translation.json index bfc32313a..d7fbd70ff 100644 --- a/static/locales/it/translation.json +++ b/static/locales/it/translation.json @@ -1043,6 +1043,7 @@ "status_string": "Stato come stringa. Valori possibili \"OK\", \"KO\"", "error_string": "Dettagli circa l'errore. Sostituito con una stringa vuota se non si verificano errori", "virtual_path": "Percorso visualizzato dagli utenti SFTPGo, ad esempio \"/adir/afile.txt\"", + "escaped_virtual_path": "Percorso codificato per HTTP query string, ad esempio \"%2Fadir%2Fafile.txt\".", "virtual_dir_path": "Directory superiore per \"VirtualPath\", ad esempio se \"VirtualPath\" è \"/adir/afile.txt\", \"VirtualDirPath\" è \"/adir\"", "fs_path": "Percorso completo del filesystem, ad esempio \"/user/homedir/adir/afile.txt\" o \"C:/data/user/homedir/adir/afile.txt\" su Windows", "ext": "Estensione del file, ad esempio \".txt\" se il nome del file è \"afile.txt\"", diff --git a/templates/webadmin/eventaction.html b/templates/webadmin/eventaction.html index 3773a88d8..f3cd04e5e 100644 --- a/templates/webadmin/eventaction.html +++ b/templates/webadmin/eventaction.html @@ -896,6 +896,9 @@