71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package server
|
|
|
|
import (
|
|
"heckel.io/ntfy/util"
|
|
"time"
|
|
)
|
|
|
|
// List of possible events
|
|
const (
|
|
openEvent = "open"
|
|
keepaliveEvent = "keepalive"
|
|
messageEvent = "message"
|
|
)
|
|
|
|
const (
|
|
messageIDLength = 10
|
|
)
|
|
|
|
// message represents a message published to a topic
|
|
type message struct {
|
|
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 {
|
|
Name string `json:"name"`
|
|
Type string `json:"type"`
|
|
Size int64 `json:"size"`
|
|
Expires int64 `json:"expires"`
|
|
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
|
|
func newMessage(event, topic, msg string) *message {
|
|
return &message{
|
|
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
|
|
func newOpenMessage(topic string) *message {
|
|
return newMessage(openEvent, topic, "")
|
|
}
|
|
|
|
// newKeepaliveMessage is a convenience method to create a keepalive message
|
|
func newKeepaliveMessage(topic string) *message {
|
|
return newMessage(keepaliveEvent, topic, "")
|
|
}
|
|
|
|
// newDefaultMessage is a convenience method to create a notification message
|
|
func newDefaultMessage(topic, msg string) *message {
|
|
return newMessage(messageEvent, topic, msg)
|
|
}
|