forked from mirrors/ntfy
1
0
Fork 0
ntfy/server/message.go

72 lines
1.9 KiB
Go
Raw Normal View History

package server
2021-10-29 17:58:14 +00:00
import (
"heckel.io/ntfy/util"
"time"
)
// List of possible events
const (
openEvent = "open"
keepaliveEvent = "keepalive"
2021-10-29 17:58:14 +00:00
messageEvent = "message"
)
const (
messageIDLength = 10
)
// message represents a message published to a topic
type message struct {
2022-01-02 22:56:12 +00:00
ID string `json:"id"` // Random message ID
Time int64 `json:"time"` // Unix time in seconds
Event string `json:"event"` // One of the above
Topic string `json:"topic"`
Priority int `json:"priority,omitempty"`
Tags []string `json:"tags,omitempty"`
Title string `json:"title,omitempty"`
Message string `json:"message,omitempty"`
Attachment *attachment `json:"attachment,omitempty"`
}
type attachment struct {
2022-01-04 18:45:29 +00:00
Name string `json:"name"`
Type string `json:"type"`
Size int64 `json:"size"`
Expires int64 `json:"expires"`
PreviewURL string `json:"preview_url"`
URL string `json:"url"`
}
// messageEncoder is a function that knows how to encode a message
type messageEncoder func(msg *message) (string, error)
// newMessage creates a new message with the current timestamp
2021-10-29 17:58:14 +00:00
func newMessage(event, topic, msg string) *message {
return &message{
2021-11-27 21:12:08 +00:00
ID: util.RandomString(messageIDLength),
Time: time.Now().Unix(),
Event: event,
Topic: topic,
Priority: 0,
Tags: nil,
Title: "",
Message: msg,
}
}
// newOpenMessage is a convenience method to create an open message
2021-10-29 17:58:14 +00:00
func newOpenMessage(topic string) *message {
return newMessage(openEvent, topic, "")
}
// newKeepaliveMessage is a convenience method to create a keepalive message
2021-10-29 17:58:14 +00:00
func newKeepaliveMessage(topic string) *message {
return newMessage(keepaliveEvent, topic, "")
}
// newDefaultMessage is a convenience method to create a notification message
2021-10-29 17:58:14 +00:00
func newDefaultMessage(topic, msg string) *message {
return newMessage(messageEvent, topic, msg)
}