Philipp Heckel 3 лет назад
Родитель
Сommit
26efd481e3
2 измененных файлов с 23 добавлено и 0 удалено
  1. 15 0
      server/server.go
  2. 8 0
      server/types.go

+ 15 - 0
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)
 		}

+ 8 - 0
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"`