Skip to content

Commit a36e197

Browse files
committed
SUMO-172016 add JWT support
1 parent 5ba675c commit a36e197

File tree

2 files changed

+50
-19
lines changed

2 files changed

+50
-19
lines changed

sumologic/provider.go

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ func Provider() terraform.ResourceProvider {
2727
Required: true,
2828
DefaultFunc: schema.EnvDefaultFunc("SUMOLOGIC_ACCESSKEY", nil),
2929
},
30+
"auth_jwt": {
31+
Type: schema.TypeString,
32+
Required: true,
33+
DefaultFunc: schema.EnvDefaultFunc("SUMOLOGIC_AUTHJWT", nil),
34+
},
3035
"environment": {
3136
Type: schema.TypeString,
3237
Optional: true,
@@ -91,12 +96,16 @@ func Provider() terraform.ResourceProvider {
9196

9297
var SumoMutexKV = mutexkv.NewMutexKV()
9398

94-
func resolveRedirectURL(accessId string, accessKey string) (string, error) {
99+
func resolveRedirectURL(accessId string, accessKey string, authJwt string) (string, error) {
95100
req, err := http.NewRequest(http.MethodHead, "https://api.sumologic.com/api/v1/collectors", nil)
96101
if err != nil {
97102
return "", err
98103
}
99-
req.SetBasicAuth(accessId, accessKey)
104+
if authJwt == "" {
105+
req.SetBasicAuth(accessId, accessKey)
106+
} else {
107+
req.Header.Add("Authorization", "Bearer "+authJwt)
108+
}
100109
client := &http.Client{CheckRedirect: func(req *http.Request, via []*http.Request) error {
101110
return http.ErrUseLastResponse
102111
}}
@@ -116,21 +125,36 @@ func resolveRedirectURL(accessId string, accessKey string) (string, error) {
116125
func providerConfigure(d *schema.ResourceData) (interface{}, error) {
117126
accessId := d.Get("access_id").(string)
118127
accessKey := d.Get("access_key").(string)
128+
authJwt := d.Get("auth_jwt").(string)
119129
environment := d.Get("environment").(string)
120130
baseUrl := d.Get("base_url").(string)
121131

122132
msg := ""
123-
if accessId == "" {
124-
msg = "sumologic provider: access_id should be set;"
125-
}
126-
127-
if accessKey == "" {
128-
msg = fmt.Sprintf("%s access_key should be set; ", msg)
133+
if authJwt == "" {
134+
if accessId == "" || accessKey == "" {
135+
msg = "sumologic provider: auth_jwt is not set;"
136+
}
137+
if accessId == "" {
138+
msg = fmt.sprintf("%s access_id should be set;", msg)
139+
}
140+
if accessKey == "" {
141+
msg = fmt.Sprintf("%s access_key should be set; ", msg)
142+
}
143+
} else {
144+
if accessId != "" || accessKey != "" {
145+
msg = "sumologic provider: auth_jwt is set;"
146+
}
147+
if accessId != "" {
148+
msg = fmt.sprintf("%s access_id should not be set;", msg)
149+
}
150+
if accessKey != "" {
151+
msg = fmt.Sprintf("%s access_key should not be set; ", msg)
152+
}
129153
}
130154

131155
if environment == "" && baseUrl == "" {
132156
log.Printf("Attempting to resolve redirection URL from access key/id")
133-
url, err := resolveRedirectURL(accessId, accessKey)
157+
url, err := resolveRedirectURL(accessId, accessKey, authJwt)
134158
if err != nil {
135159
log.Printf("[WARN] Unable to resolve redirection URL, %s", err)
136160
environment = "us2"
@@ -150,6 +174,7 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) {
150174
return NewClient(
151175
accessId,
152176
accessKey,
177+
authJwt,
153178
environment,
154179
baseUrl,
155180
)

sumologic/sumologic_client.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type HttpClient interface {
1919
type Client struct {
2020
AccessID string
2121
AccessKey string
22+
AuthJwt string
2223
Environment string
2324
BaseURL *url.URL
2425
httpClient HttpClient
@@ -40,14 +41,18 @@ var endpoints = map[string]string{
4041

4142
var rateLimiter = time.NewTicker(time.Minute / 240)
4243

43-
func createNewRequest(method, url string, body io.Reader, accessID string, accessKey string) (*http.Request, error) {
44+
func createNewRequest(method, url string, body io.Reader, accessID string, accessKey string, authJwt string) (*http.Request, error) {
4445
req, err := http.NewRequest(method, url, body)
4546
if err != nil {
4647
return nil, err
4748
}
4849
req.Header.Add("Content-Type", "application/json")
4950
req.Header.Add("User-Agent", "SumoLogicTerraformProvider/"+ProviderVersion)
50-
req.SetBasicAuth(accessID, accessKey)
51+
if authJwt == "" {
52+
req.SetBasicAuth(accessID, accessKey)
53+
} else {
54+
req.Header.Add("Authorization", "Bearer "+authJwt)
55+
}
5156
return req, nil
5257
}
5358

@@ -64,7 +69,7 @@ func (s *Client) PostWithCookies(urlPath string, payload interface{}) ([]byte, [
6469
return nil, nil, err
6570
}
6671

67-
req, err := createNewRequest(http.MethodPost, sumoURL.String(), bytes.NewBuffer(body), s.AccessID, s.AccessKey)
72+
req, err := createNewRequest(http.MethodPost, sumoURL.String(), bytes.NewBuffer(body), s.AccessID, s.AccessKey, s.AuthJwt)
6873
if err != nil {
6974
return nil, nil, err
7075
}
@@ -98,7 +103,7 @@ func (s *Client) GetWithCookies(urlPath string, cookies []*http.Cookie) ([]byte,
98103

99104
sumoURL := s.BaseURL.ResolveReference(relativeURL)
100105

101-
req, err := createNewRequest(http.MethodGet, sumoURL.String(), nil, s.AccessID, s.AccessKey)
106+
req, err := createNewRequest(http.MethodGet, sumoURL.String(), nil, s.AccessID, s.AccessKey, s.AuthJwt)
102107
if err != nil {
103108
return nil, "", err
104109
}
@@ -133,7 +138,7 @@ func (s *Client) Post(urlPath string, payload interface{}, isAdminMode bool) ([]
133138
sumoURL := s.BaseURL.ResolveReference(relativeURL)
134139

135140
body, _ := json.Marshal(payload)
136-
req, err := createNewRequest(http.MethodPost, sumoURL.String(), bytes.NewBuffer(body), s.AccessID, s.AccessKey)
141+
req, err := createNewRequest(http.MethodPost, sumoURL.String(), bytes.NewBuffer(body), s.AccessID, s.AccessKey, s.AuthJwt)
137142
if err != nil {
138143
return nil, err
139144
}
@@ -164,7 +169,7 @@ func (s *Client) Post(urlPath string, payload interface{}, isAdminMode bool) ([]
164169
func (s *Client) PostRawPayload(urlPath string, payload string) ([]byte, error) {
165170
relativeURL, _ := url.Parse(urlPath)
166171
sumoURL := s.BaseURL.ResolveReference(relativeURL)
167-
req, err := createNewRequest(http.MethodPost, sumoURL.String(), bytes.NewBuffer([]byte(payload)), s.AccessID, s.AccessKey)
172+
req, err := createNewRequest(http.MethodPost, sumoURL.String(), bytes.NewBuffer([]byte(payload)), s.AccessID, s.AccessKey, s.AuthJwt)
168173
if err != nil {
169174
return nil, err
170175
}
@@ -195,7 +200,7 @@ func (s *Client) Put(urlPath string, payload interface{}, isAdminMode bool) ([]b
195200
_, etag, _ := s.Get(sumoURL.String(), false)
196201

197202
body, _ := json.Marshal(payload)
198-
req, err := createNewRequest(http.MethodPut, sumoURL.String(), bytes.NewBuffer(body), s.AccessID, s.AccessKey)
203+
req, err := createNewRequest(http.MethodPut, sumoURL.String(), bytes.NewBuffer(body), s.AccessID, s.AccessKey, s.AuthJwt)
199204
if err != nil {
200205
return nil, err
201206
}
@@ -228,7 +233,7 @@ func (s *Client) Get(urlPath string, isAdminMode bool) ([]byte, string, error) {
228233
relativeURL, _ := url.Parse(urlPath)
229234
sumoURL := s.BaseURL.ResolveReference(relativeURL)
230235

231-
req, err := createNewRequest(http.MethodGet, sumoURL.String(), nil, s.AccessID, s.AccessKey)
236+
req, err := createNewRequest(http.MethodGet, sumoURL.String(), nil, s.AccessID, s.AccessKey, s.AuthJwt)
232237
if err != nil {
233238
return nil, "", err
234239
}
@@ -262,7 +267,7 @@ func (s *Client) Delete(urlPath string) ([]byte, error) {
262267
relativeURL, _ := url.Parse(urlPath)
263268
sumoURL := s.BaseURL.ResolveReference(relativeURL)
264269

265-
req, err := createNewRequest(http.MethodDelete, sumoURL.String(), nil, s.AccessID, s.AccessKey)
270+
req, err := createNewRequest(http.MethodDelete, sumoURL.String(), nil, s.AccessID, s.AccessKey, s.AuthJwt)
266271
if err != nil {
267272
return nil, err
268273
}
@@ -286,10 +291,11 @@ func (s *Client) Delete(urlPath string) ([]byte, error) {
286291
return d, nil
287292
}
288293

289-
func NewClient(accessID, accessKey, environment, base_url string) (*Client, error) {
294+
func NewClient(accessID, accessKey, authJwt, environment, base_url string) (*Client, error) {
290295
client := Client{
291296
AccessID: accessID,
292297
AccessKey: accessKey,
298+
AuthJwt: authJwt,
293299
httpClient: http.DefaultClient,
294300
Environment: environment,
295301
}

0 commit comments

Comments
 (0)