mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 04:42:33 +02:00
75 lines
1.6 KiB
Go
75 lines
1.6 KiB
Go
package notif
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/rs/zerolog"
|
|
"github.com/yusing/go-proxy/internal/gperr"
|
|
)
|
|
|
|
// See https://docs.ntfy.sh/publish
|
|
type Ntfy struct {
|
|
ProviderBase
|
|
Topic string `json:"topic"`
|
|
}
|
|
|
|
// Validate implements the utils.CustomValidator interface.
|
|
func (n *Ntfy) Validate() gperr.Error {
|
|
if err := n.ProviderBase.Validate(); err != nil {
|
|
return err
|
|
}
|
|
if n.URL == "" {
|
|
return gperr.New("url is required")
|
|
}
|
|
if n.Topic == "" {
|
|
return gperr.New("topic is required")
|
|
}
|
|
if n.Topic[0] == '/' {
|
|
return gperr.New("topic should not start with a slash")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetURL implements Provider.
|
|
func (n *Ntfy) GetURL() string {
|
|
if n.URL[len(n.URL)-1] == '/' {
|
|
return n.URL + n.Topic
|
|
}
|
|
return n.URL + "/" + n.Topic
|
|
}
|
|
|
|
// GetMIMEType implements Provider.
|
|
func (n *Ntfy) GetMIMEType() string {
|
|
return ""
|
|
}
|
|
|
|
// GetToken implements Provider.
|
|
func (n *Ntfy) GetToken() string {
|
|
return n.Token
|
|
}
|
|
|
|
// MarshalMessage implements Provider.
|
|
func (n *Ntfy) MarshalMessage(logMsg *LogMessage) ([]byte, error) {
|
|
return logMsg.Body.Format(n.Format)
|
|
}
|
|
|
|
// SetHeaders implements Provider.
|
|
func (n *Ntfy) SetHeaders(logMsg *LogMessage, headers http.Header) {
|
|
headers.Set("Title", logMsg.Title)
|
|
|
|
switch logMsg.Level {
|
|
// warning (or other unspecified) uses default priority
|
|
case zerolog.FatalLevel:
|
|
headers.Set("Priority", "urgent")
|
|
case zerolog.ErrorLevel:
|
|
headers.Set("Priority", "high")
|
|
case zerolog.InfoLevel:
|
|
headers.Set("Priority", "low")
|
|
case zerolog.DebugLevel:
|
|
headers.Set("Priority", "min")
|
|
}
|
|
|
|
if n.Format == LogFormatMarkdown {
|
|
headers.Set("Markdown", "yes")
|
|
}
|
|
}
|