diff --git a/kernel/api/router.go b/kernel/api/router.go index 379fd3027..7b3effde4 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -184,6 +184,9 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/sync/setSyncEnable", model.CheckAuth, setSyncEnable) ginServer.Handle("POST", "/api/sync/setSyncGenerateConflictDoc", model.CheckAuth, setSyncGenerateConflictDoc) ginServer.Handle("POST", "/api/sync/setSyncMode", model.CheckAuth, setSyncMode) + ginServer.Handle("POST", "/api/sync/setSyncProvider", model.CheckAuth, setSyncProvider) + ginServer.Handle("POST", "/api/sync/setSyncProviderS3", model.CheckAuth, setSyncProviderS3) + ginServer.Handle("POST", "/api/sync/setSyncProviderWebDAV", model.CheckAuth, setSyncProviderWebDAV) ginServer.Handle("POST", "/api/sync/setCloudSyncDir", model.CheckAuth, setCloudSyncDir) ginServer.Handle("POST", "/api/sync/createCloudSyncDir", model.CheckAuth, model.CheckReadonly, createCloudSyncDir) ginServer.Handle("POST", "/api/sync/removeCloudSyncDir", model.CheckAuth, model.CheckReadonly, removeCloudSyncDir) diff --git a/kernel/api/sync.go b/kernel/api/sync.go index 81a27fbca..1e3a644fd 100644 --- a/kernel/api/sync.go +++ b/kernel/api/sync.go @@ -21,6 +21,7 @@ import ( "github.com/88250/gulu" "github.com/gin-gonic/gin" + "github.com/siyuan-note/siyuan/kernel/conf" "github.com/siyuan-note/siyuan/kernel/model" "github.com/siyuan-note/siyuan/kernel/util" ) @@ -159,6 +160,95 @@ func setSyncMode(c *gin.Context) { } } +func setSyncProvider(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + provider := int(arg["provider"].(float64)) + err := model.SetSyncProvider(provider) + if nil != err { + ret.Code = 1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 5000} + return + } +} + +func setSyncProviderS3(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + s3Arg := arg["s3"].(interface{}) + data, err := gulu.JSON.MarshalJSON(s3Arg) + if nil != err { + ret.Code = 1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 5000} + return + } + + s3 := &conf.S3{} + if err = gulu.JSON.UnmarshalJSON(data, s3); nil != err { + ret.Code = 1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 5000} + return + } + + err = model.SetSyncProviderS3(s3) + if nil != err { + ret.Code = 1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 5000} + return + } +} + +func setSyncProviderWebDAV(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + webdavArg := arg["webdav"].(interface{}) + data, err := gulu.JSON.MarshalJSON(webdavArg) + if nil != err { + ret.Code = 1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 5000} + return + } + + webdav := &conf.WebDAV{} + if err = gulu.JSON.UnmarshalJSON(data, webdav); nil != err { + ret.Code = 1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 5000} + return + } + + err = model.SetSyncProviderWebDAV(webdav) + if nil != err { + ret.Code = 1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 5000} + return + } +} + func setCloudSyncDir(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) diff --git a/kernel/model/sync.go b/kernel/model/sync.go index 8a1ee28dd..520effc9e 100644 --- a/kernel/model/sync.go +++ b/kernel/model/sync.go @@ -301,6 +301,33 @@ func SetSyncMode(mode int) (err error) { return } +func SetSyncProvider(provider int) (err error) { + syncLock.Lock() + defer syncLock.Unlock() + + Conf.Sync.Provider = provider + Conf.Save() + return +} + +func SetSyncProviderS3(s3 *conf.S3) (err error) { + syncLock.Lock() + defer syncLock.Unlock() + + Conf.Sync.S3 = s3 + Conf.Save() + return +} + +func SetSyncProviderWebDAV(webdav *conf.WebDAV) (err error) { + syncLock.Lock() + defer syncLock.Unlock() + + Conf.Sync.WebDAV = webdav + Conf.Save() + return +} + var syncLock = sync.Mutex{} func CreateCloudSyncDir(name string) (err error) {