🎨 Support exporting/importing S3 and WebDAV configurations https://github.com/siyuan-note/siyuan/issues/9566

This commit is contained in:
Daniel 2023-11-01 10:26:47 +08:00
parent 8ce4c7987b
commit cba9f59cfd
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 116 additions and 0 deletions

View file

@ -219,7 +219,9 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/sync/getBootSync", model.CheckAuth, getBootSync) ginServer.Handle("POST", "/api/sync/getBootSync", model.CheckAuth, getBootSync)
ginServer.Handle("POST", "/api/sync/getSyncInfo", model.CheckAuth, getSyncInfo) ginServer.Handle("POST", "/api/sync/getSyncInfo", model.CheckAuth, getSyncInfo)
ginServer.Handle("POST", "/api/sync/exportSyncProviderS3", model.CheckAuth, exportSyncProviderS3) ginServer.Handle("POST", "/api/sync/exportSyncProviderS3", model.CheckAuth, exportSyncProviderS3)
ginServer.Handle("POST", "/api/sync/importSyncProviderS3", model.CheckAuth, importSyncProviderS3)
ginServer.Handle("POST", "/api/sync/exportSyncProviderWebDAV", model.CheckAuth, exportSyncProviderWebDAV) ginServer.Handle("POST", "/api/sync/exportSyncProviderWebDAV", model.CheckAuth, exportSyncProviderWebDAV)
ginServer.Handle("POST", "/api/sync/importSyncProviderWebDAV", model.CheckAuth, importSyncProviderWebDAV)
ginServer.Handle("POST", "/api/inbox/getShorthands", model.CheckAuth, getShorthands) ginServer.Handle("POST", "/api/inbox/getShorthands", model.CheckAuth, getShorthands)
ginServer.Handle("POST", "/api/inbox/getShorthand", model.CheckAuth, getShorthand) ginServer.Handle("POST", "/api/inbox/getShorthand", model.CheckAuth, getShorthand)

View file

@ -17,7 +17,9 @@
package api package api
import ( import (
"encoding/hex"
"github.com/siyuan-note/logging" "github.com/siyuan-note/logging"
"io"
"net/http" "net/http"
"os" "os"
"path/filepath" "path/filepath"
@ -30,6 +32,62 @@ import (
"github.com/siyuan-note/siyuan/kernel/util" "github.com/siyuan-note/siyuan/kernel/util"
) )
func importSyncProviderWebDAV(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(200, ret)
form, err := c.MultipartForm()
if nil != err {
logging.LogErrorf("read upload file failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
files := form.File["file[]"]
if 1 != len(files) {
ret.Code = -1
ret.Msg = "invalid upload file"
return
}
f := files[0]
fh, err := f.Open()
if nil != err {
logging.LogErrorf("read upload file failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
data, err := io.ReadAll(fh)
fh.Close()
if nil != err {
logging.LogErrorf("read upload file failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
data = util.AESDecrypt(string(data))
data, _ = hex.DecodeString(string(data))
webdav := &conf.WebDAV{}
if err = gulu.JSON.UnmarshalJSON(data, webdav); nil != err {
logging.LogErrorf("import S3 provider failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
err = model.SetSyncProviderWebDAV(webdav)
if nil != err {
logging.LogErrorf("import S3 provider failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
}
func exportSyncProviderWebDAV(c *gin.Context) { func exportSyncProviderWebDAV(c *gin.Context) {
ret := gulu.Ret.NewResult() ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret) defer c.JSON(http.StatusOK, ret)
@ -72,6 +130,62 @@ func exportSyncProviderWebDAV(c *gin.Context) {
} }
} }
func importSyncProviderS3(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(200, ret)
form, err := c.MultipartForm()
if nil != err {
logging.LogErrorf("read upload file failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
files := form.File["file[]"]
if 1 != len(files) {
ret.Code = -1
ret.Msg = "invalid upload file"
return
}
f := files[0]
fh, err := f.Open()
if nil != err {
logging.LogErrorf("read upload file failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
data, err := io.ReadAll(fh)
fh.Close()
if nil != err {
logging.LogErrorf("read upload file failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
data = util.AESDecrypt(string(data))
data, _ = hex.DecodeString(string(data))
s3 := &conf.S3{}
if err = gulu.JSON.UnmarshalJSON(data, s3); nil != err {
logging.LogErrorf("import S3 provider failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
err = model.SetSyncProviderS3(s3)
if nil != err {
logging.LogErrorf("import S3 provider failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
}
func exportSyncProviderS3(c *gin.Context) { func exportSyncProviderS3(c *gin.Context) {
ret := gulu.Ret.NewResult() ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret) defer c.JSON(http.StatusOK, ret)