-
Notifications
You must be signed in to change notification settings - Fork 101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Robust Header Check #13
Changes from 4 commits
844754d
2ee8446
8a5d177
7c7f7b3
52eae4e
6531cce
a58e813
9e23b94
677e3d3
b18aaba
3169c9a
e9f06a3
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,16 +5,21 @@ import ( | |
"fmt" | ||
"io/ioutil" | ||
"net/http" | ||
"regexp" | ||
"sync" | ||
"time" | ||
) | ||
|
||
const ( | ||
// acceptHeader is the GitHub Integrations Preview Accept header. | ||
acceptHeader = "application/vnd.github.machine-man-preview+json" | ||
apiBaseURL = "https://api.github.com" | ||
acceptHeader = "application/vnd.github.machine-man-preview+json" | ||
defaultMediaType = "application/octet-stream" | ||
apiBaseURL = "https://api.github.com" | ||
) | ||
|
||
//Used to detect if a single asset request is being made. https://developer.github.com/v3/repos/releases/#get-a-single-release-asset | ||
var assetPathRegex = regexp.MustCompile("/repos/.+/.+/releases/assets/\\d+") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. gosimple: should use raw string ( |
||
|
||
// Transport provides a http.RoundTripper by wrapping an existing | ||
// http.RoundTripper and provides GitHub Apps authentication as an | ||
// installation. | ||
|
@@ -90,7 +95,7 @@ func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { | |
} | ||
|
||
req.Header.Set("Authorization", "token "+token) | ||
req.Header.Add("Accept", acceptHeader) // We add to "Accept" header to avoid overwriting existing req headers. | ||
addAcceptHeader(req) | ||
resp, err := t.tr.RoundTrip(req) | ||
return resp, err | ||
} | ||
|
@@ -134,3 +139,15 @@ func (t *Transport) refreshToken() error { | |
|
||
return nil | ||
} | ||
|
||
func addAcceptHeader(req *http.Request) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could this be slightly rewritten to return early when possible, what's your thoughts on this? I haven't tested it at all. // addAcceptIfJSON adds the preview accept headers if the request does not already specify an
// accept header, or if it's already specifying acceptance of json type as defined by
// https://developer.github.com/v3/media/.
func addAcceptIfJSON(headers http.Header) {
if headers.Get("Accept") == "" {
headers.Set("Accept", acceptHeader)
return
}
for _, header := range headers["Accept"] {
if strings.HasSuffix(header, "json") {
headers.Add("Accept", acceptHeader)
return
}
}
} Just accepting a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @bradleyfalzon Made the changes |
||
//Check to see if we're making a single asset GET request | ||
fmt.Println(req.URL.Path) | ||
if req.Method == http.MethodGet && assetPathRegex.MatchString(req.URL.Path) { | ||
if req.Header.Get("Accept") != defaultMediaType { | ||
req.Header.Add("Accept", acceptHeader) // We add to "Accept" header to avoid overwriting existing req headers. | ||
} | ||
} else { | ||
req.Header.Add("Accept", acceptHeader) // We add to "Accept" header to avoid overwriting existing req headers. | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: can you remove this extra newline?