mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-17 15:10:12 +01:00
🎨 Support exporting/importing S3 and WebDAV configurations https://github.com/siyuan-note/siyuan/issues/9566
This commit is contained in:
parent
8ce4c7987b
commit
cba9f59cfd
2 changed files with 116 additions and 0 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue