summaryrefslogtreecommitdiff
path: root/internal/handlers/widget.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/handlers/widget.go')
-rw-r--r--internal/handlers/widget.go13
1 files changed, 11 insertions, 2 deletions
diff --git a/internal/handlers/widget.go b/internal/handlers/widget.go
index cee2ec8..a56a017 100644
--- a/internal/handlers/widget.go
+++ b/internal/handlers/widget.go
@@ -7,12 +7,17 @@ import (
"time"
"task-dashboard/internal/api"
+ "task-dashboard/internal/config"
"task-dashboard/internal/models"
)
// WidgetAuthMiddleware validates the static bearer token for widget API endpoints.
func WidgetAuthMiddleware(token string, next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ if token == "" {
+ http.Error(w, "unauthorized", http.StatusUnauthorized)
+ return
+ }
auth := r.Header.Get("Authorization")
if !strings.HasPrefix(auth, "Bearer ") || strings.TrimPrefix(auth, "Bearer ") != token {
http.Error(w, "unauthorized", http.StatusUnauthorized)
@@ -38,6 +43,9 @@ func TimelineItemToWidgetItem(item models.TimelineItem) models.WidgetItem {
wi.Type = "event"
case models.TimelineItemTypeMeal:
wi.Type = "event"
+ case models.TimelineItemTypeCard, models.TimelineItemTypeGTask:
+ wi.Type = "task"
+ // not completable via widget API
default:
wi.Type = "task"
wi.Completable = item.Source == "todoist"
@@ -60,8 +68,9 @@ func TimelineItemToWidgetItem(item models.TimelineItem) models.WidgetItem {
// HandleWidgetGet returns today's timeline items as JSON for the Android widget.
func (h *Handler) HandleWidgetGet(w http.ResponseWriter, r *http.Request) {
- now := time.Now()
- start := now.Truncate(24 * time.Hour)
+ now := config.Now()
+ tz := config.GetDisplayTimezone()
+ start := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, tz)
end := start.Add(24 * time.Hour)
items, err := BuildTimeline(r.Context(), h.store, start, end)