mirror of
https://codeberg.org/git-pages/git-pages.git
synced 2026-05-14 11:11:35 +00:00
Fix several content type negotiation issues.
* No `Accept:` header should be the same as `Accept: */*`. * For unresolved reference error, `text/plain` should take priority.
This commit is contained in:
@@ -55,6 +55,9 @@ type HTTPContentTypes struct {
|
||||
}
|
||||
|
||||
func ParseAcceptHeader(headerValue string) (result HTTPContentTypes) {
|
||||
if headerValue == "" {
|
||||
headerValue = "*/*"
|
||||
}
|
||||
result = HTTPContentTypes{parseGenericAcceptHeader(headerValue)}
|
||||
return
|
||||
}
|
||||
@@ -65,7 +68,7 @@ func (e *HTTPContentTypes) Negotiate(offers ...string) string {
|
||||
prefs[code] = 0
|
||||
}
|
||||
for _, ctyp := range e.contentTypes {
|
||||
if ctyp.code == "*" || ctyp.code == "*/*" {
|
||||
if ctyp.code == "*/*" {
|
||||
for code := range prefs {
|
||||
prefs[code] = ctyp.qval
|
||||
}
|
||||
|
||||
@@ -575,7 +575,7 @@ func patchPage(w http.ResponseWriter, r *http.Request) error {
|
||||
func reportUpdateResult(w http.ResponseWriter, r *http.Request, result UpdateResult) error {
|
||||
var unresolvedRefErr UnresolvedRefError
|
||||
if result.outcome == UpdateError && errors.As(result.err, &unresolvedRefErr) {
|
||||
offeredContentTypes := []string{"application/vnd.git-pages.unresolved", "text/plain"}
|
||||
offeredContentTypes := []string{"text/plain", "application/vnd.git-pages.unresolved"}
|
||||
acceptedContentTypes := ParseAcceptHeader(r.Header.Get("Accept"))
|
||||
switch acceptedContentTypes.Negotiate(offeredContentTypes...) {
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user