Skip to content

Commit 091024b

Browse files
chore: better proof handling in REST (#3286)
* better proof handling in REST
1 parent 85da5ef commit 091024b

File tree

6 files changed

+37
-6
lines changed

6 files changed

+37
-6
lines changed

Diff for: tests/testlib/wakucore.nim

+2
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ proc fakeWakuMessage*(
5050
meta: string | seq[byte] = newSeq[byte](),
5151
ts = now(),
5252
ephemeral = false,
53+
proof = newSeq[byte](),
5354
): WakuMessage =
5455
var payloadBytes: seq[byte]
5556
var metaBytes: seq[byte]
@@ -71,4 +72,5 @@ proc fakeWakuMessage*(
7172
version: 2,
7273
timestamp: ts,
7374
ephemeral: ephemeral,
75+
proof: proof,
7476
)

Diff for: tests/waku_rln_relay/test_rln_group_manager_onchain.nim

-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ suite "Onchain group manager":
128128
(await manager.startGroupSync()).isOkOr:
129129
raiseAssert $error
130130

131-
132131
asyncTest "startGroupSync: should guard against uninitialized state":
133132
(await manager.startGroupSync()).isErrOr:
134133
raiseAssert "Expected error when not initialized"

Diff for: tests/wakunode_rest/test_rest_lightpush.nim

+23
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,29 @@ proc shutdown(self: RestLightPushTest) {.async.} =
9696
await allFutures(self.serviceNode.stop(), self.pushNode.stop())
9797

9898
suite "Waku v2 Rest API - lightpush":
99+
asyncTest "Push message with proof":
100+
let restLightPushTest = await RestLightPushTest.init()
101+
102+
let message: RelayWakuMessage = fakeWakuMessage(
103+
contentTopic = DefaultContentTopic,
104+
payload = toBytes("TEST-1"),
105+
proof = toBytes("proof-test"),
106+
)
107+
.toRelayWakuMessage()
108+
109+
check message.proof.isSome()
110+
111+
let requestBody =
112+
PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: message)
113+
114+
let response = await restLightPushTest.client.sendPushRequest(body = requestBody)
115+
116+
## Validate that the push request failed because the node is not
117+
## connected to other node but, doesn't fail because of not properly
118+
## handling the proof message attribute within the REST request.
119+
check:
120+
response.data == "Failed to request a message push: not_published_to_any_peer"
121+
99122
asyncTest "Push message request":
100123
# Given
101124
let restLightPushTest = await RestLightPushTest.init()

Diff for: waku/waku_api/rest/relay/types.nim

+10
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ type RelayWakuMessage* = object
1717
timestamp*: Option[int64]
1818
meta*: Option[Base64String]
1919
ephemeral*: Option[bool]
20+
proof*: Option[Base64String]
2021

2122
type
2223
RelayGetMessagesResponse* = seq[RelayWakuMessage]
@@ -36,6 +37,7 @@ proc toRelayWakuMessage*(msg: WakuMessage): RelayWakuMessage =
3637
else:
3738
none(Base64String),
3839
ephemeral: some(msg.ephemeral),
40+
proof: some(base64.encode(msg.proof)),
3941
)
4042

4143
proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, string] =
@@ -45,6 +47,7 @@ proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, str
4547
version = uint32(msg.version.get(version))
4648
meta = ?msg.meta.get(Base64String("")).decode()
4749
ephemeral = msg.ephemeral.get(false)
50+
proof = ?msg.proof.get(Base64String("")).decode()
4851

4952
var timestamp = msg.timestamp.get(0)
5053

@@ -59,6 +62,7 @@ proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, str
5962
timestamp: timestamp,
6063
meta: meta,
6164
ephemeral: ephemeral,
65+
proof: proof,
6266
)
6367
)
6468

@@ -79,6 +83,8 @@ proc writeValue*(
7983
writer.writeField("meta", value.meta.get())
8084
if value.ephemeral.isSome():
8185
writer.writeField("ephemeral", value.ephemeral.get())
86+
if value.proof.isSome():
87+
writer.writeField("proof", value.proof.get())
8288
writer.endRecord()
8389

8490
proc readValue*(
@@ -91,6 +97,7 @@ proc readValue*(
9197
timestamp = none(int64)
9298
meta = none(Base64String)
9399
ephemeral = none(bool)
100+
proof = none(Base64String)
94101

95102
var keys = initHashSet[string]()
96103
for fieldName in readObjectFields(reader):
@@ -116,6 +123,8 @@ proc readValue*(
116123
meta = some(reader.readValue(Base64String))
117124
of "ephemeral":
118125
ephemeral = some(reader.readValue(bool))
126+
of "proof":
127+
proof = some(reader.readValue(Base64String))
119128
else:
120129
unrecognizedFieldWarning(value)
121130

@@ -132,4 +141,5 @@ proc readValue*(
132141
timestamp: timestamp,
133142
meta: meta,
134143
ephemeral: ephemeral,
144+
proof: proof,
135145
)

Diff for: waku/waku_api/rest/serdes.nim

+1-2
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,7 @@ proc decodeFromJsonBytes*[T](
6565
)
6666
)
6767
except SerializationError:
68-
# TODO: Do better error reporting here
69-
err("Unable to deserialize data")
68+
err("Unable to deserialize data: " & getCurrentExceptionMsg())
7069

7170
proc encodeIntoJsonString*(value: auto): SerdesResult[string] =
7271
var encoded: string

Diff for: waku/waku_store_sync.nim

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
{.push raises: [].}
22

33
import
4-
./waku_store_sync/reconciliation,
5-
./waku_store_sync/transfer,
6-
./waku_store_sync/common
4+
./waku_store_sync/reconciliation, ./waku_store_sync/transfer, ./waku_store_sync/common
75

86
export reconciliation, transfer, common

0 commit comments

Comments
 (0)