mirror of
https://github.com/jech/galene.git
synced 2024-11-22 08:35:57 +01:00
Use mime.ParseMediaType instead of our version.
This commit is contained in:
parent
1bb7172515
commit
cb7a087ea2
3 changed files with 15 additions and 33 deletions
|
@ -8,6 +8,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
|
"mime"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -19,10 +20,6 @@ import (
|
||||||
"github.com/jech/galene/token"
|
"github.com/jech/galene/token"
|
||||||
)
|
)
|
||||||
|
|
||||||
func parseContentType(ctype string) string {
|
|
||||||
return strings.Trim(strings.Split(ctype, ";")[0], " ")
|
|
||||||
}
|
|
||||||
|
|
||||||
// checkAdmin checks whether the client authentifies as an administrator
|
// checkAdmin checks whether the client authentifies as an administrator
|
||||||
func checkAdmin(w http.ResponseWriter, r *http.Request) bool {
|
func checkAdmin(w http.ResponseWriter, r *http.Request) bool {
|
||||||
username, password, ok := r.BasicAuth()
|
username, password, ok := r.BasicAuth()
|
||||||
|
@ -73,8 +70,8 @@ func sendJSON(w http.ResponseWriter, r *http.Request, v any) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func getText(w http.ResponseWriter, r *http.Request) ([]byte, bool) {
|
func getText(w http.ResponseWriter, r *http.Request) ([]byte, bool) {
|
||||||
ctype := parseContentType(r.Header.Get("Content-Type"))
|
ctype, _, err := mime.ParseMediaType(r.Header.Get("Content-Type"))
|
||||||
if !strings.EqualFold(ctype, "text/plain") {
|
if err != nil || !strings.EqualFold(ctype, "text/plain") {
|
||||||
w.Header().Set("Accept", "text/plain")
|
w.Header().Set("Accept", "text/plain")
|
||||||
http.Error(w, "unsupported content type",
|
http.Error(w, "unsupported content type",
|
||||||
http.StatusUnsupportedMediaType)
|
http.StatusUnsupportedMediaType)
|
||||||
|
@ -91,8 +88,8 @@ func getText(w http.ResponseWriter, r *http.Request) ([]byte, bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func getJSON(w http.ResponseWriter, r *http.Request, v any) bool {
|
func getJSON(w http.ResponseWriter, r *http.Request, v any) bool {
|
||||||
ctype := parseContentType(r.Header.Get("Content-Type"))
|
ctype, _, err := mime.ParseMediaType(r.Header.Get("Content-Type"))
|
||||||
if !strings.EqualFold(ctype, "application/json") {
|
if err != nil || !strings.EqualFold(ctype, "application/json") {
|
||||||
w.Header().Set("Accept", "application/json")
|
w.Header().Set("Accept", "application/json")
|
||||||
http.Error(w, "unsupported content type",
|
http.Error(w, "unsupported content type",
|
||||||
http.StatusUnsupportedMediaType)
|
http.StatusUnsupportedMediaType)
|
||||||
|
@ -100,7 +97,7 @@ func getJSON(w http.ResponseWriter, r *http.Request, v any) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
err := d.Decode(v)
|
err = d.Decode(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
httpError(w, err)
|
httpError(w, err)
|
||||||
return true
|
return true
|
||||||
|
@ -458,8 +455,10 @@ func keysHandler(w http.ResponseWriter, r *http.Request, g string) {
|
||||||
|
|
||||||
if r.Method == "PUT" {
|
if r.Method == "PUT" {
|
||||||
// cannot use getJSON due to the weird content-type
|
// cannot use getJSON due to the weird content-type
|
||||||
ctype := parseContentType(r.Header.Get("Content-Type"))
|
ctype, _, err :=
|
||||||
if !strings.EqualFold(ctype, "application/jwk-set+json") {
|
mime.ParseMediaType(r.Header.Get("Content-Type"))
|
||||||
|
if err != nil ||
|
||||||
|
!strings.EqualFold(ctype, "application/jwk-set+json") {
|
||||||
w.Header().Set("Accept", "application/jwk-set+json")
|
w.Header().Set("Accept", "application/jwk-set+json")
|
||||||
http.Error(w, "unsupported content type",
|
http.Error(w, "unsupported content type",
|
||||||
http.StatusUnsupportedMediaType)
|
http.StatusUnsupportedMediaType)
|
||||||
|
@ -467,7 +466,7 @@ func keysHandler(w http.ResponseWriter, r *http.Request, g string) {
|
||||||
}
|
}
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
var keys jwkset
|
var keys jwkset
|
||||||
err := d.Decode(&keys)
|
err = d.Decode(&keys)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
httpError(w, err)
|
httpError(w, err)
|
||||||
return
|
return
|
||||||
|
|
|
@ -3,6 +3,7 @@ package webserver
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"mime"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -104,8 +105,9 @@ func TestApi(t *testing.T) {
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return fmt.Errorf("Status is %v", resp.StatusCode)
|
return fmt.Errorf("Status is %v", resp.StatusCode)
|
||||||
}
|
}
|
||||||
ctype := parseContentType(resp.Header.Get("Content-Type"))
|
ctype, _, err :=
|
||||||
if !strings.EqualFold(ctype, "application/json") {
|
mime.ParseMediaType(resp.Header.Get("Content-Type"))
|
||||||
|
if err != nil || !strings.EqualFold(ctype, "application/json") {
|
||||||
return errors.New("Unexpected content-type")
|
return errors.New("Unexpected content-type")
|
||||||
}
|
}
|
||||||
d := json.NewDecoder(resp.Body)
|
d := json.NewDecoder(resp.Body)
|
||||||
|
|
|
@ -124,25 +124,6 @@ func TestParseSplit(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestParseContentType(t *testing.T) {
|
|
||||||
a := []struct{ a, b string }{
|
|
||||||
{"", ""},
|
|
||||||
{"text/plain", "text/plain"},
|
|
||||||
{"text/plain;charset=utf-8", "text/plain"},
|
|
||||||
{"text/plain; charset=utf-8", "text/plain"},
|
|
||||||
{"text/plain ; charset=utf-8", "text/plain"},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, ab := range a {
|
|
||||||
b := parseContentType(ab.a)
|
|
||||||
if b != ab.b {
|
|
||||||
t.Errorf("Content type %v, got %v, expected %v",
|
|
||||||
ab.a, b, ab.b,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestParseBearerToken(t *testing.T) {
|
func TestParseBearerToken(t *testing.T) {
|
||||||
a := []struct{ a, b string }{
|
a := []struct{ a, b string }{
|
||||||
{"", ""},
|
{"", ""},
|
||||||
|
|
Loading…
Reference in a new issue