Skip to content

Commit 516a70d

Browse files
committed
feat: go auth
1 parent d508a91 commit 516a70d

File tree

3 files changed

+140
-60
lines changed

3 files changed

+140
-60
lines changed

client/client.go

+13
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ func (c *Client) SendRequest(method string, rawURL string, data url.Values,
190190
if !CheckTokenExpiry(c.BearerToken) {
191191
req.Header.Add("Authorization", "Bearer "+c.BearerToken)
192192
} else {
193+
NewApiService(c).CreateToken(nil)
193194
}
194195
} else if c.Username != "" {
195196
req.SetBasicAuth(c.basicAuth())
@@ -238,3 +239,15 @@ func CheckTokenExpiry(tokenString string) bool {
238239
}
239240
return true // Consider token expired if it does not contain an exp claim or invalid claims
240241
}
242+
243+
type ApiService struct {
244+
baseURL string
245+
requestHandler RequestHandler
246+
}
247+
248+
func NewApiService(requestHandler RequestHandler) *ApiService {
249+
return &ApiService{
250+
requestHandler: requestHandler,
251+
baseURL: "https://preview-iam.twilio.com",
252+
}
253+
}

oauth/oauth_utils.go

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package oauth
2+
3+
import (
4+
"fmt"
5+
6+
PreviewIamTemp "github.com/twilio/twilio-go/rest/preview_iam/temp"
7+
)
8+
9+
type OrgTokenManager struct {
10+
GrantType string
11+
ClientId string
12+
ClientSecret string
13+
Code string
14+
RedirectUri string
15+
Audience string
16+
RefreshToken string
17+
Scope string
18+
}
19+
20+
type ClientTokenManager struct {
21+
GrantType string
22+
ClientId string
23+
ClientSecret string
24+
Code string
25+
RedirectUri string
26+
Audience string
27+
RefreshToken string
28+
Scope string
29+
}
30+
31+
func GetOrgAccessToken(manager OrgTokenManager) (*PreviewIamTemp.OauthV1Token, error) {
32+
params := &PreviewIamTemp.CreateTokenParams{}
33+
params.SetGrantType(manager.GrantType)
34+
params.SetClientId(manager.ClientId)
35+
params.SetClientSecret(manager.ClientSecret)
36+
params.SetCode(manager.Code)
37+
params.SetRedirectUri(manager.RedirectUri)
38+
params.SetAudience(manager.Audience)
39+
params.SetRefreshToken(manager.RefreshToken)
40+
params.SetScope(manager.Scope)
41+
42+
token, err := PreviewIamTemp.NewApiService(NewRestClient().RequestHandler).CreateToken(params)
43+
if err != nil {
44+
return nil, fmt.Errorf("failed to get access token: %w", err)
45+
}
46+
47+
return token, nil
48+
}
49+
50+
func GetClientAccessToken(manager ClientTokenManager) (*PreviewIamTemp.OauthV1Token, error) {
51+
params := &PreviewIamTemp.CreateTokenParams{}
52+
params.SetGrantType(manager.GrantType)
53+
params.SetClientId(manager.ClientId)
54+
params.SetClientSecret(manager.ClientSecret)
55+
params.SetCode(manager.Code)
56+
params.SetRedirectUri(manager.RedirectUri)
57+
params.SetAudience(manager.Audience)
58+
params.SetRefreshToken(manager.RefreshToken)
59+
params.SetScope(manager.Scope)
60+
61+
token, err := PreviewIamTemp.NewApiService(NewRestClient().RequestHandler).CreateToken(params)
62+
if err != nil {
63+
return nil, fmt.Errorf("failed to get access token: %w", err)
64+
}
65+
66+
return token, nil
67+
}

twilio.go

+60-60
Original file line numberDiff line numberDiff line change
@@ -149,66 +149,6 @@ type ClientCredentialProvider struct {
149149
AuthStrategy CredentialProvider
150150
}
151151

