-
Notifications
You must be signed in to change notification settings - Fork 1
/
client.go
110 lines (92 loc) · 2.55 KB
/
client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package valuefirst
import (
"context"
"github.com/flip-id/valuefirst/manager"
)
var _ Client = new(client)
// Client is the interface for the ValueFirst API client.
type Client interface {
manager.TokenClient
// SendSMS sends SMS messages to a list of addresses.
SendSMS(ctx context.Context, req *RequestSendSMS) (resp *ResponseMessage, err error)
}
type client struct {
opt *Option
}
// New initialize the ValueFirst API client.
func New(opts ...FnOption) (c Client, err error) {
opt := (new(Option)).Assign(opts...)
err = opt.Validate()
if err != nil {
return
}
newClient := new(client)
newClient.opt = opt.setValueFirstClient(newClient).
Default().
Clone()
c = newClient
return
}
// GenerateToken generate a token for the user.
func (c *client) GenerateToken(ctx context.Context) (res manager.ResponseGenerateToken, err error) {
req, err := c.getRequestTokenManagement(URLActionGenerateToken)
if err != nil {
return
}
err = c.doRequestTokenManagement(ctx, req, &res)
return
}
// EnableToken enables the token.
func (c *client) EnableToken(ctx context.Context, token string) (res manager.ResponseEnableToken, err error) {
req, err := c.getRequestTokenManagement(URLActionEnableToken)
if err != nil {
return
}
q := req.URL.Query()
q.Add(QueryParamToken, token)
req.URL.RawQuery = q.Encode()
err = c.doRequestTokenManagement(ctx, req, &res)
return
}
// DisableToken disables the token.
func (c *client) DisableToken(ctx context.Context, token string) (res manager.ResponseEnableToken, err error) {
req, err := c.getRequestTokenManagement(URLActionDisableToken)
if err != nil {
return
}
q := req.URL.Query()
q.Add(QueryParamToken, token)
req.URL.RawQuery = q.Encode()
err = c.doRequestTokenManagement(ctx, req, &res)
return
}
// DeleteToken disables the token.
func (c *client) DeleteToken(ctx context.Context, token string) (res manager.ResponseEnableToken, err error) {
req, err := c.getRequestTokenManagement(URLActionDeleteToken)
if err != nil {
return
}
q := req.URL.Query()
q.Add(QueryParamToken, token)
req.URL.RawQuery = q.Encode()
err = c.doRequestTokenManagement(ctx, req, &res)
return
}
// SendSMS sends SMS messages to a list of addresses.
func (c *client) SendSMS(ctx context.Context, req *RequestSendSMS) (resp *ResponseMessage, err error) {
if req == nil {
err = ErrNilRequest
return
}
r, buff, err := c.getRequestSendSMS(URLActionSendSMS, req.Default())
if err != nil {
return
}
defer c.putBuffer(buff)
err = c.doRequestSendSMS(ctx, r, &resp)
if err != nil {
return
}
err = resp.GetError()
return
}