From 26efd481e30140e682d4c6b9f988e4c54a92b847 Mon Sep 17 00:00:00 2001 From: Philipp Heckel Date: Sat, 16 Apr 2022 16:17:58 -0400 Subject: [PATCH] WIP Actions --- server/server.go | 15 +++++++++++++++ server/types.go | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/server/server.go b/server/server.go index c492eea..1fad467 100644 --- a/server/server.go +++ b/server/server.go @@ -535,6 +535,14 @@ func (s *Server) parsePublishParams(r *http.Request, v *visitor, m *message) (ca } m.Time = delay.Unix() } + actionsStr := readParam(r, "x-actions", "actions", "action") + if actionsStr != "" { + actions := make([]action, 0) + if err := json.Unmarshal([]byte(actionsStr), &actions); err != nil { + return false, false, "", false, errHTTPBadRequestDelayNoCache // FIXME error + } + m.Actions = actions + } unifiedpush = readBoolParam(r, false, "x-unifiedpush", "unifiedpush", "up") // see GET too! if unifiedpush { firebase = false @@ -1150,6 +1158,13 @@ func (s *Server) transformBodyJSON(next handleFunc) handleFunc { if m.Click != "" { r.Header.Set("X-Click", m.Click) } + if len(m.Actions) > 0 { + actionsStr, err := json.Marshal(m.Actions) + if err != nil { + return errHTTPBadRequestJSONInvalid + } + r.Header.Set("X-Actions", string(actionsStr)) + } if m.Email != "" { r.Header.Set("X-Email", m.Email) } diff --git a/server/types.go b/server/types.go index 049e702..b037910 100644 --- a/server/types.go +++ b/server/types.go @@ -27,6 +27,7 @@ type message struct { Priority int `json:"priority,omitempty"` Tags []string `json:"tags,omitempty"` Click string `json:"click,omitempty"` + Actions []action `json:"actions,omitempty"` Attachment *attachment `json:"attachment,omitempty"` Title string `json:"title,omitempty"` Message string `json:"message,omitempty"` @@ -42,6 +43,12 @@ type attachment struct { Owner string `json:"-"` // IP address of uploader, used for rate limiting } +type action struct { + Action string `json:"action"` + Label string `json:"label"` + URL string `json:"URL,omitempty"` +} + // publishMessage is used as input when publishing as JSON type publishMessage struct { Topic string `json:"topic"` @@ -50,6 +57,7 @@ type publishMessage struct { Priority int `json:"priority"` Tags []string `json:"tags"` Click string `json:"click"` + Actions []action `json:"actions"` Attach string `json:"attach"` Filename string `json:"filename"` Email string `json:"email"`