mirror of
https://github.com/fumiama/go-registry.git
synced 2026-06-24 04:30:28 +08:00
add Load
This commit is contained in:
66
reg.go
66
reg.go
@@ -6,6 +6,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@@ -32,12 +33,13 @@ type Regedit struct {
|
|||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
conn net.Conn
|
conn net.Conn
|
||||||
addr string
|
addr string
|
||||||
|
stor string
|
||||||
tp tea.TEA
|
tp tea.TEA
|
||||||
ts *tea.TEA
|
ts *tea.TEA
|
||||||
seq byte
|
seq byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRegedit(addr, pwd, sps string) *Regedit {
|
func NewRegedit(addr, stor, pwd, sps string) *Regedit {
|
||||||
var tp, ts [16]byte
|
var tp, ts [16]byte
|
||||||
if len(pwd) > 15 {
|
if len(pwd) > 15 {
|
||||||
pwd = pwd[:15]
|
pwd = pwd[:15]
|
||||||
@@ -48,16 +50,32 @@ func NewRegedit(addr, pwd, sps string) *Regedit {
|
|||||||
copy(tp[:], pwd)
|
copy(tp[:], pwd)
|
||||||
copy(ts[:], sps)
|
copy(ts[:], sps)
|
||||||
s := tea.NewTeaCipherLittleEndian(ts[:])
|
s := tea.NewTeaCipherLittleEndian(ts[:])
|
||||||
return &Regedit{addr: addr, tp: tea.NewTeaCipherLittleEndian(tp[:]), ts: &s}
|
f, err := os.Open(stor)
|
||||||
|
if err != nil {
|
||||||
|
f, err = os.Create(stor)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ = f.Close()
|
||||||
|
return &Regedit{addr: addr, stor: stor, tp: tea.NewTeaCipherLittleEndian(tp[:]), ts: &s}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRegReader(addr, pwd string) *Regedit {
|
func NewRegReader(addr, stor, pwd string) *Regedit {
|
||||||
var tp [16]byte
|
var tp [16]byte
|
||||||
if len(pwd) > 15 {
|
if len(pwd) > 15 {
|
||||||
pwd = pwd[:15]
|
pwd = pwd[:15]
|
||||||
}
|
}
|
||||||
copy(tp[:], pwd)
|
copy(tp[:], pwd)
|
||||||
return &Regedit{addr: addr, tp: tea.NewTeaCipherLittleEndian(tp[:])}
|
f, err := os.Open(stor)
|
||||||
|
if err != nil {
|
||||||
|
f, err = os.Create(stor)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ = f.Close()
|
||||||
|
return &Regedit{addr: addr, stor: stor, tp: tea.NewTeaCipherLittleEndian(tp[:])}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Regedit) Connect() (err error) {
|
func (r *Regedit) Connect() (err error) {
|
||||||
@@ -176,7 +194,45 @@ func (r *Regedit) Cat() (*Storage, error) {
|
|||||||
s.m[BytesToString(sp.Target[0])] = BytesToString(sp.Target[1])
|
s.m[BytesToString(sp.Target[0])] = BytesToString(sp.Target[1])
|
||||||
i += int(sp.RealLen)
|
i += int(sp.RealLen)
|
||||||
}
|
}
|
||||||
return s, nil
|
f, err := os.Create(r.stor)
|
||||||
|
if err != nil {
|
||||||
|
return s, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
_, err = f.Write(data)
|
||||||
|
return s, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Regedit) Load() (*Storage, error) {
|
||||||
|
data, err := os.ReadFile(r.stor)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
s := new(Storage)
|
||||||
|
s.m = make(map[string]string, 256)
|
||||||
|
s.Md5 = md5.Sum(data)
|
||||||
|
rd := bytes.NewReader(data)
|
||||||
|
for i := 0; i < len(data); {
|
||||||
|
sp, err := spb.NewSimplePB(rd)
|
||||||
|
if err == io.EOF {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(sp.Target) <= 1 {
|
||||||
|
return nil, ErrInvalidCatData
|
||||||
|
}
|
||||||
|
s.m[BytesToString(sp.Target[0])] = BytesToString(sp.Target[1])
|
||||||
|
i += int(sp.RealLen)
|
||||||
|
}
|
||||||
|
f, err := os.Create(r.stor)
|
||||||
|
if err != nil {
|
||||||
|
return s, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
_, err = f.Write(data)
|
||||||
|
return s, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Regedit) IsMd5Equal(m [md5.Size]byte) (bool, error) {
|
func (r *Regedit) IsMd5Equal(m [md5.Size]byte) (bool, error) {
|
||||||
|
|||||||
17
reg_test.go
17
reg_test.go
@@ -5,7 +5,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestReg(t *testing.T) {
|
func TestReg(t *testing.T) {
|
||||||
r := NewRegedit("127.0.0.1:8888", "testpwd", "testsps")
|
r := NewRegedit("127.0.0.1:8888", "storbin.test", "testpwd", "testsps")
|
||||||
err := r.Connect()
|
err := r.Connect()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@@ -64,15 +64,26 @@ func TestReg(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
s, err = r.Load()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
v, err = s.Get("test")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if v != "测试" {
|
||||||
|
t.Fatal("invalid test key value in store")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPush(t *testing.T) {
|
func TestPush(t *testing.T) {
|
||||||
r := NewRegedit("reilia.fumiama.top:32664", "fumiama", "--")
|
r := NewRegedit("reilia.fumiama.top:32664", "storbin.test", "fumiama", "--")
|
||||||
err := r.Connect()
|
err := r.Connect()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
err = r.Set("ZeroBot-Plugin/kanban", "QQ群:1048452984, 开发群:752669987,\n进阶开发群:705749886. 禁止用于商业用途.")
|
err = r.Set("ZeroBot-Plugin/kanban", "\t\tQQ群:1048452984, 2群:915103207\n\t 开发群:752669987, 进阶开发群:705749886\n\n\t\t\t禁止用于商业用途")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user