kas/conn/twilio/config.go

84 lines
1.6 KiB
Go

package twilio
import (
"errors"
"fmt"
"log"
"net/http"
"net/url"
)
type Config struct {
Contacts []string `yaml:"contacts"`
contacts map[string]bool
AccountSID string `yaml:"account_sid"`
AuthToken string `yaml:"auth_token"`
Number string `yaml:"telno"` // kas' telno
}
func (cfg *Config) postURL() string {
return fmt.Sprintf("https://api.twilio.com/2010-04-01/Accounts/%s/Messages.json",
cfg.AccountSID)
}
func (cfg *Config) buildContacts() {
cfg.contacts = map[string]bool{}
for _, telno := range cfg.Contacts {
cfg.contacts[telno] = true
}
}
func (cfg *Config) NumberAuthorized(s string) bool {
if cfg.contacts == nil || len(cfg.contacts) != len(cfg.Contacts) {
cfg.buildContacts()
}
return cfg.contacts[s]
}
func validate(cfg *Config) error {
if len(cfg.Contacts) == 0 {
return errors.New("twilio: no authorized numbers (you won't be able to receive any messages)")
}
if cfg.AccountSID == "" {
return errors.New("twilio: missing account SID")
}
if cfg.AuthToken == "" {
return errors.New("twilio: missing auth token")
}
if cfg.Number == "" {
return errors.New("twilio: no number configured")
}
return nil
}
var config *Config
func SetConfig(cfg *Config) error {
if err := validate(cfg); err != nil {
return err
}
config = cfg
return nil
}
func Send(to string, message string) error {
form := url.Values{
"Body": {message},
"From": {config.Number},
"To": {to},
}
resp, err := http.PostForm(config.postURL(), form)
if err != nil {
log.Printf("twilio send: %s", err)
}
resp.Body.Close()
return nil
}