mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-08-08 08:32:16 +01:00
48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
// Package http provides functions for detecting a request or a file content type.
|
|
package http
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
// ContentType is a string which represents a content type.
|
|
type ContentType string
|
|
|
|
// MultipartFormDataContentType represents... the multipart form data content type.
|
|
const MultipartFormDataContentType ContentType = "multipart/form-data"
|
|
|
|
type notAuthorizedContentTypeError struct{}
|
|
|
|
func (e *notAuthorizedContentTypeError) Error() string {
|
|
return fmt.Sprintf("Accepted value for 'Content-Type': %s", MultipartFormDataContentType)
|
|
}
|
|
|
|
// CheckAuthorizedContentType checks if the request header header has an authorized content type.
|
|
// If no authorized content type found, throws an error.
|
|
func CheckAuthorizedContentType(h http.Header) error {
|
|
ct := findContentType(h.Get("Content-Type"), MultipartFormDataContentType)
|
|
if ct == "" {
|
|
return ¬AuthorizedContentTypeError{}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// findContentType parses a string representing a content type and tries to find
|
|
// one of the given content types.
|
|
func findContentType(requestContentType string, contentTypes ...ContentType) ContentType {
|
|
for _, ct := range contentTypes {
|
|
if i := strings.IndexRune(requestContentType, ';'); i != -1 {
|
|
requestContentType = requestContentType[0:i]
|
|
}
|
|
|
|
if requestContentType == string(ct) {
|
|
return ct
|
|
}
|
|
}
|
|
|
|
return ""
|
|
}
|