🎨 Improve kernel API /api/block/insertBlock argument checking https://github.com/siyuan-note/siyuan/issues/10144

This commit is contained in:
Daniel 2024-01-11 11:11:52 +08:00
parent 03f2f628f3
commit caf0717a73
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
4 changed files with 57 additions and 11 deletions

View file

@ -17,6 +17,7 @@
package api
import (
"errors"
"net/http"
"github.com/88250/gulu"
@ -221,7 +222,13 @@ func appendBlock(c *gin.Context) {
}
if "markdown" == dataType {
luteEngine := util.NewLute()
data = dataBlockDOM(data, luteEngine)
var err error
data, err = dataBlockDOM(data, luteEngine)
if nil != err {
ret.Code = -1
ret.Msg = "data block DOM failed: " + err.Error()
return
}
}
transactions := []*model.Transaction{
@ -260,7 +267,13 @@ func prependBlock(c *gin.Context) {
}
if "markdown" == dataType {
luteEngine := util.NewLute()
data = dataBlockDOM(data, luteEngine)
var err error
data, err = dataBlockDOM(data, luteEngine)
if nil != err {
ret.Code = -1
ret.Msg = "data block DOM failed: " + err.Error()
return
}
}
transactions := []*model.Transaction{
@ -315,7 +328,13 @@ func insertBlock(c *gin.Context) {
if "markdown" == dataType {
luteEngine := util.NewLute()
data = dataBlockDOM(data, luteEngine)
var err error
data, err = dataBlockDOM(data, luteEngine)
if nil != err {
ret.Code = -1
ret.Msg = "data block DOM failed: " + err.Error()
return
}
}
transactions := []*model.Transaction{
@ -357,7 +376,13 @@ func updateBlock(c *gin.Context) {
luteEngine := util.NewLute()
if "markdown" == dataType {
data = dataBlockDOM(data, luteEngine)
var err error
data, err = dataBlockDOM(data, luteEngine)
if nil != err {
ret.Code = -1
ret.Msg = "data block DOM failed: " + err.Error()
return
}
}
tree := luteEngine.BlockDOM2Tree(data)
if nil == tree || nil == tree.Root || nil == tree.Root.FirstChild {
@ -461,14 +486,35 @@ func broadcastTransactions(transactions []*model.Transaction) {
util.PushEvent(evt)
}
func dataBlockDOM(data string, luteEngine *lute.Lute) (ret string) {
func dataBlockDOM(data string, luteEngine *lute.Lute) (ret string, err error) {
luteEngine.SetHTMLTag2TextMark(true) // API `/api/block/**` 无法使用 `<u>foo</u>` 与 `<kbd>bar</kbd>` 插入/更新行内元素 https://github.com/siyuan-note/siyuan/issues/6039
ret = luteEngine.Md2BlockDOM(data, true)
ret, tree := luteEngine.Md2BlockDOM(data, true)
if "" == ret {
// 使用 API 插入空字符串出现错误 https://github.com/siyuan-note/siyuan/issues/3931
blankParagraph := treenode.NewParagraph()
ret = luteEngine.RenderNodeBlockDOM(blankParagraph)
}
invalidID := ""
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
if !entering {
return ast.WalkContinue
}
if "" != n.ID {
if !ast.IsNodeIDPattern(n.ID) {
invalidID = n.ID
return ast.WalkStop
}
}
return ast.WalkContinue
})
if "" != invalidID {
err = errors.New("found invalid ID [" + invalidID + "]")
ret = ""
return
}
return
}