1 e20d6baf 2021-06-15 o package pushover
11 e20d6baf 2021-06-15 o const apiurl = "https://api.pushover.net/1/messages.json"
12 e20d6baf 2021-06-15 o const MaxMsgLength = 1024
13 e20d6baf 2021-06-15 o const MaxTitleLength = 250
15 e20d6baf 2021-06-15 o // Message represents a message in the Pushover Message API.
16 e20d6baf 2021-06-15 o type Message struct {
24 e20d6baf 2021-06-15 o type response struct {
30 e20d6baf 2021-06-15 o type errors []string
32 e20d6baf 2021-06-15 o func (e errors) Error() string {
33 e20d6baf 2021-06-15 o return strings.Join(e, ", ")
36 e20d6baf 2021-06-15 o func (m *Message) validate() error {
37 e20d6baf 2021-06-15 o nchar := strings.Count(m.Message, "")
38 e20d6baf 2021-06-15 o if nchar > MaxMsgLength {
39 e20d6baf 2021-06-15 o return fmt.Errorf("%d character message too long, allowed %d characters", nchar, MaxMsgLength)
41 e20d6baf 2021-06-15 o nchar = strings.Count(m.Title, "")
42 e20d6baf 2021-06-15 o if nchar > MaxTitleLength {
43 e20d6baf 2021-06-15 o return fmt.Errorf("%d-character title too long, allowed %d characters", nchar, MaxTitleLength)
48 e20d6baf 2021-06-15 o // Push sends the Message m to Pushover.
49 e20d6baf 2021-06-15 o func Push(m Message) error {
50 e20d6baf 2021-06-15 o if err := m.validate(); err != nil {
53 e20d6baf 2021-06-15 o req := url.Values{}
54 e20d6baf 2021-06-15 o req.Add("token", m.Token)
55 e20d6baf 2021-06-15 o req.Add("user", m.User)
56 e20d6baf 2021-06-15 o req.Add("title", m.Title)
57 e20d6baf 2021-06-15 o req.Add("message", m.Message)
58 e20d6baf 2021-06-15 o resp, err := http.PostForm(apiurl, req)
59 e20d6baf 2021-06-15 o if err != nil {
62 e20d6baf 2021-06-15 o defer resp.Body.Close()
63 e20d6baf 2021-06-15 o if resp.StatusCode == http.StatusOK {
67 e20d6baf 2021-06-15 o var presp response
68 e20d6baf 2021-06-15 o if err := json.NewDecoder(resp.Body).Decode(&presp); err != nil {
69 e20d6baf 2021-06-15 o return fmt.Errorf("decode error response: %v", err)
71 e20d6baf 2021-06-15 o return presp.Errors