From 2063203f23a9a1c3f9ae6a28c7e693fd53254d6e Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Wed, 26 Oct 2022 12:09:41 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=94=AF=E6=8C=81=E4=BC=BA=E6=9C=8D?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=89=87=E6=AE=B5=20`/snippets/`=20Fix=20htt?= =?UTF-8?q?ps://github.com/siyuan-note/siyuan/issues/6356?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/api/router.go | 1 + kernel/api/snippet.go | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/kernel/api/router.go b/kernel/api/router.go index 4b5ec5f65..6507ebd59 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -283,4 +283,5 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/notification/pushErrMsg", model.CheckAuth, pushErrMsg) ginServer.Handle("POST", "/api/snippet/getSnippet", model.CheckAuth, getSnippet) + ginServer.Handle("GET", "/snippets/*filepath", serveSnippets) } diff --git a/kernel/api/snippet.go b/kernel/api/snippet.go index 56dbc685d..1b4853944 100644 --- a/kernel/api/snippet.go +++ b/kernel/api/snippet.go @@ -17,15 +17,40 @@ package api import ( + "mime" "net/http" + "path/filepath" + "strings" "github.com/88250/gulu" "github.com/gin-gonic/gin" + "github.com/siyuan-note/logging" "github.com/siyuan-note/siyuan/kernel/conf" "github.com/siyuan-note/siyuan/kernel/model" "github.com/siyuan-note/siyuan/kernel/util" ) +func serveSnippets(c *gin.Context) { + name := strings.TrimPrefix(c.Request.URL.Path, "/snippets/") + ext := filepath.Ext(name) + name = strings.TrimSuffix(name, ext) + confSnippets, err := model.LoadSnippets() + if nil != err { + logging.LogErrorf("load snippets failed: %s", name, err) + c.Status(404) + return + } + + for _, s := range confSnippets { + if s.Name == name && ("" != ext && s.Type == ext[1:]) { + c.Header("Content-Type", mime.TypeByExtension(ext)) + c.String(http.StatusOK, s.Content) + return + } + } + c.Status(404) +} + func getSnippet(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret)