Files
gl-sms-test/main.go
T

206 lines
4.1 KiB
Go
Raw Normal View History

2026-06-02 16:15:17 +02:00
package main
import (
"fmt"
"encoding/json"
"net/http"
"strings"
"os"
"context"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/sns"
)
type App struct {
requestData requestData
}
type requestData struct {
method string
protocol string
content_length int64
transfer_encoding []string
remote_address string
remote_port string
request_uri string
//tls_metadata http.tls.ConnectionState
headers http.Header
//body string
body []byte
//form_data http.url.Values
url string
}
type SMS struct {
Message string `json:"message"`
DestNo string `json:"to"`
}
func sendResponse(w http.ResponseWriter) {
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
w.WriteHeader(http.StatusServiceUnavailable)
//fmt.Fprintln(w, "Hello World!")
}
func sendResponse2(w http.ResponseWriter) {
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
w.WriteHeader(http.StatusOK)
//fmt.Fprintln(w, "Hello World!")
}
func sendResponse3(w http.ResponseWriter) {
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
w.WriteHeader(http.StatusInternalServerError)
//fmt.Fprintln(w, "Hello World!")
}
func checkIP(reqData *requestData, w http.ResponseWriter) int {
var whitelisted_ip []string
whitelisted_ip = append(whitelisted_ip, "105.233.34.134")
whitelisted_ip = append(whitelisted_ip, "156.38.200.7")
for _,ip:= range whitelisted_ip {
if ip == reqData.remote_address {
fmt.Println("Match found! ", reqData.remote_address)
sendResponse2(w)
return 0
}
}
sendResponse(w)
return 1
}
func sendSMS(reqData *requestData, sms_deets *SMS, w http.ResponseWriter) int {
//err := json.Unmarshal(reqData.body, &sms_deets)
//if err != nil {
//sendResponse3(w)
// return 1
//}
err := os.Setenv("AWS_ACCESS_KEY", "AKIARTV6SB2DHXEZW553")
if err != nil {
// log error
sendResponse3(w)
}
err = os.Setenv("AWS_SECRET_ACCESS_KEY", "h7KFrorkmPY1jWwO2foOi24aRHEYFS0XxQIjituv")
if err != nil {
// log error
sendResponse3(w)
}
err = os.Setenv("AWS_REGION", "eu-north-1")
if err != nil {
// log error
sendResponse3(w)
}
cfg, err2 := config.LoadDefaultConfig(context.TODO(), config.WithRegion("eu-north-1"))
if err2 != nil {
fmt.Println("CONFIG ERROR!!!")
}
client := sns.NewFromConfig(cfg)
input := &sns.PublishInput {
Message: aws.String(sms_deets.Message),
PhoneNumber: aws.String(sms_deets.DestNo),
}
result, err3 := client.Publish(context.TODO(), input)
if err3 != nil {
fmt.Println("ASDAD")
} else {
fmt.Println(*result.MessageId)
}
fmt.Println("\n")
fmt.Println("Form Data")
fmt.Println("=========")
fmt.Println("Json Message: ", sms_deets.Message)
fmt.Println("Json DestNo: ", sms_deets.DestNo)
fmt.Println("\n")
// Decode the incoming json request
/*decoder := json.NewDecoder(r.Body)
_ = decoder
err := decoder.Decode(&sms_deets)
if err != nil {
fmt.Println("ERROR!")
}
defer r.Body.Close()*/
os.Unsetenv("AWS_ACCESS_KEY")
os.Unsetenv("AWS_SECRET_ACCESS_KEY")
os.Unsetenv("AWS_REGION")
return 0
}
func getPostData(w http.ResponseWriter, r *http.Request) {
// add logging
meh := strings.Split(r.RemoteAddr, ":")
ip := meh[0]
port := meh[1]
reqData := &requestData {
method: r.Method,
protocol: r.Proto,
content_length: r.ContentLength,
transfer_encoding: r.TransferEncoding,
remote_address: ip,
remote_port: port,
request_uri: r.RequestURI,
//tls_metadata: r.TLS,
headers: r.Header,
body: nil,
url: r.URL.String(),
//r.postForm: r.PostForm,
}
// Check if the source ip is whitelisted
e := checkIP(reqData, w)
if e > 0 {
return
}
sms_deets := new (SMS)
// Decode the incoming json request
decoder := json.NewDecoder(r.Body)
err := decoder.Decode(&sms_deets)
if err != nil {
// Log this error fmt.Println("ERROR!")
sendResponse3(w)
}
defer r.Body.Close()
sendSMS(reqData, sms_deets, w)
}
func main () {
http.HandleFunc("/send_sms", getPostData)
fmt.Println("Starting HTTPS Server...")
http.ListenAndServeTLS(":8443", "/etc/letsencrypt/live/prd-jhb-ep01.cm-ha.co.za/fullchain.pem", "/etc/letsencrypt/live/prd-jhb-ep01.cm-ha.co.za/privkey.pem", nil)
}