|
|
|
@ -11,6 +11,7 @@ import (
|
|
|
|
|
|
|
|
|
|
"code.gitea.io/gitea/modules/charset"
|
|
|
|
|
"code.gitea.io/gitea/modules/git"
|
|
|
|
|
"code.gitea.io/gitea/modules/log"
|
|
|
|
|
"code.gitea.io/gitea/modules/markup"
|
|
|
|
|
"code.gitea.io/gitea/modules/typesniffer"
|
|
|
|
|
"code.gitea.io/gitea/modules/util"
|
|
|
|
@ -44,20 +45,17 @@ func RenderFile(ctx *context.Context) {
|
|
|
|
|
isTextFile := st.IsText()
|
|
|
|
|
|
|
|
|
|
rd := charset.ToUTF8WithFallbackReader(io.MultiReader(bytes.NewReader(buf), dataRc), charset.ConvertOpts{})
|
|
|
|
|
ctx.Resp.Header().Add("Content-Security-Policy", "frame-src 'self'; sandbox allow-scripts")
|
|
|
|
|
|
|
|
|
|
if markupType := markup.Type(blob.Name()); markupType == "" {
|
|
|
|
|
if isTextFile {
|
|
|
|
|
_, err = io.Copy(ctx.Resp, rd)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.ServerError("Copy", err)
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
_, _ = io.Copy(ctx.Resp, rd)
|
|
|
|
|
} else {
|
|
|
|
|
http.Error(ctx.Resp, "Unsupported file type render", http.StatusInternalServerError)
|
|
|
|
|
}
|
|
|
|
|
ctx.Error(http.StatusInternalServerError, "Unsupported file type render")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ctx.Resp.Header().Add("Content-Security-Policy", "frame-src 'self'; sandbox allow-scripts")
|
|
|
|
|
err = markup.Render(&markup.RenderContext{
|
|
|
|
|
Ctx: ctx,
|
|
|
|
|
RelativePath: ctx.Repo.TreePath,
|
|
|
|
@ -71,7 +69,8 @@ func RenderFile(ctx *context.Context) {
|
|
|
|
|
InStandalonePage: true,
|
|
|
|
|
}, rd, ctx.Resp)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.ServerError("Render", err)
|
|
|
|
|
log.Error("Failed to render file %q: %v", ctx.Repo.TreePath, err)
|
|
|
|
|
http.Error(ctx.Resp, "Failed to render file", http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|