Add support for sending SMS
This commit is contained in:
parent
8ab0b78e6e
commit
7abaebe496
5 changed files with 249 additions and 75 deletions
58
comms/email.go
Normal file
58
comms/email.go
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
package comms
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
|
||||
"github.com/Gleipnir-Technology/nidus-sync/config"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type AttachmentRequest struct {
|
||||
Filename string `json:"filename"`
|
||||
Content string `json:"content"`
|
||||
}
|
||||
|
||||
type EmailRequest struct {
|
||||
From string `json:"from"`
|
||||
To string `json:"to"`
|
||||
CC []string `json:"cc,omitempty"`
|
||||
BCC []string `json:"bcc,omitempty"`
|
||||
Subject string `json:"subject"`
|
||||
Text string `json:"text"`
|
||||
HTML string `json:"html,omitempty"`
|
||||
Attachments []AttachmentRequest `json:"attachments,omitempty"`
|
||||
Sender string `json:"sender"`
|
||||
ReplyTo string `json:"replyTo,omitempty"`
|
||||
InReplyTo string `json:"inReplyTo,omitempty"`
|
||||
References []string `json:"references,omitempty"`
|
||||
}
|
||||
|
||||
type EmailResponse struct {
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
func SendEmail(email EmailRequest) error {
|
||||
url := "https://api.forwardemail.net/v1/emails"
|
||||
|
||||
payload, err := json.Marshal(email)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to marshal email request: %w", err)
|
||||
}
|
||||
//payload := strings.NewReader("{\n \"from\": \"\",\n \"to\": \"\",\n \"cc\": \"\",\n \"bcc\": \"\",\n \"subject\": \"\",\n \"text\": \"\",\n \"html\": \"\",\n \"attachments\": [\n {}\n ],\n \"sender\": \"\",\n \"replyTo\": \"\",\n \"inReplyTo\": \"\",\n \"references\": \"\",\n \"attachDataUrls\": true,\n \"watchHtml\": \"\",\n \"amp\": \"\",\n \"icalEvent\": {},\n \"alternatives\": [\n {}\n ],\n \"encoding\": \"\",\n \"raw\": \"\",\n \"textEncoding\": \"quoted-printable\",\n \"priority\": \"high\",\n \"headers\": {\"ANY_ADDITIONAL_PROPERTY\": \"anything\"},\n \"messageId\": \"\",\n \"date\": \"\",\n \"list\": {},\n \"requireTLS\": true\n}")
|
||||
|
||||
req, _ := http.NewRequest("POST", url, bytes.NewReader(payload))
|
||||
req.SetBasicAuth(config.ForwardEmailAPIToken, "")
|
||||
req.Header.Add("Content-Type", "application/json")
|
||||
|
||||
res, _ := http.DefaultClient.Do(req)
|
||||
|
||||
defer res.Body.Close()
|
||||
body, _ := io.ReadAll(res.Body)
|
||||
|
||||
log.Info().Str("status", res.Status).Str("request_body", string(payload)).Str("response_body", string(body)).Msg("Attempted to send email")
|
||||
return nil
|
||||
}
|
||||
58
comms/sms.go
Normal file
58
comms/sms.go
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
package comms
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/Gleipnir-Technology/nidus-sync/config"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
var VOIP_MS_API = "https://voip.ms/api/v1/rest.php"
|
||||
|
||||
type SendSMSResponse struct {
|
||||
Status string `json:"status"`
|
||||
SMS int `json:"sms"`
|
||||
}
|
||||
func SendSMS(to string, content string) error {
|
||||
if len(content) > 160 {
|
||||
return errors.New("Message content is more than 160 characters")
|
||||
}
|
||||
params := url.Values{}
|
||||
params.Add("api_password", config.VoipMSPassword)
|
||||
params.Add("api_username", config.VoipMSUsername)
|
||||
params.Add("method", "sendSMS")
|
||||
params.Add("did", config.VoipMSNumber)
|
||||
params.Add("dst", to)
|
||||
params.Add("message", content)
|
||||
// Construct the URL with query parameters
|
||||
full_url := VOIP_MS_API + "?" + params.Encode()
|
||||
|
||||
// Make the HTTP request
|
||||
resp, err := http.Get(full_url)
|
||||
if err != nil {
|
||||
log.Warn().Err(err).Str("url", full_url).Msg("Failed to make request to Voip.MS")
|
||||
return fmt.Errorf("Error making request: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// Read the response body
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
log.Warn().Err(err).Str("url", full_url).Msg("Failed to read Voip.MS response body")
|
||||
return fmt.Errorf("Failed to read response: %w", err)
|
||||
}
|
||||
log.Info().Str("response", string(body)).Msg("Response from Voip.MS")
|
||||
|
||||
// Parse the JSON response
|
||||
var response SendSMSResponse
|
||||
err = json.Unmarshal(body, &response)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to unmarshal JSON response: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue