WIP Actions

pull/212/head
Philipp Heckel 2022-04-16 16:17:58 -04:00
parent 06fd7327de
commit 26efd481e3
2 changed files with 23 additions and 0 deletions

View File

@ -535,6 +535,14 @@ func (s *Server) parsePublishParams(r *http.Request, v *visitor, m *message) (ca
} }
m.Time = delay.Unix() 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! unifiedpush = readBoolParam(r, false, "x-unifiedpush", "unifiedpush", "up") // see GET too!
if unifiedpush { if unifiedpush {
firebase = false firebase = false
@ -1150,6 +1158,13 @@ func (s *Server) transformBodyJSON(next handleFunc) handleFunc {
if m.Click != "" { if m.Click != "" {
r.Header.Set("X-Click", 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 != "" { if m.Email != "" {
r.Header.Set("X-Email", m.Email) r.Header.Set("X-Email", m.Email)
} }

View File

@ -27,6 +27,7 @@ type message struct {
Priority int `json:"priority,omitempty"` Priority int `json:"priority,omitempty"`
Tags []string `json:"tags,omitempty"` Tags []string `json:"tags,omitempty"`
Click string `json:"click,omitempty"` Click string `json:"click,omitempty"`
Actions []action `json:"actions,omitempty"`
Attachment *attachment `json:"attachment,omitempty"` Attachment *attachment `json:"attachment,omitempty"`
Title string `json:"title,omitempty"` Title string `json:"title,omitempty"`
Message string `json:"message,omitempty"` Message string `json:"message,omitempty"`
@ -42,6 +43,12 @@ type attachment struct {
Owner string `json:"-"` // IP address of uploader, used for rate limiting 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 // publishMessage is used as input when publishing as JSON
type publishMessage struct { type publishMessage struct {
Topic string `json:"topic"` Topic string `json:"topic"`
@ -50,6 +57,7 @@ type publishMessage struct {
Priority int `json:"priority"` Priority int `json:"priority"`
Tags []string `json:"tags"` Tags []string `json:"tags"`
Click string `json:"click"` Click string `json:"click"`
Actions []action `json:"actions"`
Attach string `json:"attach"` Attach string `json:"attach"`
Filename string `json:"filename"` Filename string `json:"filename"`
Email string `json:"email"` Email string `json:"email"`