mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-21 10:27:46 +08:00
* feat: serveRawBlock implements ?format=block * feat: serveCar implements ?format=car * feat(gw): ?format= or Accept HTTP header - extracted file-like content type responses to separate .go files - Accept HTTP header with support for application/vnd.ipld.* types * fix: use .bin for raw block content-disposition .raw may be handled by something, depending on OS, and .bin seems to be universally "binary file" across all systems: https://en.wikipedia.org/wiki/List_of_filename_extensions_(A%E2%80%93E) * refactor: gateway_handler_unixfs.go - Moved UnixFS response handling to gateway_handler_unixfs*.go files. - Removed support for X-Ipfs-Gateway-Prefix (Closes #7702) * refactor: prefix cleanup and readable paths - removed dead code after X-Ipfs-Gateway-Prefix is gone (https://github.com/ipfs/go-ipfs/issues/7702) - escaped special characters in content paths returned with http.Error making them both safer and easier to reason about (e.g. when invisible whitespace Unicode is used)
38 lines
1012 B
Go
38 lines
1012 B
Go
package corehttp
|
|
|
|
import (
|
|
"fmt"
|
|
"html"
|
|
"net/http"
|
|
|
|
files "github.com/ipfs/go-ipfs-files"
|
|
ipath "github.com/ipfs/interface-go-ipfs-core/path"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func (i *gatewayHandler) serveUnixFs(w http.ResponseWriter, r *http.Request, resolvedPath ipath.Resolved, contentPath ipath.Path, logger *zap.SugaredLogger) {
|
|
// Handling UnixFS
|
|
dr, err := i.api.Unixfs().Get(r.Context(), resolvedPath)
|
|
if err != nil {
|
|
webError(w, "ipfs cat "+html.EscapeString(contentPath.String()), err, http.StatusNotFound)
|
|
return
|
|
}
|
|
defer dr.Close()
|
|
|
|
// Handling Unixfs file
|
|
if f, ok := dr.(files.File); ok {
|
|
logger.Debugw("serving unixfs file", "path", contentPath)
|
|
i.serveFile(w, r, contentPath, resolvedPath.Cid(), f)
|
|
return
|
|
}
|
|
|
|
// Handling Unixfs directory
|
|
dir, ok := dr.(files.Directory)
|
|
if !ok {
|
|
internalWebError(w, fmt.Errorf("unsupported UnixFs type"))
|
|
return
|
|
}
|
|
logger.Debugw("serving unixfs directory", "path", contentPath)
|
|
i.serveDirectory(w, r, resolvedPath, contentPath, dir, logger)
|
|
}
|