1
0
mirror of https://github.com/fumiama/go-registry.git synced 2026-06-24 04:30:28 +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" "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) {

View File

@@ -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)
} }