mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-17 23:20:13 +01:00
🎨 支持通过密码短语派生数据仓库密钥 https://github.com/siyuan-note/siyuan/issues/5478
This commit is contained in:
parent
bd30383be5
commit
25d3985ed0
3 changed files with 58 additions and 0 deletions
|
|
@ -252,6 +252,28 @@ func importRepoKey(c *gin.Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func initRepoKeyFromPassphrase(c *gin.Context) {
|
||||||
|
ret := gulu.Ret.NewResult()
|
||||||
|
defer c.JSON(http.StatusOK, ret)
|
||||||
|
|
||||||
|
arg, ok := util.JsonArg(c, ret)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
pass := arg["pass"].(string)
|
||||||
|
if err := model.InitRepoKeyFromPassphrase(pass); nil != err {
|
||||||
|
ret.Code = -1
|
||||||
|
ret.Msg = fmt.Sprintf(model.Conf.Language(137), err)
|
||||||
|
ret.Data = map[string]interface{}{"closeTimeout": 5000}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ret.Data = map[string]interface{}{
|
||||||
|
"key": model.Conf.Repo.Key,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func initRepoKey(c *gin.Context) {
|
func initRepoKey(c *gin.Context) {
|
||||||
ret := gulu.Ret.NewResult()
|
ret := gulu.Ret.NewResult()
|
||||||
defer c.JSON(http.StatusOK, ret)
|
defer c.JSON(http.StatusOK, ret)
|
||||||
|
|
|
||||||
|
|
@ -244,6 +244,7 @@ func ServeAPI(ginServer *gin.Engine) {
|
||||||
ginServer.Handle("POST", "/api/bazaar/getBazaarPackageREAME", model.CheckAuth, getBazaarPackageREAME)
|
ginServer.Handle("POST", "/api/bazaar/getBazaarPackageREAME", model.CheckAuth, getBazaarPackageREAME)
|
||||||
|
|
||||||
ginServer.Handle("POST", "/api/repo/initRepoKey", model.CheckAuth, initRepoKey)
|
ginServer.Handle("POST", "/api/repo/initRepoKey", model.CheckAuth, initRepoKey)
|
||||||
|
ginServer.Handle("POST", "/api/repo/InitRepoKeyFromPassphrase", model.CheckAuth, initRepoKeyFromPassphrase)
|
||||||
ginServer.Handle("POST", "/api/repo/resetRepo", model.CheckAuth, resetRepo)
|
ginServer.Handle("POST", "/api/repo/resetRepo", model.CheckAuth, resetRepo)
|
||||||
ginServer.Handle("POST", "/api/repo/importRepoKey", model.CheckAuth, importRepoKey)
|
ginServer.Handle("POST", "/api/repo/importRepoKey", model.CheckAuth, importRepoKey)
|
||||||
ginServer.Handle("POST", "/api/repo/createSnapshot", model.CheckAuth, createSnapshot)
|
ginServer.Handle("POST", "/api/repo/createSnapshot", model.CheckAuth, createSnapshot)
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
|
"crypto/sha256"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
@ -125,6 +126,40 @@ func ResetRepo() (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func InitRepoKeyFromPassphrase(passphrase string) (err error) {
|
||||||
|
util.PushMsg(Conf.Language(136), 3000)
|
||||||
|
|
||||||
|
if err = os.RemoveAll(Conf.Repo.GetSaveDir()); nil != err {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = os.MkdirAll(Conf.Repo.GetSaveDir(), 0755); nil != err {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
passphrase = gulu.Str.RemoveInvisible(passphrase)
|
||||||
|
passphrase = strings.TrimSpace(passphrase)
|
||||||
|
if "" == passphrase {
|
||||||
|
return errors.New(Conf.Language(142))
|
||||||
|
}
|
||||||
|
|
||||||
|
salt := fmt.Sprintf("%x", sha256.Sum256([]byte(passphrase)))[:16]
|
||||||
|
key, err := encryption.KDF(passphrase, salt)
|
||||||
|
if nil != err {
|
||||||
|
logging.LogErrorf("init data repo key failed: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Conf.Repo.Key = key
|
||||||
|
Conf.Save()
|
||||||
|
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
util.PushMsg(Conf.Language(138), 3000)
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
if initErr := IndexRepo("[Init] Init data repo"); nil != initErr {
|
||||||
|
util.PushErrMsg(fmt.Sprintf(Conf.Language(140), initErr), 0)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func InitRepoKey() (err error) {
|
func InitRepoKey() (err error) {
|
||||||
util.PushMsg(Conf.Language(136), 3000)
|
util.PushMsg(Conf.Language(136), 3000)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue