This repository has been archived by the owner on Aug 3, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 35
/
ip_member.go
164 lines (127 loc) · 4.21 KB
/
ip_member.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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
package twiliogo
import (
"encoding/json"
"net/url"
)
// IPMember is a IP Messaging Member resource.
type IPMember struct {
Sid string `json:"sid"`
AccountSid string `json:"account_sid"`
ChannelSid string `json:"channel_sid"`
ServiceSid string `json:"service_sid"`
Identity string `json:"identity"`
RoleSid *string `json:"role_sid"`
DateCreated string `json:"date_created"`
DateUpdated string `json:"date_updated"`
URL string `json:"url"`
}
// IPMemberList gives the results for querying the set of members. Returns the first page
// by default.
type IPMemberList struct {
Client Client
Members []IPMember `json:"members"`
Meta Meta `json:"meta"`
}
// AddIPMemberToChannel adds a member to a channel.
func AddIPMemberToChannel(client *TwilioIPMessagingClient, serviceSid string, channelSid string, identity string, roleSid string) (*IPMember, error) {
var member *IPMember
params := url.Values{}
params.Set("Identity", identity)
if roleSid != "" {
params.Set("RoleSid", roleSid)
}
res, err := client.post(params, "/Services/"+serviceSid+"/Channels/"+channelSid+"/Members.json")
if err != nil {
return member, err
}
member = new(IPMember)
err = json.Unmarshal(res, member)
return member, err
}
// GetIPChannelMember returns the specified IP Member in the channel.
func GetIPChannelMember(client *TwilioIPMessagingClient, serviceSid, channelSid, sid string) (*IPMember, error) {
var member *IPMember
res, err := client.get(url.Values{}, "/Services/"+serviceSid+"/Channels/"+channelSid+"/Members/"+sid+".json")
if err != nil {
return nil, err
}
member = new(IPMember)
err = json.Unmarshal(res, member)
return member, err
}
// RemoveIPMemberFromChannel removes the given member from the channel.
func RemoveIPMemberFromChannel(client *TwilioIPMessagingClient, serviceSid, channelSid, sid string) error {
return client.delete("/Services/" + serviceSid + "/Channels/" + channelSid + "/Members/" + sid)
}
// ListIPMembers returns the first page of members.
func ListIPMembers(client *TwilioIPMessagingClient, serviceSid, channelSid string) (*IPMemberList, error) {
var memberList *IPMemberList
body, err := client.get(nil, "/Services/"+serviceSid+"/Channels/"+channelSid+"/Members.json")
if err != nil {
return memberList, err
}
memberList = new(IPMemberList)
memberList.Client = client
err = json.Unmarshal(body, memberList)
return memberList, err
}
// GetMembers recturns the current page of members.
func (c *IPMemberList) GetMembers() []IPMember {
return c.Members
}
// GetAllMembers returns all of the members from all of the pages (from here forward).
func (c *IPMemberList) GetAllMembers() ([]IPMember, error) {
members := c.Members
t := c
for t.HasNextPage() {
var err error
t, err = t.NextPage()
if err != nil {
return nil, err
}
members = append(members, t.Members...)
}
return members, nil
}
// HasNextPage returns whether or not there is a next page of members.
func (c *IPMemberList) HasNextPage() bool {
return c.Meta.NextPageUri != ""
}
// NextPage returns the next page of members.
func (c *IPMemberList) NextPage() (*IPMemberList, error) {
if !c.HasNextPage() {
return nil, Error{"No next page"}
}
return c.getPage(c.Meta.NextPageUri)
}
// HasPreviousPage indicates whether or not there is a previous page of results.
func (c *IPMemberList) HasPreviousPage() bool {
return c.Meta.PreviousPageUri != ""
}
// PreviousPage returns the previous page of members.
func (c *IPMemberList) PreviousPage() (*IPMemberList, error) {
if !c.HasPreviousPage() {
return nil, Error{"No previous page"}
}
return c.getPage(c.Meta.NextPageUri)
}
// FirstPage returns the first page of members.
func (c *IPMemberList) FirstPage() (*IPMemberList, error) {
return c.getPage(c.Meta.FirstPageUri)
}
// LastPage returns the last page of members.
func (c *IPMemberList) LastPage() (*IPMemberList, error) {
return c.getPage(c.Meta.LastPageUri)
}
func (c *IPMemberList) getPage(uri string) (*IPMemberList, error) {
var memberList *IPMemberList
client := c.Client
body, err := client.get(nil, uri)
if err != nil {
return memberList, err
}
memberList = new(IPMemberList)
memberList.Client = client
err = json.Unmarshal(body, memberList)
return memberList, err
}