fuzzyworld

find-stone-beer / files / pushover.go

pushover.go

Blame: the commit that last changed each line · file · history

74d9b692 2023-08-23 Pavel Safronov1package main
2
3import (
4 "fmt"
5 "net/http"
6 "net/url"
7 "os"
8)
9
10const (
abecb80c 2023-08-27 Pavel Safronov11 pushoverTokenEnvVar = "PUSHOVER_TOKEN"
12 pushoverUserTokenEnvVar = "PUSHOVER_USER_TOKEN"
13 maxMessageLength = 1024
14 // this project runs daily, so this is the max TTL for now
15 // if this project is run more frequently, then this value should be changed
16 ttlDays = 2
17
18 // automatically calculated, do not change
19 ttlSeconds = ttlDays * 24 * 60 * 60
74d9b692 2023-08-23 Pavel Safronov20)
21
abecb80c 2023-08-27 Pavel Safronov22func CombineUpToMaxMessageLength(prefix string, moreInfo string, messages []string) string {
23 var combinedMessage = prefix
24 for _, message := range messages {
25 newMessage := combinedMessage + message
26 if len(newMessage)+len(moreInfo) > maxMessageLength {
27 combinedMessage += moreInfo
28 break
29 }
30 combinedMessage = newMessage
31 }
32 return combinedMessage
33}
34
74d9b692 2023-08-23 Pavel Safronov35func SendPushoverMessage(message string) error {
abecb80c 2023-08-27 Pavel Safronov36 if len(message) > maxMessageLength {
37 return fmt.Errorf("message is too long: %d > %d", len(message), maxMessageLength)
38 }
74d9b692 2023-08-23 Pavel Safronov39 postUrl := "https://api.pushover.net/1/messages.json"
40
abecb80c 2023-08-27 Pavel Safronov41 pushoverToken := os.Getenv(pushoverTokenEnvVar)
42 pushoverUser := os.Getenv(pushoverUserTokenEnvVar)
74d9b692 2023-08-23 Pavel Safronov43 if pushoverUser == "" || pushoverToken == "" {
abecb80c 2023-08-27 Pavel Safronov44 return fmt.Errorf("missing environment variable %s or %s", pushoverUserTokenEnvVar, pushoverTokenEnvVar)
74d9b692 2023-08-23 Pavel Safronov45 }
46
47 response, err := http.PostForm(postUrl, url.Values{
48 "token": {pushoverToken},
49 "user": {pushoverUser},
50 "message": {message},
63620b2d 2023-08-23 Pavel Safronov51 "html": {"1"},
abecb80c 2023-08-27 Pavel Safronov52 "ttl": {fmt.Sprintf("%d", ttlSeconds)},
74d9b692 2023-08-23 Pavel Safronov53 })
54
55 if err != nil {
56 return err
57 }
58 defer response.Body.Close()
59
60 isNot200 := response.StatusCode != 200
61 if isNot200 {
62 return fmt.Errorf("pushover returned status code %d: %s", response.StatusCode, response.Status)
63 }
64 return nil
65}