-
Notifications
You must be signed in to change notification settings - Fork 42
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: validate protobuffers for lightpush and relay (#824)
- Loading branch information
1 parent
7415c5d
commit 83c8d18
Showing
9 changed files
with
206 additions
and
65 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package pb | ||
|
||
import "errors" | ||
|
||
var ( | ||
errMissingRequestID = errors.New("missing RequestId field") | ||
errMissingQuery = errors.New("missing Query field") | ||
errMissingMessage = errors.New("missing Message field") | ||
errMissingPubsubTopic = errors.New("missing PubsubTopic field") | ||
errRequestIDMismatch = errors.New("RequestID in response does not match request") | ||
errMissingResponse = errors.New("missing Response field") | ||
) | ||
|
||
func (x *PushRPC) ValidateRequest() error { | ||
if x.RequestId == "" { | ||
return errMissingRequestID | ||
} | ||
|
||
if x.Query == nil { | ||
return errMissingQuery | ||
} | ||
|
||
if x.Query.PubsubTopic == "" { | ||
return errMissingPubsubTopic | ||
} | ||
|
||
if x.Query.Message == nil { | ||
return errMissingMessage | ||
} | ||
|
||
return x.Query.Message.Validate() | ||
} | ||
|
||
func (x *PushRPC) ValidateResponse(requestID string) error { | ||
if x.RequestId == "" { | ||
return errMissingRequestID | ||
} | ||
|
||
if x.RequestId != requestID { | ||
return errRequestIDMismatch | ||
} | ||
|
||
if x.Response == nil { | ||
return errMissingResponse | ||
} | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package pb | ||
|
||
import ( | ||
"testing" | ||
|
||
"github.com/stretchr/testify/require" | ||
"github.com/waku-org/go-waku/waku/v2/protocol/pb" | ||
) | ||
|
||
func TestValidateRequest(t *testing.T) { | ||
request := PushRPC{} | ||
require.ErrorIs(t, request.ValidateRequest(), errMissingRequestID) | ||
request.RequestId = "test" | ||
require.ErrorIs(t, request.ValidateRequest(), errMissingQuery) | ||
request.Query = &PushRequest{} | ||
require.ErrorIs(t, request.ValidateRequest(), errMissingPubsubTopic) | ||
request.Query.PubsubTopic = "test" | ||
require.ErrorIs(t, request.ValidateRequest(), errMissingMessage) | ||
request.Query.Message = &pb.WakuMessage{ | ||
Payload: []byte{1, 2, 3}, | ||
ContentTopic: "test", | ||
} | ||
require.NoError(t, request.ValidateRequest()) | ||
} | ||
|
||
func TestValidateResponse(t *testing.T) { | ||
response := PushRPC{} | ||
require.ErrorIs(t, response.ValidateResponse("test"), errMissingRequestID) | ||
response.RequestId = "test1" | ||
require.ErrorIs(t, response.ValidateResponse("test"), errRequestIDMismatch) | ||
response.RequestId = "test" | ||
require.ErrorIs(t, response.ValidateResponse("test"), errMissingResponse) | ||
response.Response = &PushResponse{} | ||
require.NoError(t, response.ValidateResponse("test")) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package pb | ||
|
||
import ( | ||
"errors" | ||
|
||
"google.golang.org/protobuf/proto" | ||
) | ||
|
||
const MaxMetaAttrLength = 64 | ||
|
||
var ( | ||
errMissingPayload = errors.New("missing Payload field") | ||
errMissingContentTopic = errors.New("missing ContentTopic field") | ||
errInvalidMetaLength = errors.New("invalid length for Meta field") | ||
) | ||
|
||
func (msg *WakuMessage) Validate() error { | ||
if len(msg.Payload) == 0 { | ||
return errMissingPayload | ||
} | ||
|
||
if msg.ContentTopic == "" { | ||
return errMissingContentTopic | ||
} | ||
|
||
if len(msg.Meta) > MaxMetaAttrLength { | ||
return errInvalidMetaLength | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func Unmarshal(data []byte) (*WakuMessage, error) { | ||
msg := &WakuMessage{} | ||
err := proto.Unmarshal(data, msg) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
err = msg.Validate() | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
return msg, nil | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters