diff --git a/web/public/middleware/mimeTypeCheck.go b/web/public/middleware/mimeTypeCheck.go new file mode 100644 index 0000000..80c0e40 --- /dev/null +++ b/web/public/middleware/mimeTypeCheck.go @@ -0,0 +1,36 @@ +package webmiddleware + +import ( + "net/http" + "strings" + + webutils "git.mstar.dev/mstar/goutils/http" + "git.mstar.dev/mstar/goutils/other" +) + +func BuildMimetypeCheck(acceptedMimetypes []string) webutils.HandlerBuilder { + return func(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + acceptHeader := r.Header.Get("Accept") + for _, couldBe := range acceptedMimetypes { + if strings.Contains(acceptHeader, couldBe) { + h.ServeHTTP(w, r) + return + } + } + // Requested mimtype not in list of accepted ones, failing request with note + webutils.ProblemDetails( + w, + http.StatusUnsupportedMediaType, + "/errors/bad-accept-mime-type", + "unsupported mime type", + other.IntoPointer( + "The requested mime type is not supported. Please check extras for a list of supported mime types", + ), + map[string]any{ + "supported-mime-types": acceptedMimetypes, + }, + ) + }) + } +}