Skip to content

Commit 4d87188

Browse files
authored
Use application/json as content type when returning credentials (#115)
1 parent 4ee3630 commit 4d87188

7 files changed

+23
-10
lines changed

.pre-commit-config.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
repos:
2-
- repo: git://github.com/dnephin/pre-commit-golang
2+
- repo: https://github.com/dnephin/pre-commit-golang
33
rev: master
44
hooks:
55
- id: go-fmt

pkg/server/baseHandler.go

+2
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ reservation-id
4747
security-groups
4848
services/`
4949

50+
w.Header().Set("Content-Type", "text/plain")
5051
fmt.Fprint(w, baseMetadata)
5152
}
5253

@@ -56,6 +57,7 @@ func BaseVersionHandler(w http.ResponseWriter, r *http.Request) {
5657
meta-data
5758
user-data`
5859

60+
w.Header().Set("Content-Type", "text/plain")
5961
fmt.Fprintln(w, baseVersionPath)
6062
}
6163

pkg/server/credentialsHandler.go

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ func RoleHandler(w http.ResponseWriter, r *http.Request) {
3333
util.WriteError(w, "error", 500)
3434
return
3535
}
36+
w.Header().Set("Content-Type", "text/plain")
3637
if _, err := w.Write([]byte(fmt.Sprintf("%s\n", defaultRole.RoleName))); err != nil {
3738
logging.Log.Errorf("failed to write response: %v", err)
3839
}

pkg/server/ecsCredentialsHandler.go

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ func getCredentialHandler(region string) func(http.ResponseWriter, *http.Request
9494
Token: fmt.Sprintf("%s", cachedCredentials.SessionToken),
9595
}
9696

97+
w.Header().Set("Content-Type", "application/json")
9798
err = json.NewEncoder(w).Encode(credentialResponse)
9899
if err != nil {
99100
logging.Log.Errorf("failed to write response: %v", err)

pkg/server/middleware.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import (
3535

3636
// InstanceMetadataMiddleware is a convenience wrapper that chains TokenMiddleware, BrowserFilterMiddleware, and AWSHeaderMiddleware
3737
func InstanceMetadataMiddleware(next http.HandlerFunc) http.HandlerFunc {
38-
return TokenMiddleware(TaskMetadataMiddleware(next))
38+
return BrowserFilterMiddleware(TokenMiddleware(AWSHeaderMiddleware(next)))
3939
}
4040

4141
// TaskMetadataMiddleware is a convenience wrapper that chains BrowserFilterMiddleware and AWSHeaderMiddleware
@@ -75,7 +75,6 @@ func AWSHeaderMiddleware(next http.HandlerFunc) http.HandlerFunc {
7575
w.Header().Set("ETag", strconv.FormatInt(rand.Int63n(10000000000), 10))
7676
w.Header().Set("Last-Modified", time.Now().UTC().Format("2006-01-02T15:04:05Z")) // TODO: set this to cred refresh time
7777
w.Header().Set("Server", "EC2ws")
78-
w.Header().Set("Content-Type", "text/plain")
7978

8079
ua := r.Header.Get("User-Agent")
8180
metadataVersion := 1

pkg/server/middleware_test.go

+16-7
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ func TestAWSHeaderMiddleware(t *testing.T) {
119119
w.WriteHeader(http.StatusOK)
120120
})
121121
t.Logf("test case: %s", description)
122-
bfmHandler := InstanceMetadataMiddleware(nextHandler)
122+
bfmHandler := AWSHeaderMiddleware(nextHandler)
123123
req := httptest.NewRequest("GET", "http://localhost", nil)
124124
rec := httptest.NewRecorder()
125125
bfmHandler.ServeHTTP(rec, req)
@@ -135,9 +135,6 @@ func TestAWSHeaderMiddleware(t *testing.T) {
135135
if server := rec.Header().Get("Server"); server != "EC2ws" {
136136
t.Errorf("%s failed: got Server header %s, expected %s", description, server, "EC2ws")
137137
}
138-
if contentType := rec.Header().Get("Content-Type"); contentType != "text/plain" {
139-
t.Errorf("%s failed: got Content-Type header %s, expected %s", description, contentType, "text/plain")
140-
}
141138
}
142139

143140
// TestCredentialServiceMiddleware is a superset of TestBrowserFilterMiddleware and TestAWSHeaderMiddleware
@@ -167,9 +164,21 @@ func TestCredentialServiceMiddleware(t *testing.T) {
167164
if server := rec.Header().Get("Server"); server != "EC2ws" {
168165
t.Errorf("%s failed: got Server header %s, expected %s", tc.Description, server, "EC2ws")
169166
}
170-
if contentType := rec.Header().Get("Content-Type"); contentType != "text/plain" {
171-
t.Errorf("%s failed: got Content-Type header %s, expected %s", tc.Description, contentType, "text/plain")
172-
}
173167
}
174168
}
175169
}
170+
171+
func TestTokenMiddleware(t *testing.T) {
172+
description := "aws token middleware"
173+
nextHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
174+
w.WriteHeader(http.StatusOK)
175+
})
176+
t.Logf("test case: %s", description)
177+
bfmHandler := TokenMiddleware(nextHandler)
178+
req := httptest.NewRequest("GET", "http://localhost", nil)
179+
rec := httptest.NewRecorder()
180+
bfmHandler.ServeHTTP(rec, req)
181+
if rec.Code != http.StatusOK {
182+
t.Errorf("%s failed: got status %d, expected %d", description, rec.Code, http.StatusOK)
183+
}
184+
}

pkg/util/util.go

+1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ func CreateFile(filename string, directoryPerm, filePerm fs.FileMode) error {
125125
// The error is written as plaintext so AWS SDKs will display it inline with an error message.
126126
func WriteError(w http.ResponseWriter, message string, status int) {
127127
logging.Log.Debugf("writing HTTP error response: %s", message)
128+
w.Header().Set("Content-Type", "text/plain")
128129
w.WriteHeader(status)
129130
_, err := w.Write([]byte(message))
130131
if err != nil {

0 commit comments

Comments
 (0)