mirror of
https://github.com/logos-messaging/logos-messaging-go.git
synced 2026-01-08 00:43:10 +00:00
fix: encode waku message payloads in base64
This commit is contained in:
parent
78520e9280
commit
c3be19f922
@ -123,9 +123,7 @@ func (f *FilterService) GetV1Messages(req *http.Request, args *ContentTopicArgs,
|
||||
return fmt.Errorf("topic %s not subscribed", args.ContentTopic)
|
||||
}
|
||||
|
||||
for i := range f.messages[args.ContentTopic] {
|
||||
*reply = append(*reply, ProtoWakuMessageToRPCWakuMessage(f.messages[args.ContentTopic][i]))
|
||||
}
|
||||
*reply = f.messages[args.ContentTopic]
|
||||
|
||||
f.messages[args.ContentTopic] = make([]*pb.WakuMessage, 0)
|
||||
return nil
|
||||
|
||||
@ -38,15 +38,15 @@ type KeyPairReply struct {
|
||||
}
|
||||
|
||||
type SymmetricMessageArgs struct {
|
||||
Topic string `json:"topic"`
|
||||
Message RPCWakuMessage `json:"message"`
|
||||
SymKey string `json:"symkey"`
|
||||
Topic string `json:"topic"`
|
||||
Message *pb.WakuMessage `json:"message"`
|
||||
SymKey string `json:"symkey"`
|
||||
}
|
||||
|
||||
type AsymmetricMessageArgs struct {
|
||||
Topic string `json:"topic"`
|
||||
Message RPCWakuMessage `json:"message"`
|
||||
PublicKey string `json:"publicKey"`
|
||||
Topic string `json:"topic"`
|
||||
Message *pb.WakuMessage `json:"message"`
|
||||
PublicKey string `json:"publicKey"`
|
||||
}
|
||||
|
||||
type SymmetricMessagesArgs struct {
|
||||
@ -125,7 +125,7 @@ func (p *PrivateService) PostV1SymmetricMessage(req *http.Request, args *Symmetr
|
||||
keyInfo.Kind = payload.Symmetric
|
||||
keyInfo.SymKey = symKeyBytes
|
||||
|
||||
msg := args.Message.toProto()
|
||||
msg := args.Message
|
||||
msg.Version = 1
|
||||
|
||||
err = payload.EncodeWakuMessage(msg, keyInfo)
|
||||
@ -163,7 +163,7 @@ func (p *PrivateService) PostV1AsymmetricMessage(req *http.Request, args *Asymme
|
||||
|
||||
keyInfo.PubKey = *pubKey
|
||||
|
||||
msg := args.Message.toProto()
|
||||
msg := args.Message
|
||||
msg.Version = 1
|
||||
|
||||
err = payload.EncodeWakuMessage(msg, keyInfo)
|
||||
@ -214,9 +214,7 @@ func (p *PrivateService) GetV1SymmetricMessages(req *http.Request, args *Symmetr
|
||||
decodedMessages = append(decodedMessages, msg)
|
||||
}
|
||||
|
||||
for i := range decodedMessages {
|
||||
*reply = append(*reply, ProtoWakuMessageToRPCWakuMessage(decodedMessages[i]))
|
||||
}
|
||||
*reply = decodedMessages
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -250,9 +248,7 @@ func (p *PrivateService) GetV1AsymmetricMessages(req *http.Request, args *Asymme
|
||||
decodedMessages = append(decodedMessages, msg)
|
||||
}
|
||||
|
||||
for i := range decodedMessages {
|
||||
*reply = append(*reply, ProtoWakuMessageToRPCWakuMessage(decodedMessages[i]))
|
||||
}
|
||||
*reply = decodedMessages
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ import (
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/waku-org/go-waku/waku/v2/node"
|
||||
"github.com/waku-org/go-waku/waku/v2/protocol/pb"
|
||||
"github.com/waku-org/go-waku/waku/v2/utils"
|
||||
)
|
||||
|
||||
@ -59,7 +60,7 @@ func TestPostV1SymmetricMessage(t *testing.T) {
|
||||
makeRequest(t),
|
||||
&SymmetricMessageArgs{
|
||||
Topic: "test",
|
||||
Message: RPCWakuMessage{Payload: []byte("test")},
|
||||
Message: &pb.WakuMessage{Payload: []byte("test")},
|
||||
SymKey: "0x1122334455667788991011223344556677889910112233445566778899101122",
|
||||
},
|
||||
&reply,
|
||||
@ -77,7 +78,7 @@ func TestPostV1AsymmetricMessage(t *testing.T) {
|
||||
makeRequest(t),
|
||||
&AsymmetricMessageArgs{
|
||||
Topic: "test",
|
||||
Message: RPCWakuMessage{Payload: []byte("test")},
|
||||
Message: &pb.WakuMessage{Payload: []byte("test")},
|
||||
PublicKey: "0x045ded6a56c88173e87a88c55b96956964b1bd3351b5fcb70950a4902fbc1bc0ceabb0ac846c3a4b8f2f6024c0e19f0a7f6a4865035187de5463f34012304fc7c5",
|
||||
},
|
||||
&reply,
|
||||
@ -100,7 +101,7 @@ func TestGetV1SymmetricMessages(t *testing.T) {
|
||||
makeRequest(t),
|
||||
&SymmetricMessageArgs{
|
||||
Topic: "test",
|
||||
Message: RPCWakuMessage{Payload: []byte("test")},
|
||||
Message: &pb.WakuMessage{Payload: []byte("test")},
|
||||
SymKey: "0x1122334455667788991011223344556677889910112233445566778899101122",
|
||||
},
|
||||
&reply,
|
||||
@ -140,7 +141,7 @@ func TestGetV1AsymmetricMessages(t *testing.T) {
|
||||
makeRequest(t),
|
||||
&AsymmetricMessageArgs{
|
||||
Topic: "test",
|
||||
Message: RPCWakuMessage{Payload: []byte("test")},
|
||||
Message: &pb.WakuMessage{Payload: []byte("test")},
|
||||
PublicKey: hexutil.Encode(crypto.FromECDSAPub(&prvKey.PublicKey)),
|
||||
},
|
||||
&reply,
|
||||
|
||||
@ -25,8 +25,8 @@ type RelayService struct {
|
||||
}
|
||||
|
||||
type RelayMessageArgs struct {
|
||||
Topic string `json:"topic,omitempty"`
|
||||
Message RPCWakuRelayMessage `json:"message,omitempty"`
|
||||
Topic string `json:"topic,omitempty"`
|
||||
Message *pb.WakuMessage `json:"message,omitempty"`
|
||||
}
|
||||
|
||||
type TopicsArgs struct {
|
||||
@ -85,12 +85,10 @@ func (r *RelayService) Stop() {
|
||||
func (r *RelayService) PostV1Message(req *http.Request, args *RelayMessageArgs, reply *SuccessReply) error {
|
||||
var err error
|
||||
|
||||
msg := args.Message.toProto()
|
||||
|
||||
if args.Topic == "" {
|
||||
_, err = r.node.Relay().Publish(req.Context(), msg)
|
||||
_, err = r.node.Relay().Publish(req.Context(), args.Message)
|
||||
} else {
|
||||
_, err = r.node.Relay().PublishToTopic(req.Context(), msg, args.Topic)
|
||||
_, err = r.node.Relay().PublishToTopic(req.Context(), args.Message, args.Topic)
|
||||
}
|
||||
if err != nil {
|
||||
r.log.Error("publishing message", zap.Error(err))
|
||||
@ -151,9 +149,7 @@ func (r *RelayService) GetV1Messages(req *http.Request, args *TopicArgs, reply *
|
||||
return fmt.Errorf("topic %s not subscribed", args.Topic)
|
||||
}
|
||||
|
||||
for i := range r.messages[args.Topic] {
|
||||
*reply = append(*reply, ProtoWakuMessageToRPCWakuRelayMessage(r.messages[args.Topic][i]))
|
||||
}
|
||||
*reply = r.messages[args.Topic]
|
||||
|
||||
r.messages[args.Topic] = make([]*pb.WakuMessage, 0)
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@ import (
|
||||
"github.com/multiformats/go-multiaddr"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/waku-org/go-waku/waku/v2/node"
|
||||
"github.com/waku-org/go-waku/waku/v2/protocol/pb"
|
||||
"github.com/waku-org/go-waku/waku/v2/utils"
|
||||
)
|
||||
|
||||
@ -27,9 +28,18 @@ func TestPostV1Message(t *testing.T) {
|
||||
|
||||
d := makeRelayService(t)
|
||||
|
||||
msg := &pb.WakuMessage{
|
||||
Payload: []byte{1, 2, 3},
|
||||
ContentTopic: "abc",
|
||||
Version: 0,
|
||||
Timestamp: utils.GetUnixEpoch(),
|
||||
}
|
||||
|
||||
err := d.PostV1Message(
|
||||
makeRequest(t),
|
||||
&RelayMessageArgs{},
|
||||
&RelayMessageArgs{
|
||||
Message: msg,
|
||||
},
|
||||
&reply,
|
||||
)
|
||||
require.NoError(t, err)
|
||||
@ -100,7 +110,7 @@ func TestRelayGetV1Messages(t *testing.T) {
|
||||
makeRequest(t),
|
||||
&RelayMessageArgs{
|
||||
Topic: "test",
|
||||
Message: RPCWakuRelayMessage{
|
||||
Message: &pb.WakuMessage{
|
||||
Payload: []byte("test"),
|
||||
},
|
||||
},
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
package rpc
|
||||
|
||||
import "github.com/waku-org/go-waku/waku/v2/protocol/pb"
|
||||
|
||||
type SuccessReply = bool
|
||||
|
||||
type Empty struct {
|
||||
}
|
||||
|
||||
type MessagesReply = []*RPCWakuMessage
|
||||
type MessagesReply = []*pb.WakuMessage
|
||||
|
||||
type RelayMessagesReply = []*RPCWakuRelayMessage
|
||||
type RelayMessagesReply = []*pb.WakuMessage
|
||||
|
||||
@ -33,7 +33,7 @@ type StoreMessagesArgs struct {
|
||||
}
|
||||
|
||||
type StoreMessagesReply struct {
|
||||
Messages []RPCWakuMessage `json:"messages,omitempty"`
|
||||
Messages []*pb.WakuMessage `json:"messages,omitempty"`
|
||||
PagingInfo StorePagingOptions `json:"pagingInfo,omitempty"`
|
||||
Error string `json:"error,omitempty"`
|
||||
}
|
||||
@ -61,10 +61,7 @@ func (s *StoreService) GetV1Messages(req *http.Request, args *StoreMessagesArgs,
|
||||
return nil
|
||||
}
|
||||
|
||||
reply.Messages = make([]RPCWakuMessage, len(res.Messages))
|
||||
for i := range res.Messages {
|
||||
reply.Messages[i] = *ProtoWakuMessageToRPCWakuMessage(res.Messages[i])
|
||||
}
|
||||
reply.Messages = res.Messages
|
||||
|
||||
reply.PagingInfo = StorePagingOptions{
|
||||
PageSize: args.PagingOptions.PageSize,
|
||||
|
||||
@ -1,199 +0,0 @@
|
||||
package rpc
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/waku-org/go-waku/waku/v2/protocol/pb"
|
||||
"github.com/waku-org/go-waku/waku/v2/utils"
|
||||
)
|
||||
|
||||
// HexBytes is marshalled to a hex string
|
||||
type HexBytes []byte
|
||||
|
||||
// ByteArray is marshalled to a uint8 array
|
||||
type ByteArray []byte
|
||||
|
||||
type RateLimitProof struct {
|
||||
Proof HexBytes `json:"proof,omitempty"`
|
||||
MerkleRoot HexBytes `json:"merkle_root,omitempty"`
|
||||
Epoch HexBytes `json:"epoch,omitempty"`
|
||||
ShareX HexBytes `json:"share_x,omitempty"`
|
||||
ShareY HexBytes `json:"share_y,omitempty"`
|
||||
Nullifier HexBytes `json:"nullifier,omitempty"`
|
||||
RlnIdentifier HexBytes `json:"rln_identifier,omitempty"`
|
||||
}
|
||||
|
||||
type RPCWakuMessage struct {
|
||||
Payload ByteArray `json:"payload,omitempty"`
|
||||
ContentTopic string `json:"contentTopic,omitempty"`
|
||||
Version uint32 `json:"version"`
|
||||
Timestamp int64 `json:"timestamp,omitempty"`
|
||||
RateLimitProof *RateLimitProof `json:"rateLimitProof,omitempty"`
|
||||
}
|
||||
|
||||
type RPCWakuRelayMessage struct {
|
||||
Payload HexBytes `json:"payload,omitempty"`
|
||||
ContentTopic string `json:"contentTopic,omitempty"`
|
||||
Timestamp int64 `json:"timestamp,omitempty"`
|
||||
RateLimitProof *RateLimitProof `json:"rateLimitProof,omitempty"`
|
||||
Version uint32 `json:"version"`
|
||||
}
|
||||
|
||||
func ProtoWakuMessageToRPCWakuMessage(input *pb.WakuMessage) *RPCWakuMessage {
|
||||
if input == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
rpcWakuMsg := &RPCWakuMessage{
|
||||
Payload: input.Payload,
|
||||
ContentTopic: input.ContentTopic,
|
||||
Version: input.Version,
|
||||
Timestamp: input.Timestamp,
|
||||
}
|
||||
|
||||
if input.RateLimitProof != nil {
|
||||
rpcWakuMsg.RateLimitProof = &RateLimitProof{
|
||||
Proof: input.RateLimitProof.Proof,
|
||||
MerkleRoot: input.RateLimitProof.MerkleRoot,
|
||||
Epoch: input.RateLimitProof.Epoch,
|
||||
ShareX: input.RateLimitProof.ShareX,
|
||||
ShareY: input.RateLimitProof.ShareY,
|
||||
Nullifier: input.RateLimitProof.Nullifier,
|
||||
RlnIdentifier: input.RateLimitProof.RlnIdentifier,
|
||||
}
|
||||
}
|
||||
|
||||
return rpcWakuMsg
|
||||
}
|
||||
|
||||
func (r *RPCWakuMessage) toProto() *pb.WakuMessage {
|
||||
if r == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
msg := &pb.WakuMessage{
|
||||
Payload: r.Payload,
|
||||
ContentTopic: r.ContentTopic,
|
||||
Version: r.Version,
|
||||
Timestamp: r.Timestamp,
|
||||
}
|
||||
|
||||
if r.RateLimitProof != nil {
|
||||
msg.RateLimitProof = &pb.RateLimitProof{
|
||||
Proof: r.RateLimitProof.Proof,
|
||||
MerkleRoot: r.RateLimitProof.MerkleRoot,
|
||||
Epoch: r.RateLimitProof.Epoch,
|
||||
ShareX: r.RateLimitProof.ShareX,
|
||||
ShareY: r.RateLimitProof.ShareY,
|
||||
Nullifier: r.RateLimitProof.Nullifier,
|
||||
RlnIdentifier: r.RateLimitProof.RlnIdentifier,
|
||||
}
|
||||
}
|
||||
|
||||
return msg
|
||||
}
|
||||
|
||||
func (u HexBytes) MarshalJSON() ([]byte, error) {
|
||||
var result string
|
||||
if u == nil {
|
||||
result = "null"
|
||||
} else {
|
||||
result = strings.Join(strings.Fields(fmt.Sprintf("%d", u)), ",")
|
||||
}
|
||||
return []byte(result), nil
|
||||
}
|
||||
|
||||
func (h *HexBytes) UnmarshalText(b []byte) error {
|
||||
hexString := ""
|
||||
if b != nil {
|
||||
hexString = string(b)
|
||||
}
|
||||
|
||||
decoded, err := utils.DecodeHexString(hexString)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*h = decoded
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func ProtoWakuMessageToRPCWakuRelayMessage(input *pb.WakuMessage) *RPCWakuRelayMessage {
|
||||
if input == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
rpcMsg := &RPCWakuRelayMessage{
|
||||
Payload: input.Payload,
|
||||
ContentTopic: input.ContentTopic,
|
||||
Timestamp: input.Timestamp,
|
||||
}
|
||||
|
||||
if input.RateLimitProof != nil {
|
||||
rpcMsg.RateLimitProof = &RateLimitProof{
|
||||
Proof: input.RateLimitProof.Proof,
|
||||
MerkleRoot: input.RateLimitProof.MerkleRoot,
|
||||
Epoch: input.RateLimitProof.Epoch,
|
||||
ShareX: input.RateLimitProof.ShareX,
|
||||
ShareY: input.RateLimitProof.ShareY,
|
||||
Nullifier: input.RateLimitProof.Nullifier,
|
||||
RlnIdentifier: input.RateLimitProof.RlnIdentifier,
|
||||
}
|
||||
}
|
||||
|
||||
return rpcMsg
|
||||
}
|
||||
|
||||
func (r *RPCWakuRelayMessage) toProto() *pb.WakuMessage {
|
||||
if r == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
msg := &pb.WakuMessage{
|
||||
Payload: r.Payload,
|
||||
ContentTopic: r.ContentTopic,
|
||||
Timestamp: r.Timestamp,
|
||||
Version: r.Version,
|
||||
}
|
||||
|
||||
if r.RateLimitProof != nil {
|
||||
msg.RateLimitProof = &pb.RateLimitProof{
|
||||
Proof: r.RateLimitProof.Proof,
|
||||
MerkleRoot: r.RateLimitProof.MerkleRoot,
|
||||
Epoch: r.RateLimitProof.Epoch,
|
||||
ShareX: r.RateLimitProof.ShareX,
|
||||
ShareY: r.RateLimitProof.ShareY,
|
||||
Nullifier: r.RateLimitProof.Nullifier,
|
||||
RlnIdentifier: r.RateLimitProof.RlnIdentifier,
|
||||
}
|
||||
}
|
||||
|
||||
return msg
|
||||
}
|
||||
|
||||
func (h ByteArray) MarshalText() ([]byte, error) {
|
||||
if h == nil {
|
||||
return []byte{}, nil
|
||||
}
|
||||
|
||||
return []byte(hex.EncodeToString(h)), nil
|
||||
}
|
||||
|
||||
func (h *ByteArray) UnmarshalText(b []byte) error {
|
||||
hexString := ""
|
||||
if b != nil {
|
||||
hexString = string(b)
|
||||
}
|
||||
|
||||
decoded, err := utils.DecodeHexString(hexString)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*h = decoded
|
||||
|
||||
return nil
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user