Adding upstream version 2.52.6.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
a960158181
commit
6d002e9543
441 changed files with 95392 additions and 0 deletions
267
utils/http.go
Normal file
267
utils/http.go
Normal file
|
@ -0,0 +1,267 @@
|
|||
// ⚡️ Fiber is an Express inspired web framework written in Go with ☕️
|
||||
// 🤖 Github Repository: https://github.com/gofiber/fiber
|
||||
// 📌 API Documentation: https://docs.gofiber.io
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"mime"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const MIMEOctetStream = "application/octet-stream"
|
||||
|
||||
// GetMIME returns the content-type of a file extension
|
||||
func GetMIME(extension string) string {
|
||||
if len(extension) == 0 {
|
||||
return ""
|
||||
}
|
||||
var foundMime string
|
||||
if extension[0] == '.' {
|
||||
foundMime = mimeExtensions[extension[1:]]
|
||||
} else {
|
||||
foundMime = mimeExtensions[extension]
|
||||
}
|
||||
|
||||
if len(foundMime) == 0 {
|
||||
if extension[0] != '.' {
|
||||
foundMime = mime.TypeByExtension("." + extension)
|
||||
} else {
|
||||
foundMime = mime.TypeByExtension(extension)
|
||||
}
|
||||
|
||||
if foundMime == "" {
|
||||
return MIMEOctetStream
|
||||
}
|
||||
}
|
||||
return foundMime
|
||||
}
|
||||
|
||||
// ParseVendorSpecificContentType check if content type is vendor specific and
|
||||
// if it is parsable to any known types. If its not vendor specific then returns
|
||||
// the original content type.
|
||||
func ParseVendorSpecificContentType(cType string) string {
|
||||
plusIndex := strings.Index(cType, "+")
|
||||
|
||||
if plusIndex == -1 {
|
||||
return cType
|
||||
}
|
||||
|
||||
var parsableType string
|
||||
if semiColonIndex := strings.Index(cType, ";"); semiColonIndex == -1 {
|
||||
parsableType = cType[plusIndex+1:]
|
||||
} else if plusIndex < semiColonIndex {
|
||||
parsableType = cType[plusIndex+1 : semiColonIndex]
|
||||
} else {
|
||||
return cType[:semiColonIndex]
|
||||
}
|
||||
|
||||
slashIndex := strings.Index(cType, "/")
|
||||
|
||||
if slashIndex == -1 {
|
||||
return cType
|
||||
}
|
||||
|
||||
return cType[0:slashIndex+1] + parsableType
|
||||
}
|
||||
|
||||
// limits for HTTP statuscodes
|
||||
const (
|
||||
statusMessageMin = 100
|
||||
statusMessageMax = 511
|
||||
)
|
||||
|
||||
// StatusMessage returns the correct message for the provided HTTP statuscode
|
||||
func StatusMessage(status int) string {
|
||||
if status < statusMessageMin || status > statusMessageMax {
|
||||
return ""
|
||||
}
|
||||
return statusMessage[status]
|
||||
}
|
||||
|
||||
// NOTE: Keep this in sync with the status code list
|
||||
var statusMessage = []string{
|
||||
100: "Continue", // StatusContinue
|
||||
101: "Switching Protocols", // StatusSwitchingProtocols
|
||||
102: "Processing", // StatusProcessing
|
||||
103: "Early Hints", // StatusEarlyHints
|
||||
|
||||
200: "OK", // StatusOK
|
||||
201: "Created", // StatusCreated
|
||||
202: "Accepted", // StatusAccepted
|
||||
203: "Non-Authoritative Information", // StatusNonAuthoritativeInformation
|
||||
204: "No Content", // StatusNoContent
|
||||
205: "Reset Content", // StatusResetContent
|
||||
206: "Partial Content", // StatusPartialContent
|
||||
207: "Multi-Status", // StatusMultiStatus
|
||||
208: "Already Reported", // StatusAlreadyReported
|
||||
226: "IM Used", // StatusIMUsed
|
||||
|
||||
300: "Multiple Choices", // StatusMultipleChoices
|
||||
301: "Moved Permanently", // StatusMovedPermanently
|
||||
302: "Found", // StatusFound
|
||||
303: "See Other", // StatusSeeOther
|
||||
304: "Not Modified", // StatusNotModified
|
||||
305: "Use Proxy", // StatusUseProxy
|
||||
306: "Switch Proxy", // StatusSwitchProxy
|
||||
307: "Temporary Redirect", // StatusTemporaryRedirect
|
||||
308: "Permanent Redirect", // StatusPermanentRedirect
|
||||
|
||||
400: "Bad Request", // StatusBadRequest
|
||||
401: "Unauthorized", // StatusUnauthorized
|
||||
402: "Payment Required", // StatusPaymentRequired
|
||||
403: "Forbidden", // StatusForbidden
|
||||
404: "Not Found", // StatusNotFound
|
||||
405: "Method Not Allowed", // StatusMethodNotAllowed
|
||||
406: "Not Acceptable", // StatusNotAcceptable
|
||||
407: "Proxy Authentication Required", // StatusProxyAuthRequired
|
||||
408: "Request Timeout", // StatusRequestTimeout
|
||||
409: "Conflict", // StatusConflict
|
||||
410: "Gone", // StatusGone
|
||||
411: "Length Required", // StatusLengthRequired
|
||||
412: "Precondition Failed", // StatusPreconditionFailed
|
||||
413: "Request Entity Too Large", // StatusRequestEntityTooLarge
|
||||
414: "Request URI Too Long", // StatusRequestURITooLong
|
||||
415: "Unsupported Media Type", // StatusUnsupportedMediaType
|
||||
416: "Requested Range Not Satisfiable", // StatusRequestedRangeNotSatisfiable
|
||||
417: "Expectation Failed", // StatusExpectationFailed
|
||||
418: "I'm a teapot", // StatusTeapot
|
||||
421: "Misdirected Request", // StatusMisdirectedRequest
|
||||
422: "Unprocessable Entity", // StatusUnprocessableEntity
|
||||
423: "Locked", // StatusLocked
|
||||
424: "Failed Dependency", // StatusFailedDependency
|
||||
425: "Too Early", // StatusTooEarly
|
||||
426: "Upgrade Required", // StatusUpgradeRequired
|
||||
428: "Precondition Required", // StatusPreconditionRequired
|
||||
429: "Too Many Requests", // StatusTooManyRequests
|
||||
431: "Request Header Fields Too Large", // StatusRequestHeaderFieldsTooLarge
|
||||
451: "Unavailable For Legal Reasons", // StatusUnavailableForLegalReasons
|
||||
|
||||
500: "Internal Server Error", // StatusInternalServerError
|
||||
501: "Not Implemented", // StatusNotImplemented
|
||||
502: "Bad Gateway", // StatusBadGateway
|
||||
503: "Service Unavailable", // StatusServiceUnavailable
|
||||
504: "Gateway Timeout", // StatusGatewayTimeout
|
||||
505: "HTTP Version Not Supported", // StatusHTTPVersionNotSupported
|
||||
506: "Variant Also Negotiates", // StatusVariantAlsoNegotiates
|
||||
507: "Insufficient Storage", // StatusInsufficientStorage
|
||||
508: "Loop Detected", // StatusLoopDetected
|
||||
510: "Not Extended", // StatusNotExtended
|
||||
511: "Network Authentication Required", // StatusNetworkAuthenticationRequired
|
||||
}
|
||||
|
||||
// MIME types were copied from https://github.com/nginx/nginx/blob/67d2a9541826ecd5db97d604f23460210fd3e517/conf/mime.types with the following updates:
|
||||
// - Use "application/xml" instead of "text/xml" as recommended per https://datatracker.ietf.org/doc/html/rfc7303#section-4.1
|
||||
// - Use "text/javascript" instead of "application/javascript" as recommended per https://www.rfc-editor.org/rfc/rfc9239#name-text-javascript
|
||||
var mimeExtensions = map[string]string{
|
||||
"html": "text/html",
|
||||
"htm": "text/html",
|
||||
"shtml": "text/html",
|
||||
"css": "text/css",
|
||||
"xml": "application/xml",
|
||||
"gif": "image/gif",
|
||||
"jpeg": "image/jpeg",
|
||||
"jpg": "image/jpeg",
|
||||
"js": "text/javascript",
|
||||
"atom": "application/atom+xml",
|
||||
"rss": "application/rss+xml",
|
||||
"mml": "text/mathml",
|
||||
"txt": "text/plain",
|
||||
"jad": "text/vnd.sun.j2me.app-descriptor",
|
||||
"wml": "text/vnd.wap.wml",
|
||||
"htc": "text/x-component",
|
||||
"avif": "image/avif",
|
||||
"png": "image/png",
|
||||
"svg": "image/svg+xml",
|
||||
"svgz": "image/svg+xml",
|
||||
"tif": "image/tiff",
|
||||
"tiff": "image/tiff",
|
||||
"wbmp": "image/vnd.wap.wbmp",
|
||||
"webp": "image/webp",
|
||||
"ico": "image/x-icon",
|
||||
"jng": "image/x-jng",
|
||||
"bmp": "image/x-ms-bmp",
|
||||
"woff": "font/woff",
|
||||
"woff2": "font/woff2",
|
||||
"jar": "application/java-archive",
|
||||
"war": "application/java-archive",
|
||||
"ear": "application/java-archive",
|
||||
"json": "application/json",
|
||||
"hqx": "application/mac-binhex40",
|
||||
"doc": "application/msword",
|
||||
"pdf": "application/pdf",
|
||||
"ps": "application/postscript",
|
||||
"eps": "application/postscript",
|
||||
"ai": "application/postscript",
|
||||
"rtf": "application/rtf",
|
||||
"m3u8": "application/vnd.apple.mpegurl",
|
||||
"kml": "application/vnd.google-earth.kml+xml",
|
||||
"kmz": "application/vnd.google-earth.kmz",
|
||||
"xls": "application/vnd.ms-excel",
|
||||
"eot": "application/vnd.ms-fontobject",
|
||||
"ppt": "application/vnd.ms-powerpoint",
|
||||
"odg": "application/vnd.oasis.opendocument.graphics",
|
||||
"odp": "application/vnd.oasis.opendocument.presentation",
|
||||
"ods": "application/vnd.oasis.opendocument.spreadsheet",
|
||||
"odt": "application/vnd.oasis.opendocument.text",
|
||||
"pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
||||
"xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
"docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
||||
"wmlc": "application/vnd.wap.wmlc",
|
||||
"wasm": "application/wasm",
|
||||
"7z": "application/x-7z-compressed",
|
||||
"cco": "application/x-cocoa",
|
||||
"jardiff": "application/x-java-archive-diff",
|
||||
"jnlp": "application/x-java-jnlp-file",
|
||||
"run": "application/x-makeself",
|
||||
"pl": "application/x-perl",
|
||||
"pm": "application/x-perl",
|
||||
"prc": "application/x-pilot",
|
||||
"pdb": "application/x-pilot",
|
||||
"rar": "application/x-rar-compressed",
|
||||
"rpm": "application/x-redhat-package-manager",
|
||||
"sea": "application/x-sea",
|
||||
"swf": "application/x-shockwave-flash",
|
||||
"sit": "application/x-stuffit",
|
||||
"tcl": "application/x-tcl",
|
||||
"tk": "application/x-tcl",
|
||||
"der": "application/x-x509-ca-cert",
|
||||
"pem": "application/x-x509-ca-cert",
|
||||
"crt": "application/x-x509-ca-cert",
|
||||
"xpi": "application/x-xpinstall",
|
||||
"xhtml": "application/xhtml+xml",
|
||||
"xspf": "application/xspf+xml",
|
||||
"zip": "application/zip",
|
||||
"bin": "application/octet-stream",
|
||||
"exe": "application/octet-stream",
|
||||
"dll": "application/octet-stream",
|
||||
"deb": "application/octet-stream",
|
||||
"dmg": "application/octet-stream",
|
||||
"iso": "application/octet-stream",
|
||||
"img": "application/octet-stream",
|
||||
"msi": "application/octet-stream",
|
||||
"msp": "application/octet-stream",
|
||||
"msm": "application/octet-stream",
|
||||
"mid": "audio/midi",
|
||||
"midi": "audio/midi",
|
||||
"kar": "audio/midi",
|
||||
"mp3": "audio/mpeg",
|
||||
"ogg": "audio/ogg",
|
||||
"m4a": "audio/x-m4a",
|
||||
"ra": "audio/x-realaudio",
|
||||
"3gpp": "video/3gpp",
|
||||
"3gp": "video/3gpp",
|
||||
"ts": "video/mp2t",
|
||||
"mp4": "video/mp4",
|
||||
"mpeg": "video/mpeg",
|
||||
"mpg": "video/mpeg",
|
||||
"mov": "video/quicktime",
|
||||
"webm": "video/webm",
|
||||
"flv": "video/x-flv",
|
||||
"m4v": "video/x-m4v",
|
||||
"mng": "video/x-mng",
|
||||
"asx": "video/x-ms-asf",
|
||||
"asf": "video/x-ms-asf",
|
||||
"wmv": "video/x-ms-wmv",
|
||||
"avi": "video/x-msvideo",
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue