libs5-go/protocol/registry_query.go

87 lines
1.7 KiB
Go
Raw Permalink Normal View History

2024-01-10 11:21:03 +00:00
package protocol
import (
"git.lumeweb.com/LumeWeb/libs5-go/encoding"
"git.lumeweb.com/LumeWeb/libs5-go/internal/bases"
2024-01-10 11:21:03 +00:00
"git.lumeweb.com/LumeWeb/libs5-go/types"
"github.com/vmihailenco/msgpack/v5"
"go.uber.org/zap"
2024-01-10 11:21:03 +00:00
)
2024-01-30 03:25:21 +00:00
var _ IncomingMessage = (*RegistryQuery)(nil)
var _ EncodeableMessage = (*RegistryQuery)(nil)
2024-01-10 11:21:03 +00:00
type RegistryQuery struct {
pk []byte
2024-01-30 03:25:21 +00:00
HandshakeRequirement
2024-01-10 11:21:03 +00:00
}
func NewEmptyRegistryQuery() *RegistryQuery {
rq := &RegistryQuery{}
rq.SetRequiresHandshake(true)
return rq
2024-01-10 11:21:03 +00:00
}
func NewRegistryQuery(pk []byte) *RegistryQuery {
return &RegistryQuery{pk: pk}
}
func (s *RegistryQuery) EncodeMsgpack(enc *msgpack.Encoder) error {
err := enc.EncodeInt(int64(types.ProtocolMethodRegistryQuery))
if err != nil {
return err
}
err = enc.EncodeBytes(s.pk)
if err != nil {
return err
}
return nil
}
2024-01-30 03:25:21 +00:00
func (s *RegistryQuery) DecodeMessage(dec *msgpack.Decoder, message IncomingMessageData) error {
2024-01-10 11:21:03 +00:00
pk, err := dec.DecodeBytes()
if err != nil {
return err
}
s.pk = pk
return nil
}
2024-01-30 03:25:21 +00:00
func (s *RegistryQuery) HandleMessage(message IncomingMessageData) error {
mediator := message.Mediator
peer := message.Peer
entry, err := encoding.CIDFromRegistryPublicKey(s.pk)
if err != nil {
return err
}
pid, err := peer.Id().ToString()
if err != nil {
return err
}
b64, err := bases.ToBase64Url(s.pk)
if err != nil {
return err
}
message.Logger.Debug("Handling registry entry query request", zap.Any("entryCID", entry), zap.Any("entryBase64", b64), zap.Any("peer", pid))
sre, err := mediator.RegistryGet(s.pk)
2024-01-10 11:21:03 +00:00
if err != nil {
return err
}
if sre != nil {
err := peer.SendMessage(MarshalSignedRegistryEntry(sre))
if err != nil {
return err
}
}
return nil
}