diff --git a/kernel/api/repo.go b/kernel/api/repo.go index d5e5ad251..738f6b9b7 100644 --- a/kernel/api/repo.go +++ b/kernel/api/repo.go @@ -17,8 +17,8 @@ package api import ( + "encoding/hex" "net/http" - "os" "time" "github.com/88250/gulu" @@ -44,21 +44,31 @@ func indexRepo(c *gin.Context) { } } +func importRepoKey(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + util.PushMsg(model.Conf.Language(136), 1000*7) + hexKey := arg["key"].(string) + if err := model.IndexRepo(hexKey); nil != err { + ret.Code = -1 + ret.Msg = model.Conf.Language(137) + return + } + time.Sleep(1 * time.Second) + util.PushMsg(model.Conf.Language(138), 3000) +} + func initRepoKey(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) util.PushMsg(model.Conf.Language(136), 1000*7) - if err := os.RemoveAll(model.Conf.Repo.GetSaveDir()); nil != err { - ret.Code = -1 - ret.Msg = err.Error() - return - } - if err := os.MkdirAll(model.Conf.Repo.GetSaveDir(), 0755); nil != err { - ret.Code = -1 - ret.Msg = err.Error() - return - } if err := model.InitRepoKey(); nil != err { ret.Code = -1 ret.Msg = model.Conf.Language(137) @@ -67,4 +77,8 @@ func initRepoKey(c *gin.Context) { time.Sleep(1 * time.Second) util.PushMsg(model.Conf.Language(138), 3000) + + ret.Data = map[string]interface{}{ + "key": hex.EncodeToString(model.Conf.Repo.Key), + } } diff --git a/kernel/api/router.go b/kernel/api/router.go index f2f8c557e..dc58d9be2 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -247,6 +247,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/bazaar/getBazaarPackageREAME", model.CheckAuth, getBazaarPackageREAME) ginServer.Handle("POST", "/api/repo/initRepoKey", model.CheckAuth, initRepoKey) + ginServer.Handle("POST", "/api/repo/importRepoKey", model.CheckAuth, importRepoKey) ginServer.Handle("POST", "/api/repo/indexRepo", model.CheckAuth, indexRepo) ginServer.Handle("POST", "/api/notification/pushMsg", model.CheckAuth, pushMsg) diff --git a/kernel/model/repository.go b/kernel/model/repository.go index 05ad15afe..a145b0bf4 100644 --- a/kernel/model/repository.go +++ b/kernel/model/repository.go @@ -18,14 +18,40 @@ package model import ( "crypto/rand" + "encoding/hex" "errors" + "os" "github.com/siyuan-note/dejavu" "github.com/siyuan-note/encryption" "github.com/siyuan-note/siyuan/kernel/util" ) +func ImportRepoKey(hexKey string) (err error) { + key, err := hex.DecodeString(hexKey) + if nil != err { + return + } + Conf.Repo.Key = key + Conf.Save() + + if err = os.RemoveAll(Conf.Repo.GetSaveDir()); nil != err { + return + } + if err = os.MkdirAll(Conf.Repo.GetSaveDir(), 0755); nil != err { + return + } + return +} + func InitRepoKey() (err error) { + if err = os.RemoveAll(Conf.Repo.GetSaveDir()); nil != err { + return + } + if err = os.MkdirAll(Conf.Repo.GetSaveDir(), 0755); nil != err { + return + } + randomBytes := make([]byte, 16) _, err = rand.Read(randomBytes) if nil != err {