package service import ( "encoding/json" "github.com/gofiber/fiber/v3" "github.com/gofiber/fiber/v3/log" "htwkalender-ical/model" "htwkalender-ical/service/ical" "log/slog" "net/http" ) // add routes to the app instance for the data-manager ical service // with golang fiber func AddFeedRoutes(app *fiber.App) { // Define a route for the GET method on the root path '/' app.Get("/api/feed", func(c fiber.Ctx) error { token := c.Query("token") results, err := ical.Feed(token) if err != nil { slog.Error("Failed to get feed", "error", err) return c.SendStatus(fiber.StatusInternalServerError) } c.Response().Header.Set("Content-type", "text/calendar") c.Response().Header.Set("charset", "utf-8") c.Response().Header.Set("Content-Disposition", "inline") c.Response().Header.Set("filename", "calendar.ics") return c.SendString(results) }) // Define a route for the POST method on the root path '/api/feed' app.Post("/api/feed", func(c fiber.Ctx) error { modules := []model.FeedCollection{} //obtain the body of the request err := json.Unmarshal(c.Body(), &modules) if err != nil { log.Error("Failed to unmarshal request body", "error", err) return c.SendStatus(fiber.StatusBadRequest) } //create a new feed token, err := ical.CreateFeed(modules) if err != nil { println(err) log.Error("Failed to create feed", "error", err) return c.SendStatus(fiber.StatusInternalServerError) } return c.JSON(token) }) // Define a route for the GET method on the root path '/' app.Get("/api/collections/feeds/records/:token", func(c fiber.Ctx) error { token := c.Params("token") results, err := ical.FeedRecord(token) if err != nil { slog.Error("Failed to get feed", "error", err) return c.SendStatus(fiber.StatusInternalServerError) } c.Response().Header.Set("Content-type", "application/json; charset=UTF-8") return c.JSON(results) }) app.Delete("/api/feed", func(c fiber.Ctx) error { token := c.Query("token") err := ical.DeleteFeedRecord(token) if err != nil { slog.Error("Feed could not be deleted", "error", err) return c.JSON(http.StatusNotFound, "Feed could not be deleted") } else { return c.JSON(http.StatusOK, "Feed deleted") } }) app.Put("/api/feed", func(c fiber.Ctx) error { token := c.Query("token") return c.JSON(http.StatusOK, "token: "+token) }) app.Head("/api/feed", func(c fiber.Ctx) error { return c.JSON(http.StatusOK, "") }) app.Add([]string{"PROPFIND"}, "/api/feed", func(c fiber.Ctx) error { return c.JSON(http.StatusOK, "") }) // Route for Thunderbird to get calendar server information // Response is a 200 OK without additional content app.Add([]string{"PROPFIND"}, "/.well-known/caldav", func(c fiber.Ctx) error { return c.JSON(http.StatusOK, "") }) // Route for Thunderbird to get calendar server information // Response is a 200 OK without additional content app.Add([]string{"PROPFIND"}, "/", func(c fiber.Ctx) error { return c.JSON(http.StatusOK, "") }) }