From 31c1f98270963f4757748819c901c33e5095dd2a Mon Sep 17 00:00:00 2001 From: kolaente Date: Tue, 30 Sep 2025 20:16:07 +0200 Subject: [PATCH] fix(caldav): remove METHOD:PUBLISH from caldav exports (#1576) --- pkg/caldav/caldav.go | 3 +-- pkg/caldav/caldav_test.go | 9 +-------- pkg/caldav/parsing_test.go | 17 ----------------- pkg/routes/caldav/listStorageProvider_test.go | 8 -------- pkg/webtests/caldav_test.go | 4 ---- 5 files changed, 2 insertions(+), 39 deletions(-) diff --git a/pkg/caldav/caldav.go b/pkg/caldav/caldav.go index fd6f98f64..d93f9ec91 100644 --- a/pkg/caldav/caldav.go +++ b/pkg/caldav/caldav.go @@ -126,11 +126,10 @@ func getRruleFromInterval(interval int64) (freq string, newInterval int64) { } } -// ParseTodos returns a caldav vcalendar string with todos +// ParseTodos returns a caldav vcalendar string with todos. func ParseTodos(config *Config, todos []*Todo) (caldavtodos string) { caldavtodos = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:` + config.Name + ` PRODID:-//` + config.ProdID + `//EN` + getCaldavColor(config.Color) diff --git a/pkg/caldav/caldav_test.go b/pkg/caldav/caldav_test.go index 5d47973b2..d95da57e2 100644 --- a/pkg/caldav/caldav_test.go +++ b/pkg/caldav/caldav_test.go @@ -57,7 +57,6 @@ Dolor sit amet`, }, wantCaldavtasks: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -97,7 +96,6 @@ END:VCALENDAR`, }, wantCaldavtasks: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -131,7 +129,6 @@ END:VCALENDAR`, }, wantCaldavtasks: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -165,7 +162,6 @@ END:VCALENDAR`, }, wantCaldavtasks: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -201,7 +197,6 @@ END:VCALENDAR`, }, wantCaldavtasks: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -236,7 +231,6 @@ END:VCALENDAR`, }, wantCaldavtasks: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -295,7 +289,6 @@ END:VCALENDAR`, }, wantCaldavtasks: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -360,7 +353,6 @@ END:VCALENDAR`, }, wantCaldavtasks: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -380,6 +372,7 @@ END:VCALENDAR`, t.Run(tt.name, func(t *testing.T) { gotCaldavtasks := ParseTodos(tt.args.config, tt.args.todos) assert.Equal(t, tt.wantCaldavtasks, gotCaldavtasks) + assert.NotContains(t, gotCaldavtasks, "METHOD:") }) } } diff --git a/pkg/caldav/parsing_test.go b/pkg/caldav/parsing_test.go index 1f3516ab8..7eff890a3 100644 --- a/pkg/caldav/parsing_test.go +++ b/pkg/caldav/parsing_test.go @@ -39,7 +39,6 @@ func TestParseTaskFromVTODO(t *testing.T) { name: "normal", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -63,7 +62,6 @@ END:VCALENDAR`, name: "With priority", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -89,7 +87,6 @@ END:VCALENDAR`, name: "With categories", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -122,7 +119,6 @@ END:VCALENDAR`, name: "With alarm (time trigger)", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -154,7 +150,6 @@ END:VCALENDAR`, name: "With alarm (relative trigger)", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -223,7 +218,6 @@ END:VCALENDAR`, name: "With parent", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -255,7 +249,6 @@ END:VCALENDAR`, name: "With subtask", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -357,7 +350,6 @@ END:VCALENDAR`, name: "with apple hex color", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -374,7 +366,6 @@ END:VCALENDAR`, name: "with apple css color", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -391,7 +382,6 @@ END:VCALENDAR`, name: "with outlook hex color", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -408,7 +398,6 @@ END:VCALENDAR`, name: "with outlook css color", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -425,7 +414,6 @@ END:VCALENDAR`, name: "with funambol hex color", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -442,7 +430,6 @@ END:VCALENDAR`, name: "with funambol css color", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -459,7 +446,6 @@ END:VCALENDAR`, name: "with hex color", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -476,7 +462,6 @@ END:VCALENDAR`, name: "with css color", args: args{content: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:test PRODID:-//RandomProdID which is not random//EN @@ -562,7 +547,6 @@ func TestGetCaldavTodosForTasks(t *testing.T) { }, wantCaldav: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:List title PRODID:-//Vikunja Todo App//EN @@ -677,7 +661,6 @@ END:VCALENDAR`, }, wantCaldav: `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:List title PRODID:-//Vikunja Todo App//EN diff --git a/pkg/routes/caldav/listStorageProvider_test.go b/pkg/routes/caldav/listStorageProvider_test.go index d82bafd52..9ac292e71 100644 --- a/pkg/routes/caldav/listStorageProvider_test.go +++ b/pkg/routes/caldav/listStorageProvider_test.go @@ -57,7 +57,6 @@ func TestSubTask_Create(t *testing.T) { const taskUID = "uid_child1" const taskContent = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:Project 36 for Caldav tests PRODID:-//Vikunja Todo App//EN @@ -108,7 +107,6 @@ END:VCALENDAR` const taskUIDChild = "uid_child1" const taskContentChild = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:Project 36 for Caldav tests PRODID:-//Vikunja Todo App//EN @@ -135,7 +133,6 @@ END:VCALENDAR` const taskUID = "uid_grand_child1" const taskContent = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:Project 36 for Caldav tests PRODID:-//Vikunja Todo App//EN @@ -199,7 +196,6 @@ END:VCALENDAR` const taskUID = "uid_child1" const taskContent = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:Project 36 for Caldav tests PRODID:-//Vikunja Todo App//EN @@ -266,7 +262,6 @@ func TestSubTask_Update(t *testing.T) { const taskUID = "uid-caldav-test-child-task" const taskContent = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:Project 36 for Caldav tests PRODID:-//Vikunja Todo App//EN @@ -320,7 +315,6 @@ END:VCALENDAR` const taskUID = "uid-caldav-test-parent-task" const taskContent = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:Project 36 for Caldav tests PRODID:-//Vikunja Todo App//EN @@ -372,7 +366,6 @@ END:VCALENDAR` const taskUID = "uid-caldav-test-child-task" const taskContent = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:Project 36 for Caldav tests PRODID:-//Vikunja Todo App//EN @@ -435,7 +428,6 @@ END:VCALENDAR` const taskUID = "uid-caldav-test-child-task" const taskContent = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:Project 36 for Caldav tests PRODID:-//Vikunja Todo App//EN diff --git a/pkg/webtests/caldav_test.go b/pkg/webtests/caldav_test.go index 7bdefcfa6..f57057823 100644 --- a/pkg/webtests/caldav_test.go +++ b/pkg/webtests/caldav_test.go @@ -44,7 +44,6 @@ func TestCaldav(t *testing.T) { t.Run("Import VTODO", func(t *testing.T) { const vtodo = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:List 36 for Caldav tests PRODID:-//Vikunja Todo App//EN @@ -87,7 +86,6 @@ END:VCALENDAR` func TestCaldavSubtasks(t *testing.T) { const vtodoHeader = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:Project 36 for Caldav tests PRODID:-//Vikunja Todo App//EN @@ -253,7 +251,6 @@ func TestCaldavSubtasksDifferentLists(t *testing.T) { t.Run("Import Parent Task & Child Task Different Lists", func(t *testing.T) { const vtodoParentTask = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:Project 36 for Caldav tests PRODID:-//Vikunja Todo App//EN @@ -268,7 +265,6 @@ END:VCALENDAR` const vtodoChildTask = `BEGIN:VCALENDAR VERSION:2.0 -METHOD:PUBLISH X-PUBLISHED-TTL:PT4H X-WR-CALNAME:Project 38 for Caldav tests PRODID:-//Vikunja Todo App//EN