Forráskód Böngészése

:art: 数据快照密钥初始化 https://github.com/siyuan-note/siyuan/issues/5173

Liang Ding 3 éve
szülő
commit
851483c5d2
3 módosított fájl, 49 hozzáadás és 8 törlés
  1. 22 8
      kernel/api/repo.go
  2. 1 0
      kernel/api/router.go
  3. 26 0
      kernel/model/repository.go

+ 22 - 8
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 initRepoKey(c *gin.Context) {
+func importRepoKey(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()
+	arg, ok := util.JsonArg(c, ret)
+	if !ok {
 		return
 	}
-	if err := os.MkdirAll(model.Conf.Repo.GetSaveDir(), 0755); nil != err {
+
+	util.PushMsg(model.Conf.Language(136), 1000*7)
+	hexKey := arg["key"].(string)
+	if err := model.IndexRepo(hexKey); nil != err {
 		ret.Code = -1
-		ret.Msg = err.Error()
+		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 := 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),
+	}
 }

+ 1 - 0
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)

+ 26 - 0
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 {