You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gosuv/vendor/github.com/codeskyblue/gosuv/pushover/pushover.go

64 lines
1.3 KiB

package pushover
import (
"encoding/json"
"errors"
"fmt"
"log"
"net/http"
"net/url"
"strings"
"time"
)
const (
// API is the Pushover API endpoint.
API = "https://api.pushover.net/1/messages.json"
)
type apiResponse struct {
Info string `json:"info"`
Status int `json:"status"`
Request string `json:"request"`
Errors []string `json:"errors"`
Token string `json:"token"`
}
type Params struct {
Token string
User string
Title string
Message string
}
// Notify sends a push request to the Pushover API.
func Notify(p Params) error {
vals := make(url.Values)
vals.Set("token", p.Token)
vals.Set("user", p.User)
vals.Set("message", p.Message)
vals.Set("title", p.Title)
log.Println(vals.Encode())
webClient := &http.Client{Timeout: 30 * time.Second}
resp, err := webClient.PostForm(API, vals)
if err != nil {
return err
}
defer resp.Body.Close()
log.Println("posted")
var r apiResponse
if err := json.NewDecoder(resp.Body).Decode(&r); err != nil {
return fmt.Errorf("decoding response: %s", err)
}
if r.Status != 1 {
return errors.New(strings.Join(r.Errors, ": ")) //noti.APIError{Site: "Pushover", Msg: strings.Join(r.Errors, ": ")}
} else if strings.Contains(r.Info, "no active devices") {
return errors.New(r.Info) //noti.APIError{Site: "Pushover", Msg: r.Info}
}
return nil
}