From 989a40ad42bf979f6ff5240675b80cd23827f823 Mon Sep 17 00:00:00 2001 From: das_j Date: Thu, 6 Feb 2025 12:38:27 +0000 Subject: [PATCH] fix(caldav): return other status codes than 500 when projects are not found (#3065) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This allows CalDav clients to behave properly. In particular, DavX5 will error out on syncing the collections list rather than removing deleted projects from its local cache. Resolves: https://community.vikunja.io/t/deleting-a-project-breaks-caldav/3315/3 Co-authored-by: Janne Heß Reviewed-on: https://kolaente.dev/vikunja/vikunja/pulls/3065 Reviewed-by: konrad Co-authored-by: das_j Co-committed-by: das_j --- pkg/routes/caldav/handler.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkg/routes/caldav/handler.go b/pkg/routes/caldav/handler.go index 88bbb5726..d86cb75a9 100644 --- a/pkg/routes/caldav/handler.go +++ b/pkg/routes/caldav/handler.go @@ -20,6 +20,7 @@ import ( "bytes" "fmt" "io" + "net/http" "reflect" "strconv" "strings" @@ -46,6 +47,9 @@ func getBasicAuthUserFromContext(c echo.Context) (*user.User, error) { // ProjectHandler returns all tasks from a project func ProjectHandler(c echo.Context) error { project, err := getProjectFromParam(c) + if err != nil && models.IsErrProjectDoesNotExist(err) { + return c.String(http.StatusNotFound, "Project not found") + } if err != nil { return err } @@ -69,7 +73,8 @@ func ProjectHandler(c echo.Context) error { if vtodo != "" && strings.HasPrefix(vtodo, `BEGIN:VCALENDAR`) { storage.task, err = caldav2.ParseTaskFromVTODO(vtodo) if err != nil { - return echo.ErrInternalServerError.SetInternal(err) + log.Warningf("[CALDAV] Failed to parse task: %v", err) + return models.ErrInvalidData{Message: "Invalid task"} } }