From e18783906f4baa207b96f53570076c07efedaecb Mon Sep 17 00:00:00 2001 From: vessaldaneshvar <52780555+vessaldaneshvar@users.noreply.github.com> Date: Wed, 6 Oct 2021 22:08:43 +0330 Subject: [PATCH 1/3] add Ghasedak Sms Provider --- cmd/sachet/config.go | 5 ++- cmd/sachet/main.go | 6 +++- examples/config.yaml | 7 ++++ provider/ghasedak/ghasedak.go | 60 +++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 provider/ghasedak/ghasedak.go diff --git a/cmd/sachet/config.go b/cmd/sachet/config.go index 9720618..7557309 100644 --- a/cmd/sachet/config.go +++ b/cmd/sachet/config.go @@ -1,14 +1,16 @@ package main import ( - "github.com/messagebird/sachet/provider/esendex" "io/ioutil" + "github.com/messagebird/sachet/provider/esendex" + "github.com/messagebird/sachet/provider/aliyun" "github.com/messagebird/sachet/provider/aspsms" "github.com/messagebird/sachet/provider/cm" "github.com/messagebird/sachet/provider/exotel" "github.com/messagebird/sachet/provider/freemobile" + "github.com/messagebird/sachet/provider/ghasedak" "github.com/messagebird/sachet/provider/infobip" "github.com/messagebird/sachet/provider/kannel" "github.com/messagebird/sachet/provider/kavenegar" @@ -69,6 +71,7 @@ var config struct { Sap sap.Config Esendex esendex.Config Sms77 sms77.Sms77Config + Ghasedak ghasedak.Config } Receivers []ReceiverConf diff --git a/cmd/sachet/main.go b/cmd/sachet/main.go index edbdb14..aaf813d 100644 --- a/cmd/sachet/main.go +++ b/cmd/sachet/main.go @@ -4,13 +4,14 @@ import ( "encoding/json" "flag" "fmt" - "github.com/messagebird/sachet/provider/esendex" "log" "net/http" "os" "strconv" "strings" + "github.com/messagebird/sachet/provider/esendex" + "github.com/messagebird/sachet/provider/tencentcloud" "github.com/messagebird/sachet" @@ -19,6 +20,7 @@ import ( "github.com/messagebird/sachet/provider/cm" "github.com/messagebird/sachet/provider/exotel" "github.com/messagebird/sachet/provider/freemobile" + "github.com/messagebird/sachet/provider/ghasedak" "github.com/messagebird/sachet/provider/infobip" "github.com/messagebird/sachet/provider/kannel" "github.com/messagebird/sachet/provider/kavenegar" @@ -222,6 +224,8 @@ func providerByName(name string) (sachet.Provider, error) { return esendex.NewEsendex(config.Providers.Esendex), nil case "sms77": return sms77.NewSms77(config.Providers.Sms77), nil + case "ghasedak": + return ghasedak.NewGhasedak(config.Providers.Ghasedak), nil } return nil, fmt.Errorf("%s: Unknown provider", name) diff --git a/examples/config.yaml b/examples/config.yaml index b32ee3b..353a103 100644 --- a/examples/config.yaml +++ b/examples/config.yaml @@ -91,6 +91,8 @@ providers: sms77: api_key: 'api_key' debug: false + ghasedak: + api_token: 'GHASEDAK_API_KEY' templates: - telegram.tmpl @@ -127,3 +129,8 @@ receivers: to: - '09123456789' - '09129876543' + - name: 'ghasedak' + provider: 'ghasedak' + to: + - '09012345679' + - '09123456789' diff --git a/provider/ghasedak/ghasedak.go b/provider/ghasedak/ghasedak.go new file mode 100644 index 0000000..2a18dba --- /dev/null +++ b/provider/ghasedak/ghasedak.go @@ -0,0 +1,60 @@ +package ghasedak + +import ( + "fmt" + "io/ioutil" + "net/http" + "strings" + "time" + "github.com/messagebird/sachet" +) + +// Retrieving required data from 'ghasedak' sections of config.yaml +type Config struct { + APIToken string `yaml:"api_token"` + PhoneNumbers []string `yaml:"phone_numbers"` +} + +// Creating the KaveNegar to contain provider data +type Ghasedak struct { + Config + HTTPClient *http.Client // The HTTP client to send requests on +} + +// Ghasedak creates and returns a new Ghasedak struct +func NewGhasedak(config Config) *Ghasedak { + return &Ghasedak{ + config, + &http.Client{Timeout: time.Second * 20}, + } +} + +// Building the API and call the Ghasedak endpoint to send SMS to the configured receptor from config.yaml +func (ns *Ghasedak) Send(message sachet.Message) error { + url := "https://api.ghasedak.me/v2/sms/send/pair" + payload := strings.NewReader("message=" + message.Text + "&receptor=" + strings.Join(message.To, ",")) + request, err := http.NewRequest("POST", url, payload) + if err != nil { + return err + } + request.Header.Set("User-Agent", "Sachet") + request.Header.Add("content-type", "application/x-www-form-urlencoded") + request.Header.Add("apikey", ns.APIToken) + request.Header.Add("cache-control", "no-cache") + response, err := ns.HTTPClient.Do(request) + if err != nil { + return err + } + defer response.Body.Close() + + if response.StatusCode != http.StatusOK { + body, _ := ioutil.ReadAll(response.Body) + return fmt.Errorf( + "SMS sending failed. HTTP status code: %d, Response body: %s", + response.StatusCode, + body, + ) + } + fmt.Println("Message sent: ", message.Text) + return nil +} From 570f66f880caa26b79ebf44fd6c929a30bbb8fea Mon Sep 17 00:00:00 2001 From: Vesal Daneshvar Date: Sat, 27 Nov 2021 21:50:48 +0330 Subject: [PATCH 2/3] using Encode for payload request --- provider/ghasedak/ghasedak.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/provider/ghasedak/ghasedak.go b/provider/ghasedak/ghasedak.go index 2a18dba..e70f25b 100644 --- a/provider/ghasedak/ghasedak.go +++ b/provider/ghasedak/ghasedak.go @@ -4,8 +4,10 @@ import ( "fmt" "io/ioutil" "net/http" + "net/url" "strings" "time" + "github.com/messagebird/sachet" ) @@ -31,9 +33,11 @@ func NewGhasedak(config Config) *Ghasedak { // Building the API and call the Ghasedak endpoint to send SMS to the configured receptor from config.yaml func (ns *Ghasedak) Send(message sachet.Message) error { - url := "https://api.ghasedak.me/v2/sms/send/pair" - payload := strings.NewReader("message=" + message.Text + "&receptor=" + strings.Join(message.To, ",")) - request, err := http.NewRequest("POST", url, payload) + endpoint := "https://api.ghasedak.me/v2/sms/send/pair" + data := url.Values{} + data.Set("message", message.Text) + data.Set("receptor", strings.Join(message.To, ",")) + request, err := http.NewRequest("POST", endpoint, strings.NewReader(data.Encode())) if err != nil { return err } From 693da2ffd296bfcef5091ad5424a828ff1c8b7de Mon Sep 17 00:00:00 2001 From: Vesal Daneshvar Date: Wed, 1 Dec 2021 20:07:11 +0330 Subject: [PATCH 3/3] ghasedak Config sender phone number delete --- provider/ghasedak/ghasedak.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/provider/ghasedak/ghasedak.go b/provider/ghasedak/ghasedak.go index e70f25b..717ee91 100644 --- a/provider/ghasedak/ghasedak.go +++ b/provider/ghasedak/ghasedak.go @@ -13,8 +13,7 @@ import ( // Retrieving required data from 'ghasedak' sections of config.yaml type Config struct { - APIToken string `yaml:"api_token"` - PhoneNumbers []string `yaml:"phone_numbers"` + APIToken string `yaml:"api_token"` } // Creating the KaveNegar to contain provider data