forked from tangled.org/core
Monorepo for Tangled — https://tangled.org

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
··· 194 } 195 } 196 197 - func (g *GitRepo) BinContent(path string) ([]byte, error) { 198 c, err := g.r.CommitObject(g.h) 199 if err != nil { 200 return nil, fmt.Errorf("commit object: %w", err) ··· 210 return nil, err 211 } 212 213 - isbin, _ := file.IsBinary() 214 - if isbin { 215 - reader, err := file.Reader() 216 - if err != nil { 217 - return nil, fmt.Errorf("opening file reader: %w", err) 218 - } 219 - defer reader.Close() 220 - 221 - return io.ReadAll(reader) 222 } 223 - return nil, ErrNotBinaryFile 224 } 225 226 func (g *GitRepo) Tags() ([]*TagReference, error) {
··· 194 } 195 } 196 197 + func (g *GitRepo) RawContent(path string) ([]byte, error) { 198 c, err := g.r.CommitObject(g.h) 199 if err != nil { 200 return nil, fmt.Errorf("commit object: %w", err) ··· 210 return nil, err 211 } 212 213 + reader, err := file.Reader() 214 + if err != nil { 215 + return nil, fmt.Errorf("opening file reader: %w", err) 216 } 217 + defer reader.Close() 218 + 219 + return io.ReadAll(reader) 220 } 221 222 func (g *GitRepo) Tags() ([]*TagReference, error) {
+6 -1
knotserver/routes.go
··· 208 return 209 } 210 211 - contents, err := gr.BinContent(treePath) 212 if err != nil { 213 writeError(w, err.Error(), http.StatusBadRequest) 214 l.Error("file content", "error", err.Error()) ··· 216 } 217 218 mimeType := http.DetectContentType(contents) 219 220 if !strings.HasPrefix(mimeType, "image/") && !strings.HasPrefix(mimeType, "video/") { 221 l.Error("attempted to serve non-image/video file", "mimetype", mimeType)
··· 208 return 209 } 210 211 + contents, err := gr.RawContent(treePath) 212 if err != nil { 213 writeError(w, err.Error(), http.StatusBadRequest) 214 l.Error("file content", "error", err.Error()) ··· 216 } 217 218 mimeType := http.DetectContentType(contents) 219 + 220 + // exception for svg 221 + if strings.HasPrefix(mimeType, "text/xml") && filepath.Ext(treePath) == ".svg" { 222 + mimeType = "image/svg+xml" 223 + } 224 225 if !strings.HasPrefix(mimeType, "image/") && !strings.HasPrefix(mimeType, "video/") { 226 l.Error("attempted to serve non-image/video file", "mimetype", mimeType)