1
0
mirror of https://github.com/fumiama/go-registry.git synced 2026-06-27 06:10:24 +08:00
This commit is contained in:
源文雨
2022-11-21 18:32:56 +08:00
parent 6aef424571
commit 814a327d0b
2 changed files with 75 additions and 8 deletions

66
reg.go
View File

@@ -6,6 +6,7 @@ import (
"errors"
"io"
"net"
"os"
"strconv"
"sync"
"time"
@@ -32,12 +33,13 @@ type Regedit struct {
mu sync.Mutex
conn net.Conn
addr string
stor string
tp tea.TEA
ts *tea.TEA
seq byte
}
func NewRegedit(addr, pwd, sps string) *Regedit {
func NewRegedit(addr, stor, pwd, sps string) *Regedit {
var tp, ts [16]byte
if len(pwd) > 15 {
pwd = pwd[:15]
@@ -48,16 +50,32 @@ func NewRegedit(addr, pwd, sps string) *Regedit {
copy(tp[:], pwd)
copy(ts[:], sps)
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
if len(pwd) > 15 {
pwd = pwd[:15]
}
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) {
@@ -176,7 +194,45 @@ func (r *Regedit) Cat() (*Storage, error) {
s.m[BytesToString(sp.Target[0])] = BytesToString(sp.Target[1])
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) {

View File

@@ -5,7 +5,7 @@ import (
)
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()
if err != nil {
t.Fatal(err)
@@ -64,15 +64,26 @@ func TestReg(t *testing.T) {
if err != nil {
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) {
r := NewRegedit("reilia.fumiama.top:32664", "fumiama", "--")
r := NewRegedit("reilia.fumiama.top:32664", "storbin.test", "fumiama", "--")
err := r.Connect()
if err != nil {
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 {
t.Fatal(err)
}