mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2025-08-11 14:13:49 +02:00
feat:#56 added etag hash
This commit is contained in:
@@ -23,6 +23,7 @@ import (
|
||||
"htwkalender/ical/model"
|
||||
"htwkalender/ical/service/connector"
|
||||
htwkalenderGrpc "htwkalender/ical/service/connector/grpc"
|
||||
"htwkalender/ical/service/functions"
|
||||
"log/slog"
|
||||
"time"
|
||||
)
|
||||
@@ -31,7 +32,7 @@ const expirationTime = 5 * time.Minute
|
||||
|
||||
var FeedDeletedError = fmt.Errorf("feed deleted")
|
||||
|
||||
func Feed(app model.AppType, token string) (string, error) {
|
||||
func Feed(app model.AppType, token string) (string, string, error) {
|
||||
|
||||
var events model.Events
|
||||
modules := map[string]model.FeedCollection{}
|
||||
@@ -47,17 +48,17 @@ func Feed(app model.AppType, token string) (string, error) {
|
||||
// get feed by token
|
||||
feed, err := htwkalenderGrpc.GetFeed(token, app.GrpcClient)
|
||||
if err != nil {
|
||||
return "", err
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
if feed.Deleted {
|
||||
return "", FeedDeletedError
|
||||
return "", "", FeedDeletedError
|
||||
}
|
||||
|
||||
// Get all events for modules
|
||||
events, err = htwkalenderGrpc.GetEvents(feed.Modules, app.GrpcClient)
|
||||
if err != nil {
|
||||
return "", err
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
// Sort events by start date
|
||||
@@ -68,11 +69,14 @@ func Feed(app model.AppType, token string) (string, error) {
|
||||
}
|
||||
}
|
||||
|
||||
// Generate one Hash for E-TAG from all events and modules
|
||||
etag := functions.HashString(events.String() + fmt.Sprint(modules))
|
||||
|
||||
b := bytes.Buffer{}
|
||||
goics.NewICalEncode(&b).Encode(IcalModel{Events: events, Mapping: modules})
|
||||
icalFeed := &model.FeedModel{Content: b.String(), ExpiresAt: model.JSONTime(time.Now().Add(expirationTime))}
|
||||
|
||||
return icalFeed.Content, nil
|
||||
return icalFeed.Content, etag, nil
|
||||
}
|
||||
|
||||
func FeedRecord(app model.AppType, token string) (model.FeedRecord, error) {
|
||||
|
@@ -34,7 +34,7 @@ func AddFeedRoutes(app model.AppType) {
|
||||
app.Fiber.Get("/api/feed", func(c fiber.Ctx) error {
|
||||
|
||||
token := c.Query("token")
|
||||
results, err := ical.Feed(app, token)
|
||||
results, eTag, err := ical.Feed(app, token)
|
||||
|
||||
if errors.Is(err, ical.FeedDeletedError) {
|
||||
return c.SendStatus(fiber.StatusGone)
|
||||
@@ -48,6 +48,7 @@ func AddFeedRoutes(app model.AppType) {
|
||||
c.Response().Header.Set("charset", "utf-8")
|
||||
c.Response().Header.Set("Content-Disposition", "inline")
|
||||
c.Response().Header.Set("filename", "calendar.ics")
|
||||
c.Response().Header.Set("ETag", eTag)
|
||||
|
||||
return c.SendString(results)
|
||||
})
|
||||
|
Reference in New Issue
Block a user