This commit is contained in:
parent
b5c5642bf7
commit
c9ab16b493
16 changed files with 1362 additions and 0 deletions
12
go.sum
Normal file
12
go.sum
Normal file
|
@ -0,0 +1,12 @@
|
|||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/sms77io/go-client v0.0.0-20211026080708-90d592e387a5 h1:UPsStTjrEgvfDzD3ENu9mltCnJBULPSEQqH6JCS6Ans=
|
||||
github.com/sms77io/go-client v0.0.0-20211026080708-90d592e387a5/go.mod h1:Z4Gf/PUrT5wam9ugP7VI/p2CgNVkwHJtj1wEV6Aeo1c=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
21
vendor/github.com/sms77io/go-client/LICENSE
generated
vendored
Normal file
21
vendor/github.com/sms77io/go-client/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2020-present sms77 e.K.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
59
vendor/github.com/sms77io/go-client/sms77api/analytics.go
generated
vendored
Normal file
59
vendor/github.com/sms77io/go-client/sms77api/analytics.go
generated
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
type AnalyticsParams struct {
|
||||
End string `json:"end,omitempty"`
|
||||
GroupBy AnalyticsGroupBy `json:"group_by,omitempty"`
|
||||
Label string `json:"label,omitempty"`
|
||||
Start string `json:"start,omitempty"`
|
||||
Subaccounts string `json:"subaccounts,omitempty"`
|
||||
}
|
||||
|
||||
type Analytics struct {
|
||||
Account *string `json:"account"`
|
||||
Country *string `json:"country"`
|
||||
Date *string `json:"date"`
|
||||
Label *string `json:"label"`
|
||||
|
||||
Direct int `json:"direct"`
|
||||
Economy int `json:"economy"`
|
||||
Hlr int `json:"hlr"`
|
||||
Inbound int `json:"inbound"`
|
||||
Mnp int `json:"mnp"`
|
||||
Voice int `json:"voice"`
|
||||
UsageEur float64 `json:"usage_eur"`
|
||||
}
|
||||
|
||||
type AnalyticsResource resource
|
||||
|
||||
type AnalyticsGroupBy string
|
||||
|
||||
const (
|
||||
AnalyticsGroupByCountry AnalyticsGroupBy = "country"
|
||||
AnalyticsGroupByDate AnalyticsGroupBy = "date"
|
||||
AnalyticsGroupByLabel AnalyticsGroupBy = "label"
|
||||
AnalyticsGroupBySubaccount AnalyticsGroupBy = "subaccount"
|
||||
)
|
||||
|
||||
func (api *AnalyticsResource) Get(p *AnalyticsParams) (o []Analytics, err error) {
|
||||
return api.GetContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *AnalyticsResource) GetContext(ctx context.Context, p *AnalyticsParams) (o []Analytics, err error) {
|
||||
res, err := api.client.request(ctx, "analytics", "GET", p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(res), &o)
|
||||
|
||||
if nil != err {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return o, nil
|
||||
}
|
27
vendor/github.com/sms77io/go-client/sms77api/balance.go
generated
vendored
Normal file
27
vendor/github.com/sms77io/go-client/sms77api/balance.go
generated
vendored
Normal file
|
@ -0,0 +1,27 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type BalanceResource resource
|
||||
|
||||
func (api *BalanceResource) Get() (*float64, error) {
|
||||
return api.GetContext(context.Background())
|
||||
}
|
||||
|
||||
func (api *BalanceResource) GetContext(ctx context.Context) (*float64, error) {
|
||||
res, err := api.client.request(ctx, "balance", "GET", nil)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
float, err := strconv.ParseFloat(res, 64)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &float, nil
|
||||
}
|
206
vendor/github.com/sms77io/go-client/sms77api/contacts.go
generated
vendored
Normal file
206
vendor/github.com/sms77io/go-client/sms77api/contacts.go
generated
vendored
Normal file
|
@ -0,0 +1,206 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
type ContactsResource resource
|
||||
|
||||
type ContactsWriteCode string
|
||||
|
||||
const (
|
||||
ContactsWriteCodeUnchanged ContactsWriteCode = "151"
|
||||
ContactsWriteCodeChanged ContactsWriteCode = "152"
|
||||
)
|
||||
|
||||
type ContactsAction string
|
||||
|
||||
const (
|
||||
ContactsActionDelete ContactsAction = "del"
|
||||
ContactsActionRead ContactsAction = "read"
|
||||
ContactsActionWrite ContactsAction = "write"
|
||||
)
|
||||
|
||||
type Contact struct {
|
||||
Id string `json:"ID"`
|
||||
Nick string `json:"Name"`
|
||||
Phone string `json:"Number"`
|
||||
}
|
||||
|
||||
type ContactEditParams struct {
|
||||
Id string `json:"id"`
|
||||
Nick string `json:"nick,omitempty"`
|
||||
Phone string `json:"empfaenger,omitempty"`
|
||||
}
|
||||
|
||||
type ContactsCreateJsonResponse struct {
|
||||
contactsPropReturn
|
||||
Id uint64 `json:"id"`
|
||||
}
|
||||
|
||||
type ContactsDeleteParams = contactsParamId
|
||||
|
||||
type ContactsDeleteJsonResponse = contactsPropReturn
|
||||
|
||||
type ContactsEditJsonResponse = contactsPropReturn
|
||||
|
||||
type ContactsReadParams = contactsParamId
|
||||
|
||||
type contactsParamAction struct {
|
||||
Action ContactsAction `json:"action"`
|
||||
}
|
||||
|
||||
type contactsParamId struct {
|
||||
Id uint64 `json:"id,omitempty"`
|
||||
}
|
||||
|
||||
type contactsParamJson struct {
|
||||
Json bool `json:"json,omitempty"`
|
||||
}
|
||||
|
||||
type contactsPropReturn struct {
|
||||
Return ContactsWriteCode `json:"return"`
|
||||
}
|
||||
|
||||
type contactsReadApiParams struct {
|
||||
contactsParamAction
|
||||
ContactsReadParams
|
||||
contactsParamJson
|
||||
}
|
||||
|
||||
func newReadApiParams(readParams ContactsReadParams, json bool) contactsReadApiParams {
|
||||
return contactsReadApiParams{
|
||||
contactsParamAction: contactsParamAction{ContactsActionRead},
|
||||
contactsParamJson: contactsParamJson{json},
|
||||
ContactsReadParams: readParams,
|
||||
}
|
||||
}
|
||||
|
||||
type contactsCreateApiParams struct {
|
||||
contactsParamAction
|
||||
contactsParamJson
|
||||
}
|
||||
|
||||
func newContactsCreateApiParams(json bool) contactsCreateApiParams {
|
||||
return contactsCreateApiParams{
|
||||
contactsParamAction: contactsParamAction{ContactsActionWrite},
|
||||
contactsParamJson: contactsParamJson{json},
|
||||
}
|
||||
}
|
||||
|
||||
type contactsDeleteApiParams struct {
|
||||
ContactsDeleteParams
|
||||
contactsParamAction
|
||||
contactsParamJson
|
||||
}
|
||||
|
||||
func newContactsDeleteApiParams(p ContactsDeleteParams, json bool) contactsDeleteApiParams {
|
||||
return contactsDeleteApiParams{
|
||||
ContactsDeleteParams: p,
|
||||
contactsParamAction: contactsParamAction{ContactsActionDelete},
|
||||
contactsParamJson: contactsParamJson{json},
|
||||
}
|
||||
}
|
||||
|
||||
type contactsEditJsonApiParams struct {
|
||||
ContactEditParams
|
||||
contactsParamAction
|
||||
contactsParamJson
|
||||
}
|
||||
|
||||
func newContactsEditJsonApiParams(p ContactEditParams, json bool) contactsEditJsonApiParams {
|
||||
return contactsEditJsonApiParams{
|
||||
ContactEditParams: p,
|
||||
contactsParamAction: contactsParamAction{ContactsActionWrite},
|
||||
contactsParamJson: contactsParamJson{json},
|
||||
}
|
||||
}
|
||||
|
||||
func (api *ContactsResource) request(ctx context.Context, method HttpMethod, params interface{}) (string, error) {
|
||||
return api.client.request(ctx, "contacts", string(method), params)
|
||||
}
|
||||
|
||||
func (api *ContactsResource) ReadCsv(p ContactsReadParams) (string, error) {
|
||||
return api.ReadCsvContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *ContactsResource) ReadCsvContext(ctx context.Context, p ContactsReadParams) (string, error) {
|
||||
return api.request(ctx, HttpMethodGet, newReadApiParams(p, false))
|
||||
}
|
||||
|
||||
func (api *ContactsResource) ReadJson(p ContactsReadParams) (a []Contact, e error) {
|
||||
return api.ReadJsonContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *ContactsResource) ReadJsonContext(ctx context.Context, p ContactsReadParams) (a []Contact, e error) {
|
||||
s, e := api.request(ctx, HttpMethodGet, newReadApiParams(p, true))
|
||||
|
||||
if nil != e {
|
||||
return
|
||||
}
|
||||
|
||||
json.Unmarshal([]byte(s), &a)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (api *ContactsResource) CreateCsv() (string, error) {
|
||||
return api.CreateCsvContext(context.Background())
|
||||
}
|
||||
|
||||
func (api *ContactsResource) CreateCsvContext(ctx context.Context) (string, error) {
|
||||
return api.request(ctx, HttpMethodPost, newContactsCreateApiParams(false))
|
||||
}
|
||||
|
||||
func (api *ContactsResource) CreateJson() (o ContactsCreateJsonResponse, e error) {
|
||||
return api.CreateJsonContext(context.Background())
|
||||
}
|
||||
|
||||
func (api *ContactsResource) CreateJsonContext(ctx context.Context) (o ContactsCreateJsonResponse, e error) {
|
||||
s, e := api.request(ctx, HttpMethodGet, newContactsCreateApiParams(true))
|
||||
|
||||
e = json.Unmarshal([]byte(s), &o)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (api *ContactsResource) DeleteCsv(p ContactsDeleteParams) (string, error) {
|
||||
return api.DeleteCsvContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *ContactsResource) DeleteCsvContext(ctx context.Context, p ContactsDeleteParams) (string, error) {
|
||||
return api.request(ctx, HttpMethodPost, newContactsDeleteApiParams(p, false))
|
||||
}
|
||||
|
||||
func (api *ContactsResource) DeleteJson(p ContactsDeleteParams) (o ContactsDeleteJsonResponse, e error) {
|
||||
return api.DeleteJsonContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *ContactsResource) DeleteJsonContext(ctx context.Context, p ContactsDeleteParams) (o ContactsDeleteJsonResponse, e error) {
|
||||
s, e := api.request(ctx, HttpMethodGet, newContactsDeleteApiParams(p, true))
|
||||
|
||||
e = json.Unmarshal([]byte(s), &o)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (api *ContactsResource) EditCsv(p ContactEditParams) (string, error) {
|
||||
return api.EditCsvContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *ContactsResource) EditCsvContext(ctx context.Context, p ContactEditParams) (string, error) {
|
||||
return api.request(ctx, HttpMethodGet, newContactsEditJsonApiParams(p, false))
|
||||
}
|
||||
|
||||
func (api *ContactsResource) EditJson(p ContactEditParams) (o ContactsEditJsonResponse, e error) {
|
||||
return api.EditJsonContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *ContactsResource) EditJsonContext(ctx context.Context, p ContactEditParams) (o ContactsEditJsonResponse, e error) {
|
||||
s, e := api.request(ctx, HttpMethodGet, newContactsEditJsonApiParams(p, true))
|
||||
|
||||
e = json.Unmarshal([]byte(s), &o)
|
||||
|
||||
return
|
||||
}
|
96
vendor/github.com/sms77io/go-client/sms77api/hooks.go
generated
vendored
Normal file
96
vendor/github.com/sms77io/go-client/sms77api/hooks.go
generated
vendored
Normal file
|
@ -0,0 +1,96 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
type HookEventType string
|
||||
|
||||
const (
|
||||
HookEventTypeSmsStatus HookEventType = "dlr"
|
||||
HookEventTypeVoiceStatus HookEventType = "voice_status"
|
||||
HookEventTypeInboundSms HookEventType = "sms_mo"
|
||||
)
|
||||
|
||||
type HookRequestMethod string
|
||||
|
||||
const (
|
||||
HookRequestMethodGet HookRequestMethod = "GET"
|
||||
HookRequestMethodJson HookRequestMethod = "JSON"
|
||||
HookRequestMethodPost HookRequestMethod = "POST"
|
||||
)
|
||||
|
||||
type HooksAction string
|
||||
|
||||
const (
|
||||
HooksActionRead HooksAction = "read"
|
||||
HooksActionSubscribe HooksAction = "subscribe"
|
||||
HooksActionUnsubscribe HooksAction = "unsubscribe"
|
||||
)
|
||||
|
||||
type Hook struct {
|
||||
Created string `json:"created"`
|
||||
EventType HookEventType `json:"event_type"`
|
||||
Id string `json:"id"`
|
||||
RequestMethod HookRequestMethod `json:"request_method"`
|
||||
TargetUrl string `json:"target_url"`
|
||||
}
|
||||
|
||||
type HooksParams struct {
|
||||
Action HooksAction `json:"action"`
|
||||
EventType HookEventType `json:"event_type,omitempty"`
|
||||
Id int `json:"id,omitempty"`
|
||||
RequestMethod HookRequestMethod `json:"request_method,omitempty"`
|
||||
TargetUrl string `json:"target_url,omitempty"`
|
||||
}
|
||||
|
||||
type HooksReadResponse struct {
|
||||
Success bool `json:"success"`
|
||||
Hooks []Hook `json:"hooks"`
|
||||
}
|
||||
|
||||
type HooksUnsubscribeResponse struct {
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
type HooksSubscribeResponse struct {
|
||||
Id int `json:"id"`
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
type HooksResource resource
|
||||
|
||||
func (api *HooksResource) Request(p HooksParams) (interface{}, error) {
|
||||
return api.RequestContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *HooksResource) RequestContext(ctx context.Context, p HooksParams) (interface{}, error) {
|
||||
method := "POST"
|
||||
if p.Action == HooksActionRead {
|
||||
method = "GET"
|
||||
}
|
||||
|
||||
res, err := api.client.request(ctx, "hooks", method, p)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var js interface{}
|
||||
|
||||
switch p.Action {
|
||||
case HooksActionRead:
|
||||
js = &HooksReadResponse{}
|
||||
case HooksActionSubscribe:
|
||||
js = &HooksSubscribeResponse{}
|
||||
case HooksActionUnsubscribe:
|
||||
js = &HooksUnsubscribeResponse{}
|
||||
}
|
||||
|
||||
if err := json.Unmarshal([]byte(res), js); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return js, nil
|
||||
}
|
149
vendor/github.com/sms77io/go-client/sms77api/journal.go
generated
vendored
Normal file
149
vendor/github.com/sms77io/go-client/sms77api/journal.go
generated
vendored
Normal file
|
@ -0,0 +1,149 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
type JournalResource resource
|
||||
|
||||
type JournalType string
|
||||
|
||||
const (
|
||||
JournalTypeInbound JournalType = "inbound"
|
||||
JournalTypeOutbound JournalType = "outbound"
|
||||
JournalTypeReplies JournalType = "replies"
|
||||
JournalTypeVoice JournalType = "voice"
|
||||
)
|
||||
|
||||
type JournalBase struct {
|
||||
From string `json:"from"`
|
||||
Id string `json:"id"`
|
||||
Price string `json:"price"`
|
||||
Text string `json:"text"`
|
||||
Timestamp string `json:"timestamp"`
|
||||
To string `json:"to"`
|
||||
}
|
||||
|
||||
type JournalOutbound struct {
|
||||
JournalBase
|
||||
Connection string `json:"connection"`
|
||||
Dlr string `json:"dlr"`
|
||||
DlrTimestamp string `json:"dlr_timestamp"`
|
||||
ForeignId string `json:"foreign_id"`
|
||||
Label string `json:"label"`
|
||||
Latency string `json:"latency"`
|
||||
MccMnc string `json:"mccmnc"`
|
||||
Type string `json:"type"`
|
||||
}
|
||||
|
||||
type JournalInbound struct {
|
||||
JournalBase
|
||||
}
|
||||
|
||||
type JournalReplies struct {
|
||||
JournalBase
|
||||
}
|
||||
|
||||
type JournalVoice struct {
|
||||
JournalBase
|
||||
Duration string `json:"duration"`
|
||||
Error string `json:"error"`
|
||||
Status string `json:"status"`
|
||||
Xml bool `json:"xml"`
|
||||
}
|
||||
|
||||
type JournalParams struct {
|
||||
DateFrom string `json:"date_from,omitempty"`
|
||||
DateTo string `json:"date_to,omitempty"`
|
||||
Id int `json:"id,omitempty"`
|
||||
State string `json:"state,omitempty"`
|
||||
To string `json:"to,omitempty"`
|
||||
Type JournalType `json:"type"`
|
||||
}
|
||||
|
||||
func BuildJournalParams(journalType JournalType, p *JournalParams) *JournalParams {
|
||||
p.Type = journalType
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
func (api *JournalResource) Inbound(p *JournalParams) ([]JournalInbound, error) {
|
||||
return api.InboundContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *JournalResource) InboundContext(ctx context.Context, p *JournalParams) ([]JournalInbound, error) {
|
||||
res, err := api.client.request(ctx, "journal", "GET", BuildJournalParams(JournalTypeInbound, p))
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var js []JournalInbound
|
||||
|
||||
if err := json.Unmarshal([]byte(res), &js); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return js, nil
|
||||
}
|
||||
|
||||
func (api *JournalResource) Outbound(p *JournalParams) ([]JournalOutbound, error) {
|
||||
return api.OutboundContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *JournalResource) OutboundContext(ctx context.Context, p *JournalParams) ([]JournalOutbound, error) {
|
||||
res, err := api.client.request(ctx, "journal", "GET", BuildJournalParams(JournalTypeOutbound, p))
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var js []JournalOutbound
|
||||
|
||||
if err := json.Unmarshal([]byte(res), &js); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return js, nil
|
||||
}
|
||||
|
||||
func (api *JournalResource) Replies(p *JournalParams) ([]JournalReplies, error) {
|
||||
return api.RepliesContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *JournalResource) RepliesContext(ctx context.Context, p *JournalParams) ([]JournalReplies, error) {
|
||||
res, err := api.client.request(ctx, "journal", "GET", BuildJournalParams(JournalTypeReplies, p))
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var js []JournalReplies
|
||||
|
||||
if err := json.Unmarshal([]byte(res), &js); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return js, nil
|
||||
}
|
||||
|
||||
func (api *JournalResource) Voice(p *JournalParams) ([]JournalVoice, error) {
|
||||
return api.VoiceContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *JournalResource) VoiceContext(ctx context.Context, p *JournalParams) ([]JournalVoice, error) {
|
||||
res, err := api.client.request(ctx, "journal", "GET", BuildJournalParams(JournalTypeVoice, p))
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var js []JournalVoice
|
||||
|
||||
if err := json.Unmarshal([]byte(res), &js); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return js, nil
|
||||
}
|
114
vendor/github.com/sms77io/go-client/sms77api/lookup.go
generated
vendored
Normal file
114
vendor/github.com/sms77io/go-client/sms77api/lookup.go
generated
vendored
Normal file
|
@ -0,0 +1,114 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
type Carrier struct {
|
||||
Country string `json:"country"`
|
||||
Name string `json:"name"`
|
||||
NetworkCode string `json:"network_code"`
|
||||
NetworkType string `json:"network_type"`
|
||||
}
|
||||
|
||||
type LookupParams struct {
|
||||
Type string `json:"type"`
|
||||
Number string `json:"number,omitempty"`
|
||||
Json bool `json:"json,omitempty"`
|
||||
}
|
||||
|
||||
type LookupCnamResponse struct {
|
||||
Code string `json:"code"`
|
||||
Name string `json:"name"`
|
||||
Number string `json:"number"`
|
||||
Success string `json:"success"`
|
||||
}
|
||||
|
||||
type LookupFormatResponse struct {
|
||||
National string `json:"national"`
|
||||
Carrier string `json:"carrier"`
|
||||
CountryCode string `json:"country_code"`
|
||||
CountryIso string `json:"country_iso"`
|
||||
CountryName string `json:"country_name"`
|
||||
International string `json:"international"`
|
||||
InternationalFormatted string `json:"international_formatted"`
|
||||
NetworkType string `json:"network_type"`
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
type LookupHlrResponse struct {
|
||||
CountryCode string `json:"country_code"`
|
||||
CountryCodeIso3 *string `json:"country_code_iso3,omitempty"`
|
||||
CountryName string `json:"country_name"`
|
||||
CountryPrefix string `json:"country_prefix"`
|
||||
CurrentCarrier Carrier `json:"current_carrier"`
|
||||
GsmCode string `json:"gsm_code"`
|
||||
GsmMessage string `json:"gsm_message"`
|
||||
InternationalFormatNumber string `json:"international_format_number"`
|
||||
InternationalFormatted string `json:"international_formatted"`
|
||||
LookupOutcome bool `json:"lookup_outcome"`
|
||||
LookupOutcomeMessage string `json:"lookup_outcome_message"`
|
||||
NationalFormatNumber string `json:"national_format_number"`
|
||||
OriginalCarrier Carrier `json:"original_carrier"`
|
||||
Ported string `json:"ported"`
|
||||
Reachable string `json:"reachable"`
|
||||
Roaming string `json:"roaming"`
|
||||
Status bool `json:"status"`
|
||||
StatusMessage string `json:"status_message"`
|
||||
ValidNumber string `json:"valid_number"`
|
||||
}
|
||||
|
||||
type LookupMnpResponse struct {
|
||||
Code int64 `json:"code"`
|
||||
Mnp Mnp `json:"mnp"`
|
||||
Price float64 `json:"price"`
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
type Mnp struct {
|
||||
Country string `json:"country"`
|
||||
InternationalFormatted string `json:"international_formatted"`
|
||||
IsPorted bool `json:"isPorted"`
|
||||
Mccmnc string `json:"mccmnc"`
|
||||
NationalFormat string `json:"national_format"`
|
||||
Network string `json:"network"`
|
||||
Number string `json:"number"`
|
||||
}
|
||||
|
||||
type LookupResource resource
|
||||
|
||||
func (api *LookupResource) Post(p LookupParams) (interface{}, error) {
|
||||
return api.PostContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *LookupResource) PostContext(ctx context.Context, p LookupParams) (interface{}, error) {
|
||||
res, err := api.client.request(ctx, "lookup", "GET", p)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var js interface{}
|
||||
|
||||
switch p.Type {
|
||||
case "mnp":
|
||||
if !p.Json {
|
||||
return res, nil
|
||||
}
|
||||
|
||||
js = &LookupMnpResponse{}
|
||||
case "cnam":
|
||||
js = &LookupCnamResponse{}
|
||||
case "format":
|
||||
js = &LookupFormatResponse{}
|
||||
case "hlr":
|
||||
js = &LookupHlrResponse{}
|
||||
}
|
||||
|
||||
if err := json.Unmarshal([]byte(res), js); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return js, nil
|
||||
}
|
124
vendor/github.com/sms77io/go-client/sms77api/pricing.go
generated
vendored
Normal file
124
vendor/github.com/sms77io/go-client/sms77api/pricing.go
generated
vendored
Normal file
|
@ -0,0 +1,124 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
type PricingResource resource
|
||||
|
||||
type CountryNetwork struct {
|
||||
Comment string `json:"comment,omitempty"`
|
||||
Features []string `json:"features,omitempty"`
|
||||
Mcc string `json:"mcc,omitempty"`
|
||||
Mncs []string `json:"mncs,omitempty"`
|
||||
NetworkName string `json:"networkName,omitempty"`
|
||||
Price float64 `json:"price,omitempty"`
|
||||
}
|
||||
|
||||
type CountryPricing struct {
|
||||
CountryCode string `json:"countryCode,omitempty"`
|
||||
CountryName string `json:"countryName,omitempty"`
|
||||
CountryPrefix string `json:"countryPrefix,omitempty"`
|
||||
Networks []CountryNetwork `json:"networks,omitempty"`
|
||||
}
|
||||
|
||||
type PricingFormat string
|
||||
|
||||
const (
|
||||
PricingFormatCsv PricingFormat = "csv"
|
||||
PricingFormatJson PricingFormat = "json"
|
||||
)
|
||||
|
||||
type PricingParams struct {
|
||||
Country string `json:"country,omitempty"`
|
||||
}
|
||||
|
||||
type PricingResponse struct {
|
||||
CountCountries int64 `json:"countCountries"`
|
||||
CountNetworks int64 `json:"countNetworks"`
|
||||
Countries []CountryPricing `json:"countries"`
|
||||
}
|
||||
|
||||
type PricingApiParams struct {
|
||||
PricingParams
|
||||
Format PricingFormat `json:"format,omitempty"`
|
||||
}
|
||||
|
||||
type PricingCsvHeader int
|
||||
|
||||
const (
|
||||
PricingHeaderCountryCode PricingCsvHeader = iota
|
||||
PricingHeaderCountryName
|
||||
PricingHeaderCountryPrefix
|
||||
PricingHeaderMcc
|
||||
PricingHeaderMncs
|
||||
PricingHeaderNetworkName
|
||||
PricingHeaderPrice
|
||||
PricingHeaderFeatures
|
||||
PricingHeaderComment
|
||||
)
|
||||
|
||||
var PricingCsvHeaders = map[PricingCsvHeader]string{
|
||||
PricingHeaderCountryCode: "countryCode",
|
||||
PricingHeaderCountryName: "countryName",
|
||||
PricingHeaderCountryPrefix: "countryPrefix",
|
||||
PricingHeaderMcc: "mcc",
|
||||
PricingHeaderMncs: "mnc",
|
||||
PricingHeaderNetworkName: "networkName",
|
||||
PricingHeaderPrice: "price",
|
||||
PricingHeaderFeatures: "features",
|
||||
PricingHeaderComment: "comment",
|
||||
}
|
||||
|
||||
type PricingCsvColumn int
|
||||
|
||||
const (
|
||||
PricingColumnCountryCode PricingCsvColumn = iota
|
||||
PricingColumnCountryName
|
||||
PricingColumnCountryPrefix
|
||||
PricingColumnMcc
|
||||
PricingColumnNetworkName
|
||||
PricingColumnPrice
|
||||
PricingColumnFeatures
|
||||
PricingColumnComment
|
||||
PricingColumnMncs
|
||||
)
|
||||
|
||||
const EndpointPricing = "pricing"
|
||||
|
||||
func (api *PricingResource) Csv(p PricingParams) (string, error) {
|
||||
return api.CsvContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *PricingResource) CsvContext(ctx context.Context, p PricingParams) (string, error) {
|
||||
res, err := api.client.request(ctx, EndpointPricing, "GET", PricingApiParams{
|
||||
PricingParams: p,
|
||||
Format: PricingFormatCsv,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (api *PricingResource) Json(p PricingParams) (*PricingResponse, error) {
|
||||
return api.JsonContext(context.Background(), p)
|
||||
}
|
||||
func (api *PricingResource) JsonContext(ctx context.Context, p PricingParams) (*PricingResponse, error) {
|
||||
res, err := api.client.request(ctx, EndpointPricing, "GET", PricingApiParams{PricingParams: p})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var js = &PricingResponse{}
|
||||
|
||||
if err := json.Unmarshal([]byte(res), &js); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return js, nil
|
||||
}
|
104
vendor/github.com/sms77io/go-client/sms77api/sms.go
generated
vendored
Normal file
104
vendor/github.com/sms77io/go-client/sms77api/sms.go
generated
vendored
Normal file
|
@ -0,0 +1,104 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
type SmsFile struct {
|
||||
Contents string `json:"contents"`
|
||||
Name string `json:"name"`
|
||||
Validity *uint8 `json:"validity,omitempty"`
|
||||
Password *string `json:"password,omitempty"`
|
||||
}
|
||||
|
||||
type SmsBaseParams struct {
|
||||
Debug bool `json:"debug,omitempty"`
|
||||
Delay string `json:"delay,omitempty"`
|
||||
Files []SmsFile `json:"files,omitempty"`
|
||||
Flash bool `json:"flash,omitempty"`
|
||||
ForeignId string `json:"foreign_id,omitempty"`
|
||||
From string `json:"from,omitempty"`
|
||||
Label string `json:"label,omitempty"`
|
||||
NoReload bool `json:"no_reload,omitempty"`
|
||||
PerformanceTracking bool `json:"performance_tracking,omitempty"`
|
||||
Text string `json:"text"`
|
||||
To string `json:"to"`
|
||||
Ttl int64 `json:"ttl,omitempty"`
|
||||
Udh string `json:"udh,omitempty"`
|
||||
Unicode bool `json:"unicode,omitempty"`
|
||||
Utf8 bool `json:"utf8,omitempty"`
|
||||
}
|
||||
|
||||
type SmsTextParams struct {
|
||||
SmsBaseParams
|
||||
Details bool `json:"details,omitempty"`
|
||||
ReturnMessageId bool `json:"return_msg_id,omitempty"`
|
||||
}
|
||||
|
||||
type SmsResource resource
|
||||
|
||||
type SmsResponse struct {
|
||||
Debug string `json:"debug"`
|
||||
Balance float64 `json:"balance"`
|
||||
Messages []SmsResponseMessage `json:"messages"`
|
||||
SmsType string `json:"sms_type"`
|
||||
Success StatusCode `json:"success"`
|
||||
TotalPrice float64 `json:"total_price"`
|
||||
}
|
||||
|
||||
type SmsResponseMessage struct {
|
||||
Encoding string `json:"encoding"`
|
||||
Error *string `json:"error"`
|
||||
ErrorText *string `json:"error_text"`
|
||||
Id *string `json:"id"`
|
||||
Label *string `json:"label"`
|
||||
Messages *[]string `json:"messages,omitempty"`
|
||||
Parts int64 `json:"parts"`
|
||||
Price float64 `json:"price"`
|
||||
Recipient string `json:"recipient"`
|
||||
Sender string `json:"sender"`
|
||||
Success bool `json:"success"`
|
||||
Text string `json:"text"`
|
||||
}
|
||||
|
||||
func (api *SmsResource) request(ctx context.Context, p interface{}) (*string, error) {
|
||||
res, err := api.client.request(ctx, "sms", "POST", p)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
func (api *SmsResource) Text(p SmsTextParams) (res *string, err error) {
|
||||
return api.TextContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *SmsResource) TextContext(ctx context.Context, p SmsTextParams) (res *string, err error) {
|
||||
return api.request(ctx, p)
|
||||
}
|
||||
|
||||
func (api *SmsResource) Json(p SmsBaseParams) (o *SmsResponse, err error) {
|
||||
return api.JsonContext(context.Background(), p)
|
||||
}
|
||||
func (api *SmsResource) JsonContext(ctx context.Context, p SmsBaseParams) (o *SmsResponse, err error) {
|
||||
type SmsJsonParams struct {
|
||||
SmsBaseParams
|
||||
Json bool `json:"json,omitempty"`
|
||||
}
|
||||
|
||||
res, err := api.request(ctx, SmsJsonParams{
|
||||
SmsBaseParams: p,
|
||||
Json: true,
|
||||
})
|
||||
|
||||
if nil != err {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(*res), &o)
|
||||
|
||||
return
|
||||
}
|
242
vendor/github.com/sms77io/go-client/sms77api/sms77api.go
generated
vendored
Normal file
242
vendor/github.com/sms77io/go-client/sms77api/sms77api.go
generated
vendored
Normal file
|
@ -0,0 +1,242 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type HttpMethod string
|
||||
type Options struct {
|
||||
ApiKey string
|
||||
Debug bool
|
||||
SentWith string
|
||||
}
|
||||
type resource struct {
|
||||
client *Sms77API
|
||||
}
|
||||
type StatusCode string
|
||||
type Sms77API struct {
|
||||
Options
|
||||
client *http.Client
|
||||
base resource // Instead of allocating a struct for each service we reuse a one
|
||||
|
||||
Analytics *AnalyticsResource
|
||||
Balance *BalanceResource
|
||||
Contacts *ContactsResource
|
||||
Hooks *HooksResource
|
||||
Journal *JournalResource
|
||||
Lookup *LookupResource
|
||||
Pricing *PricingResource
|
||||
Sms *SmsResource
|
||||
Status *StatusResource
|
||||
ValidateForVoice *ValidateForVoiceResource
|
||||
Voice *VoiceResource
|
||||
}
|
||||
|
||||
const (
|
||||
defaultOptionSentWith = "go-client"
|
||||
|
||||
sentWithKey = "sentWith"
|
||||
|
||||
HttpMethodGet HttpMethod = "GET"
|
||||
HttpMethodPost HttpMethod = "POST"
|
||||
|
||||
StatusCodeErrorCarrierNotAvailable StatusCode = "11"
|
||||
StatusCodeSuccess StatusCode = "100"
|
||||
StatusCodeSuccessPartial StatusCode = "101"
|
||||
StatusCodeInvalidSender StatusCode = "201"
|
||||
StatusCodeInvalidRecipient StatusCode = "202"
|
||||
StatusCodeMissingParamTo StatusCode = "301"
|
||||
StatusCodeMissingParamText StatusCode = "305"
|
||||
StatusCodeParamTextExceedsLengthLimit StatusCode = "401"
|
||||
StatusCodePreventedByReloadLock StatusCode = "402"
|
||||
StatusCodeReachedDailyLimitForNumber StatusCode = "403"
|
||||
StatusCodeInsufficientCredits StatusCode = "500"
|
||||
StatusCodeErrorCarrierDelivery StatusCode = "600"
|
||||
StatusCodeErrorUnknown StatusCode = "700"
|
||||
StatusCodeErrorAuthentication StatusCode = "900"
|
||||
StatusCodeErrorApiDisabledForKey StatusCode = "902"
|
||||
StatusCodeErrorServerIp StatusCode = "903"
|
||||
)
|
||||
|
||||
var StatusCodes = map[StatusCode]string{
|
||||
StatusCodeErrorCarrierNotAvailable: "ErrorCarrierNotAvailable",
|
||||
StatusCodeSuccess: "Success",
|
||||
StatusCodeSuccessPartial: "SuccessPartial",
|
||||
StatusCodeInvalidSender: "InvalidSender",
|
||||
StatusCodeInvalidRecipient: "InvalidRecipient",
|
||||
StatusCodeMissingParamTo: "MissingParamTo",
|
||||
StatusCodeMissingParamText: "MissingParamText",
|
||||
StatusCodeParamTextExceedsLengthLimit: "ParamTextExceedsLengthLimit",
|
||||
StatusCodePreventedByReloadLock: "PreventedByReloadLock",
|
||||
StatusCodeReachedDailyLimitForNumber: "ReachedDailyLimitForNumber",
|
||||
StatusCodeInsufficientCredits: "InsufficientCredits",
|
||||
StatusCodeErrorCarrierDelivery: "ErrorCarrierDelivery",
|
||||
StatusCodeErrorUnknown: "ErrorUnknown",
|
||||
StatusCodeErrorAuthentication: "ErrorAuthentication",
|
||||
StatusCodeErrorApiDisabledForKey: "ErrorApiDisabledForKey",
|
||||
StatusCodeErrorServerIp: "ErrorServerIp",
|
||||
}
|
||||
|
||||
func New(options Options) *Sms77API {
|
||||
if "" == options.SentWith {
|
||||
options.SentWith = defaultOptionSentWith
|
||||
}
|
||||
|
||||
c := &Sms77API{client: http.DefaultClient}
|
||||
c.Options = options
|
||||
c.base.client = c
|
||||
|
||||
c.Analytics = (*AnalyticsResource)(&c.base)
|
||||
c.Balance = (*BalanceResource)(&c.base)
|
||||
c.Contacts = (*ContactsResource)(&c.base)
|
||||
c.Hooks = (*HooksResource)(&c.base)
|
||||
c.Journal = (*JournalResource)(&c.base)
|
||||
c.Lookup = (*LookupResource)(&c.base)
|
||||
c.Pricing = (*PricingResource)(&c.base)
|
||||
c.Sms = (*SmsResource)(&c.base)
|
||||
c.Status = (*StatusResource)(&c.base)
|
||||
c.ValidateForVoice = (*ValidateForVoiceResource)(&c.base)
|
||||
c.Voice = (*VoiceResource)(&c.base)
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
func (api *Sms77API) get(ctx context.Context, endpoint string, data map[string]interface{}) (string, error) {
|
||||
return api.request(ctx, endpoint, http.MethodGet, data)
|
||||
}
|
||||
|
||||
func (api *Sms77API) post(ctx context.Context, endpoint string, data map[string]interface{}) (string, error) {
|
||||
return api.request(ctx, endpoint, http.MethodPost, data)
|
||||
}
|
||||
|
||||
func (api *Sms77API) request(ctx context.Context, endpoint string, method string, data interface{}) (string, error) {
|
||||
createRequestPayload := func() string {
|
||||
params := url.Values{}
|
||||
|
||||
for k, v := range data.(map[string]interface{}) {
|
||||
if api.Debug {
|
||||
log.Printf("%s: %v", k, v)
|
||||
}
|
||||
|
||||
switch v.(type) {
|
||||
case nil:
|
||||
continue
|
||||
case bool:
|
||||
if true == v {
|
||||
v = "1"
|
||||
} else {
|
||||
v = "0"
|
||||
}
|
||||
case int64:
|
||||
v = strconv.FormatInt(v.(int64), 10)
|
||||
case []interface{}:
|
||||
for fileIndex, files := range v.([]interface{}) {
|
||||
for fileKey, fileValue := range files.(map[string]interface{}) {
|
||||
params.Add(
|
||||
fmt.Sprintf("%s[%d][%s]", k, fileIndex, fileKey), fmt.Sprintf("%v", fileValue))
|
||||
}
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
params.Add(k, fmt.Sprintf("%v", v))
|
||||
}
|
||||
|
||||
return params.Encode()
|
||||
}
|
||||
|
||||
initClient := func() (req *http.Request, err error) {
|
||||
var uri = fmt.Sprintf("https://gateway.sms77.io/api/%s", endpoint)
|
||||
var qs = createRequestPayload()
|
||||
var headers = map[string]string{
|
||||
"Authorization": fmt.Sprintf("Basic %s", api.ApiKey),
|
||||
sentWithKey: api.SentWith,
|
||||
}
|
||||
var body = ""
|
||||
|
||||
if http.MethodGet == method {
|
||||
if "" != qs {
|
||||
uri = fmt.Sprintf("%s?%s", uri, qs)
|
||||
}
|
||||
} else {
|
||||
body = qs
|
||||
|
||||
headers["Content-Type"] = "application/x-www-form-urlencoded"
|
||||
}
|
||||
|
||||
if api.Debug {
|
||||
log.Printf("%s %s", method, uri)
|
||||
}
|
||||
|
||||
req, err = http.NewRequestWithContext(ctx, method, uri, strings.NewReader(body))
|
||||
|
||||
if nil != err {
|
||||
log.Println(err.Error())
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for k, v := range headers {
|
||||
req.Header.Add(k, v)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if http.MethodGet != method && http.MethodPost != method {
|
||||
return "", errors.New(fmt.Sprintf("unsupported http method %s", method))
|
||||
}
|
||||
|
||||
if "" == api.Options.ApiKey {
|
||||
return "", errors.New("missing required option ApiKey")
|
||||
}
|
||||
|
||||
if nil == data {
|
||||
data = map[string]interface{}{}
|
||||
}
|
||||
data, _ = json.Marshal(&data)
|
||||
json.Unmarshal(data.([]byte), &data)
|
||||
|
||||
req, err := initClient()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("could not execute request! #1 (%s)", err.Error())
|
||||
}
|
||||
|
||||
res, err := api.client.Do(req)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("could not execute request! #2 (%s)", err.Error())
|
||||
}
|
||||
|
||||
defer res.Body.Close()
|
||||
|
||||
body, err := ioutil.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("could not execute request! #3 (%s)", err.Error())
|
||||
}
|
||||
|
||||
str := strings.TrimSpace(string(body))
|
||||
|
||||
if api.Debug {
|
||||
log.Println(str)
|
||||
}
|
||||
|
||||
length := len(str)
|
||||
|
||||
if 2 == length || 3 == length {
|
||||
code, msg := pickMapByKey(str, StatusCodes)
|
||||
if nil != code {
|
||||
return "", errors.New(fmt.Sprintf("%s: %s", code, msg))
|
||||
}
|
||||
}
|
||||
|
||||
return str, nil
|
||||
}
|
64
vendor/github.com/sms77io/go-client/sms77api/status.go
generated
vendored
Normal file
64
vendor/github.com/sms77io/go-client/sms77api/status.go
generated
vendored
Normal file
|
@ -0,0 +1,64 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type StatusResource resource
|
||||
|
||||
type StatusParams struct {
|
||||
MessageId uint64 `json:"msg_id"`
|
||||
}
|
||||
|
||||
type Status struct {
|
||||
Code string
|
||||
DateTime string
|
||||
}
|
||||
|
||||
func makeStatus(res *string) (s *Status, e error) {
|
||||
if nil == res {
|
||||
return nil, errors.New("cannot make status from nil")
|
||||
}
|
||||
|
||||
if StatusApiCodeInvalidMessageId == *res {
|
||||
return nil, errors.New(StatusApiCodeInvalidMessageId + ": Invalid message ID")
|
||||
}
|
||||
|
||||
lines := strings.Split(*res, "\n")
|
||||
|
||||
if 2 != len(lines) {
|
||||
return nil, errors.New("need exactly 2 lines to make a status")
|
||||
}
|
||||
|
||||
return &Status{
|
||||
Code: lines[0],
|
||||
DateTime: lines[1],
|
||||
}, nil
|
||||
}
|
||||
|
||||
const StatusApiCodeInvalidMessageId = "901"
|
||||
|
||||
func (api *StatusResource) Text(p StatusParams) (*string, error) {
|
||||
return api.TextContext(context.Background(), p)
|
||||
}
|
||||
func (api *StatusResource) TextContext(ctx context.Context, p StatusParams) (*string, error) {
|
||||
res, err := api.client.request(ctx, "status", "POST", p)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
func (api *StatusResource) Json(p StatusParams) (o *Status, e error) {
|
||||
r, e := api.Text(p)
|
||||
|
||||
if nil != e {
|
||||
return
|
||||
}
|
||||
|
||||
return makeStatus(r)
|
||||
}
|
41
vendor/github.com/sms77io/go-client/sms77api/util.go
generated
vendored
Normal file
41
vendor/github.com/sms77io/go-client/sms77api/util.go
generated
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func pickMapByKey(needle interface{}, haystack interface{}) (interface{}, interface{}) {
|
||||
mapIter := reflect.ValueOf(haystack).MapRange()
|
||||
|
||||
for mapIter.Next() {
|
||||
if needle == mapIter.Key() {
|
||||
return needle, mapIter.Value()
|
||||
}
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func inArray(needle interface{}, haystack interface{}) bool {
|
||||
slice := reflect.ValueOf(haystack)
|
||||
c := slice.Len()
|
||||
|
||||
for i := 0; i < c; i++ {
|
||||
if needle == slice.Index(i).Interface() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func toUint(id string, bitSize int) uint64 {
|
||||
n, err := strconv.ParseUint(id, 10, bitSize)
|
||||
|
||||
if nil == err {
|
||||
return n
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
39
vendor/github.com/sms77io/go-client/sms77api/validate_for_voice.go
generated
vendored
Normal file
39
vendor/github.com/sms77io/go-client/sms77api/validate_for_voice.go
generated
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
type ValidateForVoiceParams struct {
|
||||
Callback string `json:"callback"`
|
||||
Number string `json:"number"`
|
||||
}
|
||||
|
||||
type ValidateForVoiceResponse struct {
|
||||
Code string `json:"code"`
|
||||
Error *string `json:"error"`
|
||||
FormattedOutput *string `json:"formatted_output"`
|
||||
Id *int64 `json:"id"`
|
||||
Sender string `json:"sender"`
|
||||
Success bool `json:"success"`
|
||||
Voice bool `json:"voice"`
|
||||
}
|
||||
|
||||
type ValidateForVoiceResource resource
|
||||
|
||||
func (api *ValidateForVoiceResource) Get(p ValidateForVoiceParams) (o *ValidateForVoiceResponse, e error) {
|
||||
return api.GetContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *ValidateForVoiceResource) GetContext(ctx context.Context, p ValidateForVoiceParams) (o *ValidateForVoiceResponse, e error) {
|
||||
r, e := api.client.request(ctx, "validate_for_voice", "GET", p)
|
||||
|
||||
if nil != e {
|
||||
return
|
||||
}
|
||||
|
||||
e = json.Unmarshal([]byte(r), o)
|
||||
|
||||
return
|
||||
}
|
61
vendor/github.com/sms77io/go-client/sms77api/voice.go
generated
vendored
Normal file
61
vendor/github.com/sms77io/go-client/sms77api/voice.go
generated
vendored
Normal file
|
@ -0,0 +1,61 @@
|
|||
package sms77api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Voice struct {
|
||||
Code int
|
||||
Cost float64
|
||||
Id int
|
||||
}
|
||||
|
||||
type VoiceParams struct {
|
||||
Debug bool `json:"debug,omitempty"`
|
||||
To string `json:"to"`
|
||||
Text string `json:"text"`
|
||||
Xml bool `json:"xml,omitempty"`
|
||||
From string `json:"from,omitempty"`
|
||||
}
|
||||
|
||||
type VoiceResource resource
|
||||
|
||||
func makeVoice(res string) Voice {
|
||||
lines := strings.Split(res, "\n")
|
||||
|
||||
code, _ := strconv.Atoi(lines[0])
|
||||
id, _ := strconv.Atoi(lines[1])
|
||||
cost, _ := strconv.ParseFloat(lines[2], 64)
|
||||
|
||||
return Voice{
|
||||
Code: code,
|
||||
Cost: cost,
|
||||
Id: id,
|
||||
}
|
||||
}
|
||||
|
||||
func (api *VoiceResource) Text(p VoiceParams) (*string, error) {
|
||||
return api.TextContext(context.Background(), p)
|
||||
}
|
||||
|
||||
func (api *VoiceResource) TextContext(ctx context.Context, p VoiceParams) (*string, error) {
|
||||
res, err := api.client.request(ctx, "voice", "POST", p)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
func (api *VoiceResource) Json(p VoiceParams) (o Voice, e error) {
|
||||
r, e := api.Text(p)
|
||||
|
||||
if nil != e {
|
||||
return
|
||||
}
|
||||
|
||||
return makeVoice(*r), nil
|
||||
}
|
3
vendor/modules.txt
vendored
Normal file
3
vendor/modules.txt
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
# github.com/sms77io/go-client v0.0.0-20211026080708-90d592e387a5
|
||||
## explicit; go 1.15
|
||||
github.com/sms77io/go-client/sms77api
|
Loading…
Reference in a new issue