From 730a60de2859f2c73a0197c7b4751ac7597fd4a7 Mon Sep 17 00:00:00 2001 From: Anirudh Oppiliappan Date: Mon, 05 May 2025 18:25:09 +0000 Subject: [PATCH] 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. --- knotserver/routes.go | 7 ++++++- knotserver/git/git.go | 18 +++++++----------- 2 file(s) changed, 13 insertion(s)(+), 12 deletion(s)(-) diff --git a/knotserver/routes.go b/knotserver/routes.go --- a/knotserver/routes.go +++ b/knotserver/routes.go @@ -208,7 +208,7 @@ 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()) @@ -216,6 +216,11 @@ } 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) diff --git a/knotserver/git/git.go b/knotserver/git/git.go --- a/knotserver/git/git.go +++ b/knotserver/git/git.go @@ -194,7 +194,7 @@ } } -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) @@ -210,17 +210,13 @@ 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) { -- tangled.sh