forked from tangled.org/core
this repo has no description

knotserver: git: serve all raw content

It's the clients problem now. Also add a tiny exception for svgs since
those get picked up as text/xml otherwise.

anirudh.fi 730a60de 6fb7d3c8

verified
Changed files
+13 -12
knotserver
+7 -11
knotserver/git/git.go
···
}
}
-
func (g *GitRepo) BinContent(path string) ([]byte, error) {
+
func (g *GitRepo) RawContent(path string) ([]byte, error) {
c, err := g.r.CommitObject(g.h)
if err != nil {
return nil, fmt.Errorf("commit object: %w", err)
···
return nil, err
}
-
isbin, _ := file.IsBinary()
-
if isbin {
-
reader, err := file.Reader()
-
if err != nil {
-
return nil, fmt.Errorf("opening file reader: %w", err)
-
}
-
defer reader.Close()
-
-
return io.ReadAll(reader)
+
reader, err := file.Reader()
+
if err != nil {
+
return nil, fmt.Errorf("opening file reader: %w", err)
}
-
return nil, ErrNotBinaryFile
+
defer reader.Close()
+
+
return io.ReadAll(reader)
}
func (g *GitRepo) Tags() ([]*TagReference, error) {
+6 -1
knotserver/routes.go
···
return
}
-
contents, err := gr.BinContent(treePath)
+
contents, err := gr.RawContent(treePath)
if err != nil {
writeError(w, err.Error(), http.StatusBadRequest)
l.Error("file content", "error", err.Error())
···
}
mimeType := http.DetectContentType(contents)
+
+
// exception for svg
+
if strings.HasPrefix(mimeType, "text/xml") && filepath.Ext(treePath) == ".svg" {
+
mimeType = "image/svg+xml"
+
}
if !strings.HasPrefix(mimeType, "image/") && !strings.HasPrefix(mimeType, "video/") {
l.Error("attempted to serve non-image/video file", "mimetype", mimeType)