Skip to content

Commit ec79368

Browse files
chore: removed SetHost and shifted SetDataResidency to sendgrid.go (#470)
1 parent e7f240a commit ec79368

File tree

3 files changed

+41
-59
lines changed

3 files changed

+41
-59
lines changed

base_interface.go

-50
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"context"
77
"errors"
88
"net/http"
9-
"net/url"
109
"strconv"
1110
"time"
1211

@@ -21,11 +20,6 @@ const (
2120
rateLimitSleep = 1100
2221
)
2322

24-
var allowedRegionsHostMap = map[string]string{
25-
"eu": "https://api.eu.sendgrid.com",
26-
"global": "https://api.sendgrid.com",
27-
}
28-
2923
type options struct {
3024
Auth string
3125
Endpoint string
@@ -61,50 +55,6 @@ func requestNew(options options) rest.Request {
6155
}
6256
}
6357

64-
// extractEndpoint extracts the endpoint from a baseURL
65-
func extractEndpoint(link string) (string, error) {
66-
parsedURL, err := url.Parse(link)
67-
if err != nil {
68-
return "", err
69-
}
70-
71-
return parsedURL.Path, nil
72-
}
73-
74-
// SetHost changes the baseURL of the request with the host passed
75-
/*
76-
* This allows support for global and eu regions only. This set will likely expand in the future.
77-
* Global should be the default
78-
* Global region means the message should be sent through:
79-
* HTTP: api.sendgrid.com
80-
* EU region means the message should be sent through:
81-
* HTTP: api.eu.sendgrid.com
82-
*/
83-
// @return [Request] the modified request object
84-
func SetHost(request rest.Request, host string) (rest.Request, error) {
85-
endpoint, err := extractEndpoint(request.BaseURL)
86-
if err != nil {
87-
return request, err
88-
}
89-
90-
request.BaseURL = host + endpoint
91-
return request, nil
92-
}
93-
94-
// SetDataResidency modifies the host as per the region
95-
// @return [Request] the modified request object
96-
func SetDataResidency(request rest.Request, region string) (rest.Request, error) {
97-
regionalHost, present := allowedRegionsHostMap[region]
98-
if !present {
99-
return request, errors.New("error: region can only be \"eu\" or \"global\"")
100-
}
101-
request, err := SetHost(request, regionalHost)
102-
if err != nil {
103-
return request, err
104-
}
105-
return request, nil
106-
}
107-
10858
// Send sends an email through Twilio SendGrid
10959
func (cl *Client) Send(email *mail.SGMailV3) (*rest.Response, error) {
11060
return cl.SendWithContext(context.Background(), email)

sendgrid.go

+41
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package sendgrid
22

33
import (
4+
"errors"
45
"github.com/sendgrid/rest"
6+
"net/url"
57
)
68

79
// sendGridOptions for CreateRequest
@@ -12,6 +14,12 @@ type sendGridOptions struct {
1214
Subuser string
1315
}
1416

17+
// sendgrid host map for different regions
18+
var allowedRegionsHostMap = map[string]string{
19+
"eu": "https://api.eu.sendgrid.com",
20+
"global": "https://api.sendgrid.com",
21+
}
22+
1523
// GetRequest
1624
// @return [Request] a default request object
1725
func GetRequest(key, endpoint, host string) rest.Request {
@@ -47,3 +55,36 @@ func NewSendClient(key string) *Client {
4755
request.Method = "POST"
4856
return &Client{request}
4957
}
58+
59+
// extractEndpoint extracts the endpoint from a baseURL
60+
func extractEndpoint(link string) (string, error) {
61+
parsedURL, err := url.Parse(link)
62+
if err != nil {
63+
return "", err
64+
}
65+
66+
return parsedURL.Path, nil
67+
}
68+
69+
// SetDataResidency modifies the host as per the region
70+
/*
71+
* This allows support for global and eu regions only. This set will likely expand in the future.
72+
* Global should be the default
73+
* Global region means the message should be sent through:
74+
* HTTP: api.sendgrid.com
75+
* EU region means the message should be sent through:
76+
* HTTP: api.eu.sendgrid.com
77+
*/
78+
// @return [Request] the modified request object
79+
func SetDataResidency(request rest.Request, region string) (rest.Request, error) {
80+
regionalHost, present := allowedRegionsHostMap[region]
81+
if !present {
82+
return request, errors.New("error: region can only be \"eu\" or \"global\"")
83+
}
84+
endpoint, err := extractEndpoint(request.BaseURL)
85+
if err != nil {
86+
return request, err
87+
}
88+
request.BaseURL = regionalHost + endpoint
89+
return request, nil
90+
}

sendgrid_test.go

-9
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,6 @@ func TestSetDataResidencyOverrideHost(t *testing.T) {
102102
assert.Equal(t, "https://api.eu.sendgrid.com", request.BaseURL, "Host not correct as per the region")
103103
}
104104

105-
func TestSetDataResidencyOverrideDataResidency(t *testing.T) {
106-
request := GetRequest("API_KEY", "", "")
107-
request, err := SetDataResidency(request, "eu")
108-
assert.Nil(t, err)
109-
request, err = SetHost(request, "https://test.api.com")
110-
assert.Nil(t, err)
111-
assert.Equal(t, "https://test.api.com", request.BaseURL, "Host not correct as per the region")
112-
}
113-
114105
func TestSetDataResidencyIncorrectRegion(t *testing.T) {
115106
request := GetRequest("API_KEY", "", "")
116107
_, err := SetDataResidency(request, "foo")

0 commit comments

Comments
 (0)