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

This commit is contained in:
Daniel 2023-11-01 09:58:32 +08:00
parent c72a4ead7e
commit 8ce4c7987b
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 90 additions and 0 deletions

View file

@ -218,6 +218,8 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/sync/performBootSync", model.CheckAuth, model.CheckReadonly, performBootSync) ginServer.Handle("POST", "/api/sync/performBootSync", model.CheckAuth, model.CheckReadonly, performBootSync)
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/exportSyncProviderWebDAV", model.CheckAuth, exportSyncProviderWebDAV)
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,11 @@
package api package api
import ( import (
"github.com/siyuan-note/logging"
"net/http" "net/http"
"os"
"path/filepath"
"time"
"github.com/88250/gulu" "github.com/88250/gulu"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@ -26,6 +30,90 @@ import (
"github.com/siyuan-note/siyuan/kernel/util" "github.com/siyuan-note/siyuan/kernel/util"
) )
func exportSyncProviderWebDAV(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
name := "siyuan-webdav-" + time.Now().Format("20060102150405") + ".json"
tmpDir := filepath.Join(util.TempDir, "export")
if err := os.MkdirAll(tmpDir, 0755); nil != err {
logging.LogErrorf("export WebDAV provider failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
webdav := model.Conf.Sync.WebDAV
if nil == webdav {
webdav = &conf.WebDAV{}
}
data, err := gulu.JSON.MarshalJSON(model.Conf.Sync.WebDAV)
if nil != err {
logging.LogErrorf("export WebDAV provider failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
dataStr := util.AESEncrypt(string(data))
tmp := filepath.Join(tmpDir, name)
if err = os.WriteFile(tmp, []byte(dataStr), 0644); nil != err {
logging.LogErrorf("export WebDAV provider failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
zipPath := "/export/" + name
ret.Data = map[string]interface{}{
"name": name,
"zip": zipPath,
}
}
func exportSyncProviderS3(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
name := "siyuan-s3-" + time.Now().Format("20060102150405") + ".json"
tmpDir := filepath.Join(util.TempDir, "export")
if err := os.MkdirAll(tmpDir, 0755); nil != err {
logging.LogErrorf("export S3 provider failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
s3 := model.Conf.Sync.S3
if nil == s3 {
s3 = &conf.S3{}
}
data, err := gulu.JSON.MarshalJSON(model.Conf.Sync.S3)
if nil != err {
logging.LogErrorf("export S3 provider failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
dataStr := util.AESEncrypt(string(data))
tmp := filepath.Join(tmpDir, name)
if err = os.WriteFile(tmp, []byte(dataStr), 0644); nil != err {
logging.LogErrorf("export S3 provider failed: %s", err)
ret.Code = -1
ret.Msg = err.Error()
return
}
zipPath := "/export/" + name
ret.Data = map[string]interface{}{
"name": name,
"zip": zipPath,
}
}
func getSyncInfo(c *gin.Context) { func getSyncInfo(c *gin.Context) {
ret := gulu.Ret.NewResult() ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret) defer c.JSON(http.StatusOK, ret)