♻️ Improve validation of some JSON parameters (#17412)

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters

* 🎨 Improve validation of some JSON parameters
This commit is contained in:
Jeffrey Chen 2026-04-05 17:03:13 +08:00 committed by GitHub
parent bb9cb86bd7
commit 698ee3d357
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
37 changed files with 249 additions and 264 deletions

View file

@ -708,7 +708,6 @@ type="checkbox">
fetchPost("/api/petal/setPetalEnabled", {
packageName: dataObj.name,
enabled: true,
frontend: getFrontend(),
app: Constants.SIYUAN_APPID,
}, (response) => {
loadPlugin(app, response.data);
@ -724,7 +723,7 @@ type="checkbox">
break;
} else if (type === "install-all") {
confirmDialog("⬆️ " + window.siyuan.languages.updateAll, window.siyuan.languages.confirmUpdateAll, () => {
fetchPost("/api/bazaar/batchUpdatePackage", {frontend: getFrontend()});
fetchPost("/api/bazaar/batchUpdatePackage");
});
event.preventDefault();
event.stopPropagation();
@ -875,7 +874,6 @@ type="checkbox">
fetchPost("/api/petal/setPetalEnabled", {
packageName: dataObj.name,
enabled,
frontend: getFrontend(),
app: Constants.SIYUAN_APPID,
}, (response) => {
target.removeAttribute("disabled");

View file

@ -47,7 +47,7 @@ func useActivationcode(c *gin.Context) {
}
var code string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("data", &code, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("data", &code, true, true)) {
return
}
err := model.UseActivationcode(code)
@ -68,7 +68,7 @@ func checkActivationcode(c *gin.Context) {
}
var code string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("data", &code, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("data", &code, true, true)) {
return
}
ret.Code, ret.Msg = model.CheckActivationcode(code)

View file

@ -35,7 +35,7 @@ func chatGPT(c *gin.Context) {
}
var msg string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("msg", &msg, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("msg", &msg, true, true)) {
return
}
ret.Data = model.ChatGPT(msg)

View file

@ -34,8 +34,11 @@ func zip(c *gin.Context) {
return
}
var entryPath string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("path", &entryPath, true, false)) {
var entryPath, zipFilePath string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("path", &entryPath, true, false),
util.BindJsonArg("zipPath", &zipFilePath, true, false),
) {
return
}
entryAbsPath, err := util.GetAbsPathInWorkspace(entryPath)
@ -44,11 +47,6 @@ func zip(c *gin.Context) {
ret.Msg = err.Error()
return
}
var zipFilePath string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("zipPath", &zipFilePath, true, false)) {
return
}
zipAbsFilePath, err := util.GetAbsPathInWorkspace(zipFilePath)
if err != nil {
ret.Code = -1
@ -91,8 +89,11 @@ func unzip(c *gin.Context) {
return
}
var zipFilePath string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("zipPath", &zipFilePath, true, false)) {
var zipFilePath, entryPath string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("zipPath", &zipFilePath, true, false),
util.BindJsonArg("path", &entryPath, true, false),
) {
return
}
zipAbsFilePath, err := util.GetAbsPathInWorkspace(zipFilePath)
@ -101,11 +102,6 @@ func unzip(c *gin.Context) {
ret.Msg = err.Error()
return
}
var entryPath string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("path", &entryPath, true, false)) {
return
}
entryAbsPath, err := util.GetAbsPathInWorkspace(entryPath)
if err != nil {
ret.Code = -1

View file

@ -37,16 +37,7 @@ func batchUpdatePackage(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
arg, ok := util.JsonArg(c, ret)
if !ok {
return
}
var frontend string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("frontend", &frontend, true, false)) {
return
}
model.BatchUpdatePackages(frontend)
model.BatchUpdatePackages()
}
func getUpdatedPackage(c *gin.Context) {
@ -59,7 +50,7 @@ func getUpdatedPackage(c *gin.Context) {
}
var frontend string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("frontend", &frontend, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("frontend", &frontend, true, true)) {
return
}
@ -84,9 +75,9 @@ func getBazaarPackageREADME(c *gin.Context) {
var repoURL, repoHash, pkgType string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("repoURL", &repoURL, true, false),
util.BindJsonArg("repoHash", &repoHash, true, false),
util.BindJsonArg("packageType", &pkgType, true, false),
util.BindJsonArg("repoURL", &repoURL, true, true),
util.BindJsonArg("repoHash", &repoHash, true, true),
util.BindJsonArg("packageType", &pkgType, true, true),
) {
return
}
@ -111,7 +102,7 @@ func getBazaarPlugin(c *gin.Context) {
var frontend, keyword string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("frontend", &frontend, true, false),
util.BindJsonArg("frontend", &frontend, true, true),
util.BindJsonArg("keyword", &keyword, false, false),
) {
return
@ -133,7 +124,7 @@ func getInstalledPlugin(c *gin.Context) {
var frontend, keyword string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("frontend", &frontend, true, false),
util.BindJsonArg("frontend", &frontend, true, true),
util.BindJsonArg("keyword", &keyword, false, false),
) {
return
@ -155,11 +146,11 @@ func installBazaarPlugin(c *gin.Context) {
var frontend, keyword, repoURL, repoHash, packageName string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("frontend", &frontend, true, false),
util.BindJsonArg("frontend", &frontend, true, true),
util.BindJsonArg("keyword", &keyword, false, false),
util.BindJsonArg("repoURL", &repoURL, true, false),
util.BindJsonArg("repoHash", &repoHash, true, false),
util.BindJsonArg("packageName", &packageName, true, false),
util.BindJsonArg("repoURL", &repoURL, true, true),
util.BindJsonArg("repoHash", &repoHash, true, true),
util.BindJsonArg("packageName", &packageName, true, true),
) {
return
}
@ -189,7 +180,7 @@ func uninstallBazaarPlugin(c *gin.Context) {
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("frontend", &frontend, false, false),
util.BindJsonArg("keyword", &keyword, false, false),
util.BindJsonArg("packageName", &packageName, true, false),
util.BindJsonArg("packageName", &packageName, true, true),
) {
return
}
@ -263,9 +254,9 @@ func installBazaarWidget(c *gin.Context) {
var keyword, repoURL, repoHash, packageName string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("keyword", &keyword, false, false),
util.BindJsonArg("repoURL", &repoURL, true, false),
util.BindJsonArg("repoHash", &repoHash, true, false),
util.BindJsonArg("packageName", &packageName, true, false),
util.BindJsonArg("repoURL", &repoURL, true, true),
util.BindJsonArg("repoHash", &repoHash, true, true),
util.BindJsonArg("packageName", &packageName, true, true),
) {
return
}
@ -294,7 +285,7 @@ func uninstallBazaarWidget(c *gin.Context) {
var keyword, packageName string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("keyword", &keyword, false, false),
util.BindJsonArg("packageName", &packageName, true, false),
util.BindJsonArg("packageName", &packageName, true, true),
) {
return
}
@ -360,9 +351,9 @@ func installBazaarIcon(c *gin.Context) {
var keyword, repoURL, repoHash, packageName string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("keyword", &keyword, false, false),
util.BindJsonArg("repoURL", &repoURL, true, false),
util.BindJsonArg("repoHash", &repoHash, true, false),
util.BindJsonArg("packageName", &packageName, true, false),
util.BindJsonArg("repoURL", &repoURL, true, true),
util.BindJsonArg("repoHash", &repoHash, true, true),
util.BindJsonArg("packageName", &packageName, true, true),
) {
return
}
@ -392,7 +383,7 @@ func uninstallBazaarIcon(c *gin.Context) {
var keyword, packageName string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("keyword", &keyword, false, false),
util.BindJsonArg("packageName", &packageName, true, false),
util.BindJsonArg("packageName", &packageName, true, true),
) {
return
}
@ -459,9 +450,9 @@ func installBazaarTemplate(c *gin.Context) {
var keyword, repoURL, repoHash, packageName string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("keyword", &keyword, false, false),
util.BindJsonArg("repoURL", &repoURL, true, false),
util.BindJsonArg("repoHash", &repoHash, true, false),
util.BindJsonArg("packageName", &packageName, true, false),
util.BindJsonArg("repoURL", &repoURL, true, true),
util.BindJsonArg("repoHash", &repoHash, true, true),
util.BindJsonArg("packageName", &packageName, true, true),
) {
return
}
@ -491,7 +482,7 @@ func uninstallBazaarTemplate(c *gin.Context) {
var keyword, packageName string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("keyword", &keyword, false, false),
util.BindJsonArg("packageName", &packageName, true, false),
util.BindJsonArg("packageName", &packageName, true, true),
) {
return
}
@ -558,9 +549,9 @@ func installBazaarTheme(c *gin.Context) {
var mode float64
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("keyword", &keyword, false, false),
util.BindJsonArg("repoURL", &repoURL, true, false),
util.BindJsonArg("repoHash", &repoHash, true, false),
util.BindJsonArg("packageName", &packageName, true, false),
util.BindJsonArg("repoURL", &repoURL, true, true),
util.BindJsonArg("repoHash", &repoHash, true, true),
util.BindJsonArg("packageName", &packageName, true, true),
util.BindJsonArg("mode", &mode, true, false),
) {
return
@ -596,7 +587,7 @@ func uninstallBazaarTheme(c *gin.Context) {
var keyword, packageName string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("keyword", &keyword, false, false),
util.BindJsonArg("packageName", &packageName, true, false),
util.BindJsonArg("packageName", &packageName, true, true),
) {
return
}

View file

@ -807,7 +807,7 @@ func batchUpdateBlock(c *gin.Context) {
}
var blocksArg []any
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("blocks", &blocksArg, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("blocks", &blocksArg, true, true)) {
return
}

View file

@ -721,8 +721,8 @@ func postMessage(c *gin.Context) {
var message, channelName string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("message", &message, true, false),
util.BindJsonArg("channel", &channelName, true, false),
util.BindJsonArg("message", &message, true, true),
util.BindJsonArg("channel", &channelName, true, true),
) {
return
}
@ -780,7 +780,7 @@ func getChannelInfo(c *gin.Context) {
}
var name string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("name", &name, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("name", &name, true, true)) {
return
}

View file

@ -48,7 +48,7 @@ func exportCodeBlock(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
filePath, err := model.ExportCodeBlock(id)
@ -75,8 +75,8 @@ func exportAttributeView(c *gin.Context) {
var avID, blockID string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("id", &avID, true, false),
util.BindJsonArg("blockID", &blockID, true, false),
util.BindJsonArg("id", &avID, true, true),
util.BindJsonArg("blockID", &blockID, true, true),
) {
return
}
@ -103,7 +103,7 @@ func exportEPUB(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
name, zipPath := model.ExportPandocConvertZip([]string{id}, "epub", ".epub")
@ -123,7 +123,7 @@ func exportRTF(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
name, zipPath := model.ExportPandocConvertZip([]string{id}, "rtf", ".rtf")
@ -143,7 +143,7 @@ func exportODT(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
name, zipPath := model.ExportPandocConvertZip([]string{id}, "odt", ".odt")
@ -163,7 +163,7 @@ func exportMediaWiki(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
name, zipPath := model.ExportPandocConvertZip([]string{id}, "mediawiki", ".wiki")
@ -183,7 +183,7 @@ func exportOrgMode(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
name, zipPath := model.ExportPandocConvertZip([]string{id}, "org", ".org")
@ -203,7 +203,7 @@ func exportOPML(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
name, zipPath := model.ExportPandocConvertZip([]string{id}, "opml", ".opml")
@ -223,7 +223,7 @@ func exportTextile(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
name, zipPath := model.ExportPandocConvertZip([]string{id}, "textile", ".textile")
@ -243,7 +243,7 @@ func exportAsciiDoc(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
name, zipPath := model.ExportPandocConvertZip([]string{id}, "asciidoc", ".adoc")
@ -263,7 +263,7 @@ func exportReStructuredText(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
name, zipPath := model.ExportPandocConvertZip([]string{id}, "rst", ".rst")
@ -283,7 +283,7 @@ func export2Liandi(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
err := model.Export2Liandi(id)
@ -304,7 +304,7 @@ func exportDataInFolder(c *gin.Context) {
}
var exportFolder string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("folder", &exportFolder, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("folder", &exportFolder, true, true)) {
return
}
name, err := model.ExportDataInFolder(exportFolder)
@ -386,7 +386,7 @@ func exportNotebookMd(c *gin.Context) {
}
var notebook string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("notebook", &notebook, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("notebook", &notebook, true, true)) {
return
}
zipPath := model.ExportNotebookMarkdown(notebook)
@ -428,7 +428,7 @@ func exportMd(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
name, zipPath := model.ExportPandocConvertZip([]string{id}, "", ".md")
@ -448,7 +448,7 @@ func exportNotebookSY(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
zipPath := model.ExportNotebookSY(id)
@ -488,7 +488,7 @@ func exportSY(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
zipPath := model.ExportSYs([]string{id})
@ -507,7 +507,7 @@ func exportMdContent(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
if util.InvalidIDPattern(id, ret) {
@ -566,8 +566,8 @@ func exportDocx(c *gin.Context) {
var id, savePath string
var removeAssets, merge bool
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("id", &id, true, false),
util.BindJsonArg("savePath", &savePath, true, false),
util.BindJsonArg("id", &id, true, true),
util.BindJsonArg("savePath", &savePath, true, true),
util.BindJsonArg("removeAssets", &removeAssets, true, false),
util.BindJsonArg("merge", &merge, false, false),
) {
@ -597,8 +597,8 @@ func exportMdHTML(c *gin.Context) {
var id, savePath string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("id", &id, true, false),
util.BindJsonArg("savePath", &savePath, true, false),
util.BindJsonArg("id", &id, true, true),
util.BindJsonArg("savePath", &savePath, false, false),
) {
return
}
@ -669,9 +669,9 @@ func exportBrowserHTML(c *gin.Context) {
var folder, htmlContent, name string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("folder", &folder, true, false),
util.BindJsonArg("html", &htmlContent, true, false),
util.BindJsonArg("name", &name, true, false),
util.BindJsonArg("folder", &folder, true, true),
util.BindJsonArg("html", &htmlContent, true, true),
util.BindJsonArg("name", &name, true, true),
) {
return
}
@ -731,7 +731,7 @@ func exportPreviewHTML(c *gin.Context) {
var id string
var keepFold, merge, image bool
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("id", &id, true, false),
util.BindJsonArg("id", &id, true, true),
util.BindJsonArg("keepFold", &keepFold, false, false),
util.BindJsonArg("merge", &merge, false, false),
util.BindJsonArg("image", &image, false, false),
@ -771,9 +771,9 @@ func exportHTML(c *gin.Context) {
var id, savePath string
var pdf, keepFold, merge bool
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("id", &id, true, false),
util.BindJsonArg("id", &id, true, true),
util.BindJsonArg("pdf", &pdf, true, false),
util.BindJsonArg("savePath", &savePath, true, false),
util.BindJsonArg("savePath", &savePath, false, false),
util.BindJsonArg("keepFold", &keepFold, false, false),
util.BindJsonArg("merge", &merge, false, false),
) {
@ -814,8 +814,8 @@ func processPDF(c *gin.Context) {
var id, pdfPath string
var merge bool
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("id", &id, true, false),
util.BindJsonArg("path", &pdfPath, true, false),
util.BindJsonArg("id", &id, true, true),
util.BindJsonArg("path", &pdfPath, true, true),
util.BindJsonArg("merge", &merge, false, false),
) {
return
@ -840,7 +840,7 @@ func exportPreview(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}

View file

@ -35,7 +35,7 @@ func netAssets2LocalAssets(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
err := model.NetAssets2LocalAssets(id, false, "")
@ -56,10 +56,12 @@ func netImg2LocalAssets(c *gin.Context) {
return
}
id := arg["id"].(string)
var url string
if urlArg := arg["url"]; nil != urlArg {
url = urlArg.(string)
var id, url string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("id", &id, true, true),
util.BindJsonArg("url", &url, false, false),
) {
return
}
err := model.NetAssets2LocalAssets(id, true, url)
if err != nil {
@ -80,7 +82,7 @@ func autoSpace(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
err := model.AutoSpace(id)

View file

@ -65,7 +65,7 @@ func getGraph(c *gin.Context) {
var query string
var confArg map[string]any
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("k", &query, true, false),
util.BindJsonArg("k", &query, false, false),
util.BindJsonArg("conf", &confArg, true, false),
) {
return
@ -98,7 +98,7 @@ func getGraph(c *gin.Context) {
"links": links,
"conf": global,
"box": boxID,
"reqId": arg["reqId"],
"reqId": reqId,
}
util.RandomSleep(200, 500)
}
@ -121,8 +121,8 @@ func getLocalGraph(c *gin.Context) {
var keyword, id string
var confArg map[string]any
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("k", &keyword, true, false),
util.BindJsonArg("id", &id, true, false),
util.BindJsonArg("k", &keyword, false, false),
util.BindJsonArg("id", &id, true, true),
util.BindJsonArg("conf", &confArg, true, false),
) {
return
@ -157,7 +157,7 @@ func getLocalGraph(c *gin.Context) {
"nodes": nodes,
"links": links,
"conf": local,
"reqId": arg["reqId"],
"reqId": reqId,
}
util.RandomSleep(200, 500)
}

View file

@ -35,23 +35,29 @@ func searchHistory(c *gin.Context) {
return
}
notebook := ""
if nil != arg["notebook"] {
notebook = arg["notebook"].(string)
var notebook, query, op string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("notebook", &notebook, false, false),
util.BindJsonArg("query", &query, false, false),
util.BindJsonArg("op", &op, false, false),
) {
return
}
typ := model.HistoryTypeDoc
if nil != arg["type"] {
typ = int(arg["type"].(float64))
typeVal, ok := util.ParseJsonArg[float64]("type", arg, ret, true, false)
if !ok {
return
}
typ = int(typeVal)
}
query := arg["query"].(string)
page := 1
if nil != arg["page"] {
page = int(arg["page"].(float64))
}
op := "all"
if nil != arg["op"] {
op = arg["op"].(string)
pageVal, ok := util.ParseJsonArg[float64]("page", arg, ret, true, false)
if !ok {
return
}
page = int(pageVal)
}
histories, pageCount, totalCount := model.FullTextSearchHistory(query, notebook, op, typ, page)
ret.Data = map[string]any{
@ -70,21 +76,22 @@ func getHistoryItems(c *gin.Context) {
return
}
created := arg["created"].(string)
notebook := ""
if nil != arg["notebook"] {
notebook = arg["notebook"].(string)
var created, notebook, query, op string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("created", &created, true, true),
util.BindJsonArg("notebook", &notebook, false, false),
util.BindJsonArg("query", &query, false, false),
util.BindJsonArg("op", &op, false, false),
) {
return
}
typ := model.HistoryTypeDoc
if nil != arg["type"] {
typ = int(arg["type"].(float64))
}
query := arg["query"].(string)
op := "all"
if nil != arg["op"] {
op = arg["op"].(string)
typeVal, ok := util.ParseJsonArg[float64]("type", arg, ret, true, false)
if !ok {
return
}
typ = int(typeVal)
}
histories := model.FullTextSearchHistoryItems(created, query, notebook, op, typ)
ret.Data = map[string]any{
@ -139,15 +146,20 @@ func getDocHistoryContent(c *gin.Context) {
return
}
historyPath := arg["historyPath"].(string)
k := arg["k"]
var keyword string
if nil != k {
keyword = k.(string)
var historyPath, keyword string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("historyPath", &historyPath, true, true),
util.BindJsonArg("k", &keyword, false, false),
) {
return
}
highlight := true
if val, ok := arg["highlight"]; ok {
highlight = val.(bool)
if nil != arg["highlight"] {
highlightVal, ok := util.ParseJsonArg[bool]("highlight", arg, ret, true, false)
if !ok {
return
}
highlight = highlightVal
}
id, rootID, content, isLargeDoc, err := model.GetDocHistoryContent(historyPath, keyword, highlight)
if err != nil {
@ -175,8 +187,8 @@ func rollbackDocHistory(c *gin.Context) {
var notebook, historyPath string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("notebook", &notebook, true, false),
util.BindJsonArg("historyPath", &historyPath, true, false),
util.BindJsonArg("notebook", &notebook, true, true),
util.BindJsonArg("historyPath", &historyPath, true, true),
) {
return
}
@ -202,7 +214,7 @@ func rollbackAssetsHistory(c *gin.Context) {
}
var historyPath string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("historyPath", &historyPath, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("historyPath", &historyPath, true, true)) {
return
}
err := model.RollbackAssetsHistory(historyPath)
@ -223,7 +235,7 @@ func rollbackNotebookHistory(c *gin.Context) {
}
var historyPath string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("historyPath", &historyPath, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("historyPath", &historyPath, true, true)) {
return
}
err := model.RollbackNotebookHistory(historyPath)
@ -244,7 +256,7 @@ func rollbackAttributeViewHistory(c *gin.Context) {
}
var historyPath string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("historyPath", &historyPath, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("historyPath", &historyPath, true, true)) {
return
}
err := model.RollbackAttributeViewHistory(historyPath)

View file

@ -58,7 +58,7 @@ func getShorthand(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
data, err := model.GetCloudShorthand(id)

View file

@ -162,7 +162,7 @@ func forwardProxy(c *gin.Context) {
}
var destURL string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("url", &destURL, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("url", &destURL, true, true)) {
return
}
u, e := url.ParseRequestURI(destURL)

View file

@ -38,7 +38,7 @@ func getNotebookInfo(c *gin.Context) {
}
var boxID string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("notebook", &boxID, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("notebook", &boxID, true, true)) {
return
}
if util.InvalidIDPattern(boxID, ret) {
@ -69,7 +69,7 @@ func setNotebookIcon(c *gin.Context) {
var boxID, icon string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("notebook", &boxID, true, false),
util.BindJsonArg("notebook", &boxID, true, true),
util.BindJsonArg("icon", &icon, true, false),
) {
return
@ -103,18 +103,16 @@ func renameNotebook(c *gin.Context) {
return
}
var notebook string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("notebook", &notebook, true, false)) {
var notebook, name string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("notebook", &notebook, true, true),
util.BindJsonArg("name", &name, true, false),
) {
return
}
if util.InvalidIDPattern(notebook, ret) {
return
}
var name string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("name", &name, true, false)) {
return
}
err := model.RenameBox(notebook, name)
if err != nil {
ret.Code = -1
@ -141,7 +139,7 @@ func removeNotebook(c *gin.Context) {
}
var notebook string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("notebook", &notebook, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("notebook", &notebook, true, true)) {
return
}
if util.InvalidIDPattern(notebook, ret) {
@ -225,7 +223,7 @@ func openNotebook(c *gin.Context) {
}
var notebook string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("notebook", &notebook, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("notebook", &notebook, true, true)) {
return
}
if util.InvalidIDPattern(notebook, ret) {

View file

@ -18,7 +18,6 @@ package api
import (
"net/http"
"strings"
"github.com/88250/gulu"
"github.com/gin-gonic/gin"
@ -35,13 +34,7 @@ func pushMsg(c *gin.Context) {
}
var msg string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("msg", &msg, true, false)) {
return
}
msg = strings.TrimSpace(msg)
if "" == msg {
ret.Code = -1
ret.Msg = "Field [msg] must not be empty"
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("msg", &msg, true, true)) {
return
}
@ -66,13 +59,7 @@ func pushErrMsg(c *gin.Context) {
}
var msg string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("msg", &msg, true, false)) {
return
}
msg = strings.TrimSpace(msg)
if "" == msg {
ret.Code = -1
ret.Msg = "Field [msg] must not be empty"
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("msg", &msg, true, true)) {
return
}

View file

@ -36,10 +36,10 @@ func loadPetals(c *gin.Context) {
}
var frontend string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("frontend", &frontend, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("frontend", &frontend, true, true)) {
return
}
isPublish := model.IsReadOnlyRole(model.GetGinContextRole(c))
isPublish := model.IsReadOnlyRoleContext(c)
ret.Data = model.LoadPetals(frontend, isPublish)
}
@ -53,17 +53,17 @@ func setPetalEnabled(c *gin.Context) {
return
}
var packageName, frontend, app string
var packageName, app string
var enabled bool
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("packageName", &packageName, true, false),
util.BindJsonArg("packageName", &packageName, true, true),
util.BindJsonArg("enabled", &enabled, true, false),
util.BindJsonArg("frontend", &frontend, true, false),
util.BindJsonArg("app", &app, false, false),
) {
return
}
data, err := model.SetPetalEnabled(packageName, enabled, frontend)
data, err := model.SetPetalEnabled(packageName, enabled)
if err != nil {
ret.Code = -1
ret.Msg = err.Error()

View file

@ -85,7 +85,7 @@ func getRepoFile(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
data, p, err := model.GetRepoFile(id)
@ -117,7 +117,7 @@ func rollbackRepoSnapshotFile(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
@ -139,7 +139,7 @@ func openRepoSnapshotFile(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
@ -169,8 +169,8 @@ func diffRepoSnapshots(c *gin.Context) {
var left, right string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("left", &left, true, false),
util.BindJsonArg("right", &right, true, false),
util.BindJsonArg("left", &left, true, true),
util.BindJsonArg("right", &right, true, true),
) {
return
}
@ -227,7 +227,7 @@ func checkoutRepo(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
model.CheckoutRepo(id)
@ -244,7 +244,7 @@ func downloadCloudSnapshot(c *gin.Context) {
var id, tag string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("id", &id, true, false),
util.BindJsonArg("id", &id, true, true),
util.BindJsonArg("tag", &tag, true, false),
) {
return
@ -267,7 +267,7 @@ func uploadCloudSnapshot(c *gin.Context) {
var id, tag string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("id", &id, true, false),
util.BindJsonArg("id", &id, true, true),
util.BindJsonArg("tag", &tag, true, false),
) {
return
@ -359,7 +359,7 @@ func removeCloudRepoTagSnapshot(c *gin.Context) {
}
var tag string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("tag", &tag, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("tag", &tag, true, true)) {
return
}
err := model.RemoveCloudRepoTag(tag)
@ -396,7 +396,7 @@ func removeRepoTagSnapshot(c *gin.Context) {
}
var tag string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("tag", &tag, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("tag", &tag, true, true)) {
return
}
err := model.RemoveTagSnapshot(tag)
@ -439,7 +439,7 @@ func tagSnapshot(c *gin.Context) {
var id, name string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("id", &id, true, false),
util.BindJsonArg("id", &id, true, true),
util.BindJsonArg("name", &name, true, false),
) {
return

View file

@ -41,7 +41,7 @@ func getSnippet(c *gin.Context) {
var enabledArg float64 // 0禁用1启用2全部
var keyword string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("type", &typ, true, false),
util.BindJsonArg("type", &typ, true, true),
util.BindJsonArg("enabled", &enabledArg, true, false),
util.BindJsonArg("keyword", &keyword, false, false),
) {
@ -60,7 +60,7 @@ func getSnippet(c *gin.Context) {
return
}
isPublish := model.IsReadOnlyRole(model.GetGinContextRole(c))
isPublish := model.IsReadOnlyRoleContext(c)
var snippets []*conf.Snippet
for _, s := range confSnippets {
if isPublish && s.DisabledInPublish {
@ -144,7 +144,7 @@ func removeSnippet(c *gin.Context) {
}
var id string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("id", &id, true, true)) {
return
}
snippet, err := model.RemoveSnippet(id)

View file

@ -45,7 +45,7 @@ func SQL(c *gin.Context) {
}
var stmt string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("stmt", &stmt, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("stmt", &stmt, true, true)) {
return
}
result, err := sql.Query(stmt, model.Conf.Search.Limit)

View file

@ -29,14 +29,12 @@ func getRecentDocs(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
// 获取排序参数
sortBy := "viewedAt" // 默认按浏览时间排序openAt按打开时间排序closedAt按关闭时间排序
// 兼容旧版接口,不能直接使用 util.JsonArg()
var sortBy string
arg := map[string]any{}
// 兼容旧版接口,不能直接使用 util.JsonArg()
if err := c.ShouldBindJSON(&arg); err == nil {
if arg["sortBy"] != nil {
sortBy = arg["sortBy"].(string)
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("sortBy", &sortBy, false, false)) {
return
}
}

View file

@ -525,7 +525,7 @@ func removeCloudSyncDir(c *gin.Context) {
}
var name string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("name", &name, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("name", &name, true, true)) {
return
}
err := model.RemoveCloudSyncDir(name)
@ -549,7 +549,7 @@ func createCloudSyncDir(c *gin.Context) {
}
var name string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("name", &name, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("name", &name, true, true)) {
return
}
err := model.CreateCloudSyncDir(name)
@ -797,7 +797,7 @@ func setCloudSyncDir(c *gin.Context) {
}
var name string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("name", &name, true, false)) {
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("name", &name, true, true)) {
return
}
model.SetCloudSyncDir(name)

View file

@ -632,8 +632,8 @@ func setAccessAuthCode(c *gin.Context) {
aac = model.Conf.AccessAuthCode
}
aac = strings.TrimSpace(aac)
aac = util.RemoveInvalid(aac)
aac = strings.TrimSpace(aac)
model.Conf.AccessAuthCode = aac
model.Conf.Save()

View file

@ -34,26 +34,25 @@ func getTag(c *gin.Context) {
return
}
sortParam := arg["sort"]
sortMode := model.Conf.Tag.Sort
if nil != sortParam {
sortMode = int(sortParam.(float64))
}
model.Conf.Tag.Sort = sortMode
model.Conf.Save()
// API `getTag` add an optional parameter `ignoreMaxListHint` https://github.com/siyuan-note/siyuan/issues/16000
ignoreMaxListHint := false
ignoreMaxListHintArg := arg["ignoreMaxListHint"]
if nil != ignoreMaxListHintArg {
ignoreMaxListHint = ignoreMaxListHintArg.(bool)
}
var ignoreMaxListHint bool
var app string
if !util.ParseJsonArgs(arg, ret, util.BindJsonArg("app", &app, true, false)) {
if !util.ParseJsonArgs(arg, ret,
// API `getTag` add an optional parameter `ignoreMaxListHint` https://github.com/siyuan-note/siyuan/issues/16000
util.BindJsonArg("ignoreMaxListHint", &ignoreMaxListHint, false, false),
util.BindJsonArg("app", &app, false, false),
) {
return
}
if nil != arg["sort"] {
sortVal, ok := util.ParseJsonArg[float64]("sort", arg, ret, true, false)
if !ok {
return
}
model.Conf.Tag.Sort = int(sortVal)
model.Conf.Save()
}
tags := model.BuildTags(ignoreMaxListHint, app)
if model.IsReadOnlyRoleContext(c) {
@ -76,7 +75,7 @@ func renameTag(c *gin.Context) {
var oldLabel, newLabel string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("oldLabel", &oldLabel, true, false),
util.BindJsonArg("newLabel", &newLabel, true, false),
util.BindJsonArg("newLabel", &newLabel, true, true),
) {
return
}

View file

@ -42,10 +42,10 @@ func performTransactions(c *gin.Context) {
var reqID float64
var app, session string
if !util.ParseJsonArgs(arg, ret,
util.BindJsonArg("transactions", &trans, true, false),
util.BindJsonArg("transactions", &trans, true, true),
util.BindJsonArg("reqId", &reqID, true, false),
util.BindJsonArg("app", &app, true, false),
util.BindJsonArg("session", &session, true, false),
util.BindJsonArg("app", &app, false, false),
util.BindJsonArg("session", &session, false, false),
) {
return
}

View file

@ -62,6 +62,11 @@ func ParseInstalledPlugin(name, frontend string) (found bool, displayName string
// IsIncompatiblePlugin 判断插件是否与当前环境不兼容
func IsIncompatiblePlugin(plugin *Package, frontend string) bool {
// frontend 为空时不检查兼容性(视为兼容)
if "" == frontend {
return false
}
backend := getCurrentBackend()
if !isTargetSupported(plugin.Backends, backend) {
return true

View file

@ -54,7 +54,7 @@ func ChatGPTWithAction(ids []string, action string) (ret string) {
var cachedContextMsg []string
func chatGPT(msg string, cloud bool) (ret string) {
if "Clear context" == strings.TrimSpace(msg) {
if "Clear context" == msg {
// AI clear context action https://github.com/siyuan-note/siyuan/issues/10255
cachedContextMsg = nil
return

View file

@ -79,8 +79,8 @@ func updatePackages(packages []*bazaar.Package, pkgType string, count *int, tota
}
// BatchUpdatePackages 更新所有集市包
func BatchUpdatePackages(frontend string) {
plugins, widgets, icons, themes, templates := GetUpdatedPackages(frontend)
func BatchUpdatePackages() {
plugins, widgets, icons, themes, templates := GetUpdatedPackages("")
total := len(plugins) + len(widgets) + len(icons) + len(themes) + len(templates)
if 1 > total {
@ -112,23 +112,25 @@ func BatchUpdatePackages(frontend string) {
}
// GetUpdatedPackages 获取所有类型集市包的更新列表
//
// - frontend 仅用于插件兼容性展示
func GetUpdatedPackages(frontend string) (plugins, widgets, icons, themes, templates []*bazaar.Package) {
wg := &sync.WaitGroup{}
wg.Go(func() {
plugins = getUpdatedPackages("plugins", frontend, "")
plugins = getUpdatedPackages("plugins", frontend)
})
wg.Go(func() {
themes = getUpdatedPackages("themes", "", "")
themes = getUpdatedPackages("themes", "")
})
wg.Go(func() {
icons = getUpdatedPackages("icons", "", "")
icons = getUpdatedPackages("icons", "")
})
wg.Go(func() {
templates = getUpdatedPackages("templates", "", "")
templates = getUpdatedPackages("templates", "")
})
wg.Go(func() {
widgets = getUpdatedPackages("widgets", "", "")
widgets = getUpdatedPackages("widgets", "")
})
wg.Wait()
@ -136,8 +138,8 @@ func GetUpdatedPackages(frontend string) (plugins, widgets, icons, themes, templ
}
// getUpdatedPackages 获取单个类型集市包的更新列表
func getUpdatedPackages(pkgType, frontend, keyword string) (updatedPackages []*bazaar.Package) {
installedPackages := GetInstalledPackages(pkgType, frontend, keyword)
func getUpdatedPackages(pkgType, frontend string) (updatedPackages []*bazaar.Package) {
installedPackages := GetInstalledPackages(pkgType, frontend, "")
updatedPackages = []*bazaar.Package{} // 确保返回空切片而非 nil
for _, pkg := range installedPackages {
if !pkg.Outdated {

View file

@ -577,7 +577,6 @@ func getUser(token string) (*conf.User, error) {
}
func UseActivationcode(code string) (err error) {
code = strings.TrimSpace(code)
code = util.RemoveInvalid(code)
requestResult := gulu.Ret.NewResult()
request := httpclient.NewCloudRequest30s()
@ -601,7 +600,6 @@ func UseActivationcode(code string) (err error) {
}
func CheckActivationcode(code string) (retCode int, msg string) {
code = strings.TrimSpace(code)
code = util.RemoveInvalid(code)
retCode = 1
requestResult := gulu.Ret.NewResult()

View file

@ -589,8 +589,8 @@ func InitConf() {
if "" != util.AccessAuthCode {
Conf.AccessAuthCode = util.AccessAuthCode
}
Conf.AccessAuthCode = strings.TrimSpace(Conf.AccessAuthCode)
Conf.AccessAuthCode = util.RemoveInvalid(Conf.AccessAuthCode)
Conf.AccessAuthCode = strings.TrimSpace(Conf.AccessAuthCode)
if 1 == Conf.DataIndexState {
// 上次未正常完成数据索引

View file

@ -550,7 +550,8 @@ func buildSearchHistoryQueryFilter(query, op, box, table string, typ int) (stmt
} else {
stmt += "1=1"
}
if "all" != op {
if op = strings.TrimSpace(op); op != "" && op != "all" {
stmt += " AND op = '" + op + "'"
}

View file

@ -20,6 +20,7 @@ import (
"fmt"
"os"
"path/filepath"
"strconv"
"strings"
"sync"
@ -28,6 +29,7 @@ import (
"github.com/siyuan-note/logging"
"github.com/siyuan-note/siyuan/kernel/bazaar"
"github.com/siyuan-note/siyuan/kernel/util"
"golang.org/x/sync/singleflight"
)
// Petal represents a plugin's management status.
@ -44,10 +46,10 @@ type Petal struct {
I18n map[string]any `json:"i18n"` // i18n text
}
func SetPetalEnabled(name string, enabled bool, frontend string) (ret *Petal, err error) {
func SetPetalEnabled(name string, enabled bool) (ret *Petal, err error) {
petals := getPetals()
found, displayName, incompatible, disabledInPublish, disallowInstall := bazaar.ParseInstalledPlugin(name, frontend)
found, displayName, incompatible, disabledInPublish, disallowInstall := bazaar.ParseInstalledPlugin(name, "")
if !found {
logging.LogErrorf("plugin [%s] not found", name)
return
@ -66,16 +68,9 @@ func SetPetalEnabled(name string, enabled bool, frontend string) (ret *Petal, er
ret.DisabledInPublish = disabledInPublish
ret.DisallowInstall = disallowInstall
if enabled && incompatible {
err = fmt.Errorf(Conf.Language(205))
logging.LogInfof("plugin [%s] is incompatible [%s]", name, frontend)
return
}
if enabled && disallowInstall {
msg := "require upgrade SiYuan to use this plugin [" + name + "]"
err = fmt.Errorf(msg)
logging.LogInfof(msg)
err = fmt.Errorf("require upgrade SiYuan to use this plugin [%s]", name)
logging.LogInfof("require upgrade SiYuan to use this plugin [%s]", name)
return
}
@ -94,7 +89,21 @@ func getPetalByName(name string, petals []*Petal) (ret *Petal) {
return
}
var loadPetalsFlight singleflight.Group
func LoadPetals(frontend string, isPublish bool) (ret []*Petal) {
// 调用 setPetalEnabled 接口之后推送消息到所有前端实例,接着会同时调用 loadPetals 接口,合并相同类型的请求为一次执行
key := "loadPetals:" + frontend + ":" + strconv.FormatBool(isPublish)
v, err, _ := loadPetalsFlight.Do(key, func() (any, error) {
return loadPetals(frontend, isPublish), nil
})
if err != nil {
return []*Petal{}
}
return v.([]*Petal)
}
func loadPetals(frontend string, isPublish bool) (ret []*Petal) {
ret = []*Petal{}
if Conf.Bazaar.PetalDisabled {
@ -114,7 +123,7 @@ func LoadPetals(frontend string, isPublish bool) (ret []*Petal) {
_, petal.DisplayName, petal.Incompatible, petal.DisabledInPublish, petal.DisallowInstall = bazaar.ParseInstalledPlugin(petal.Name, frontend)
if !petal.Enabled || petal.Incompatible || (isPublish && petal.DisabledInPublish) || petal.DisallowInstall {
if petal.DisallowInstall {
SetPetalEnabled(petal.Name, false, frontend)
SetPetalEnabled(petal.Name, false)
logging.LogInfof("plugin [%s] disallowed install, auto disabled", petal.Name)
}
continue

View file

@ -647,8 +647,8 @@ func statTypesByPath(files []*entity.File) (ret []*TypeCount) {
func ImportRepoKey(base64Key string) (retKey string, err error) {
util.PushMsg(Conf.Language(136), 3000)
retKey = strings.TrimSpace(base64Key)
retKey = gulu.Str.RemoveInvisible(retKey)
retKey = gulu.Str.RemoveInvisible(base64Key)
retKey = strings.TrimSpace(retKey)
if 1 > len(retKey) {
err = errors.New(Conf.Language(142))
return
@ -984,11 +984,6 @@ func RemoveCloudRepoTag(tag string) (err error) {
return
}
if "" == tag {
err = errors.New("tag is empty")
return
}
repo, err := newRepository()
if err != nil {
return
@ -1134,8 +1129,8 @@ func TagSnapshot(id, name string) (err error) {
return
}
name = strings.TrimSpace(name)
name = util.RemoveInvalid(name)
name = strings.TrimSpace(name)
if "" == name {
err = errors.New(Conf.Language(142))
return
@ -1170,8 +1165,8 @@ func IndexRepo(memo string) (err error) {
return
}
memo = strings.TrimSpace(memo)
memo = gulu.Str.RemoveInvisible(memo)
memo = strings.TrimSpace(memo)
if "" == memo {
err = errors.New(Conf.Language(142))
return

View file

@ -106,8 +106,8 @@ func LoginAuth(c *gin.Context) {
}
authCode := arg["authCode"].(string)
authCode = strings.TrimSpace(authCode)
authCode = util.RemoveInvalid(authCode)
authCode = strings.TrimSpace(authCode)
if Conf.AccessAuthCode != authCode {
ret.Code = -1
@ -187,7 +187,7 @@ func GetCaptcha(c *gin.Context) {
}
func CheckReadonly(c *gin.Context) {
if util.ReadOnly || IsReadOnlyRole(GetGinContextRole(c)) {
if util.ReadOnly || IsReadOnlyRoleContext(c) {
result := util.NewResult()
result.Code = -1
result.Msg = Conf.Language(34)

View file

@ -524,7 +524,6 @@ func CreateCloudSyncDir(name string) (err error) {
return
}
name = strings.TrimSpace(name)
name = util.RemoveInvalid(name)
if !cloud.IsValidCloudDirName(name) {
return errors.New(Conf.Language(37))
@ -554,10 +553,6 @@ func RemoveCloudSyncDir(name string) (err error) {
msgId := util.PushMsg(Conf.Language(116), 15000)
if "" == name {
return
}
repo, err := newRepository()
if err != nil {
return

View file

@ -123,7 +123,6 @@ func RenameTag(oldLabel, newLabel string) (err error) {
return fmt.Errorf(Conf.Language(112), invalidChar)
}
newLabel = strings.TrimSpace(newLabel)
newLabel = strings.TrimPrefix(newLabel, "/")
newLabel = strings.TrimSuffix(newLabel, "/")
newLabel = strings.TrimSpace(newLabel)

View file

@ -314,9 +314,9 @@ func FilterFileName(name string) string {
name = strings.ReplaceAll(name, "<", "_")
name = strings.ReplaceAll(name, ">", "_")
name = strings.ReplaceAll(name, "|", "_")
name = RemoveInvalid(name) // Remove invisible characters from file names when uploading assets https://github.com/siyuan-note/siyuan/issues/11683
name = strings.TrimSpace(name)
name = strings.TrimSuffix(name, ".")
name = RemoveInvalid(name) // Remove invisible characters from file names when uploading assets https://github.com/siyuan-note/siyuan/issues/11683
return name
}

View file

@ -114,8 +114,8 @@ func Boot() {
ServerPort = *port
ReadOnly, _ = strconv.ParseBool(*readOnly)
AccessAuthCode = *accessAuthCode
AccessAuthCode = strings.TrimSpace(AccessAuthCode)
AccessAuthCode = RemoveInvalid(AccessAuthCode)
AccessAuthCode = strings.TrimSpace(AccessAuthCode)
Container = ContainerStd
if RunInContainer {
Container = ContainerDocker