152-
type OrgTokenManager struct {
153-
GrantType string
154-
ClientId string
155-
ClientSecret string
156-
Code string
157-
RedirectUri string
158-
Audience string
159-
RefreshToken string
160-
Scope string
161-
}
162-
163-
type ClientTokenManager struct {
164-
GrantType string
165-
ClientId string
166-
ClientSecret string
167-
Code string
168-
RedirectUri string
169-
Audience string
170-
RefreshToken string
171-
Scope string
172-
}
173-
174-
func GetOrgAccessToken(manager OrgTokenManager) (*PreviewIamTemp.OauthV1Token, error) {
175-
params := &PreviewIamTemp.CreateTokenParams{}
176-
params.SetGrantType(manager.GrantType)
177-
params.SetClientId(manager.ClientId)
178-
params.SetClientSecret(manager.ClientSecret)
179-
params.SetCode(manager.Code)
180-
params.SetRedirectUri(manager.RedirectUri)
181-
params.SetAudience(manager.Audience)
182-
params.SetRefreshToken(manager.RefreshToken)
183-
params.SetScope(manager.Scope)
184-
185-
token, err := PreviewIamTemp.NewApiService(NewRestClient().RequestHandler).CreateToken(params)
186-
if err != nil {
187-
return nil, fmt.Errorf("failed to get access token: %w", err)
188-
}
189-
190-
return token, nil
191-
}
192-
193-
func GetClientAccessToken(manager ClientTokenManager) (*PreviewIamTemp.OauthV1Token, error) {
194-
params := &PreviewIamTemp.CreateTokenParams{}
195-
params.SetGrantType(manager.GrantType)
196-
params.SetClientId(manager.ClientId)
197-
params.SetClientSecret(manager.ClientSecret)
198-
params.SetCode(manager.Code)
199-
params.SetRedirectUri(manager.RedirectUri)
200-
params.SetAudience(manager.Audience)
201-
params.SetRefreshToken(manager.RefreshToken)
202-
params.SetScope(manager.Scope)
203-
204-
token, err := PreviewIamTemp.NewApiService(NewRestClient().RequestHandler).CreateToken(params)
205-
if err != nil {
206-
return nil, fmt.Errorf("failed to get access token: %w", err)
207-
}
208-
209-
return token, nil
210-
}
211-
212152
type ClientParams struct {
213153
Username string
214154
Password string
@@ -354,6 +294,66 @@ func NewRestClientWithParams(params ClientParams) *RestClient {
354294
return c
355295
}
356296

297+
type OrgTokenManager struct {
298+
GrantType string
299+
ClientId string
300+
ClientSecret string
301+
Code string
302+
RedirectUri string
303+
Audience string
304+
RefreshToken string
305+
Scope string
306+
}
307+
308+
type ClientTokenManager struct {
309+
GrantType string
310+
ClientId string
311+
ClientSecret string
312+
Code string
313+
RedirectUri string
314+
Audience string
315+
RefreshToken string
316+
Scope string
317+
}
318+
319+
func GetOrgAccessToken(manager OrgTokenManager) (*PreviewIamTemp.OauthV1Token, error) {
320+
params := &PreviewIamTemp.CreateTokenParams{}
321+
params.SetGrantType(manager.GrantType)
322+
params.SetClientId(manager.ClientId)
323+
params.SetClientSecret(manager.ClientSecret)
324+
params.SetCode(manager.Code)
325+
params.SetRedirectUri(manager.RedirectUri)
326+
params.SetAudience(manager.Audience)
327+
params.SetRefreshToken(manager.RefreshToken)
328+
params.SetScope(manager.Scope)
329+
330+
token, err := PreviewIamTemp.NewApiService(NewRestClient().RequestHandler).CreateToken(params)
331+
if err != nil {
332+
return nil, fmt.Errorf("failed to get access token: %w", err)
333+
}
334+
335+
return token, nil
336+
}
337+
338+
func GetClientAccessToken(manager ClientTokenManager) (*PreviewIamTemp.OauthV1Token, error) {
339+
params := &PreviewIamTemp.CreateTokenParams{}
340+
params.SetGrantType(manager.GrantType)
341+
params.SetClientId(manager.ClientId)
342+
params.SetClientSecret(manager.ClientSecret)
343+
params.SetCode(manager.Code)
344+
params.SetRedirectUri(manager.RedirectUri)
345+
params.SetAudience(manager.Audience)
346+
params.SetRefreshToken(manager.RefreshToken)
347+
params.SetScope(manager.Scope)
348+
349+
token, err := PreviewIamTemp.NewApiService(NewRestClient().RequestHandler).CreateToken(params)
350+
if err != nil {
351+
return nil, fmt.Errorf("failed to get access token: %w", err)
352+
}
353+
354+
return token, nil
355+
}
356+
357357
// NewRestClient provides an initialized Twilio RestClient.
358358
func NewRestClient() *RestClient {
359359
return NewRestClientWithParams(ClientParams{})

0 commit comments

Comments
 (0)