From 091024b376730f94f5aec4dad7e020f00f50c2dd Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Fri, 14 Feb 2025 11:14:38 +0100 Subject: [PATCH] chore: better proof handling in REST (#3286) * better proof handling in REST --- tests/testlib/wakucore.nim | 2 ++ .../test_rln_group_manager_onchain.nim | 1 - tests/wakunode_rest/test_rest_lightpush.nim | 23 +++++++++++++++++++ waku/waku_api/rest/relay/types.nim | 10 ++++++++ waku/waku_api/rest/serdes.nim | 3 +-- waku/waku_store_sync.nim | 4 +--- 6 files changed, 37 insertions(+), 6 deletions(-) diff --git a/tests/testlib/wakucore.nim b/tests/testlib/wakucore.nim index b4daca1054..d18a87e7df 100644 --- a/tests/testlib/wakucore.nim +++ b/tests/testlib/wakucore.nim @@ -50,6 +50,7 @@ proc fakeWakuMessage*( meta: string | seq[byte] = newSeq[byte](), ts = now(), ephemeral = false, + proof = newSeq[byte](), ): WakuMessage = var payloadBytes: seq[byte] var metaBytes: seq[byte] @@ -71,4 +72,5 @@ proc fakeWakuMessage*( version: 2, timestamp: ts, ephemeral: ephemeral, + proof: proof, ) diff --git a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim index 0dd1439311..3d7be7220b 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim @@ -128,7 +128,6 @@ suite "Onchain group manager": (await manager.startGroupSync()).isOkOr: raiseAssert $error - asyncTest "startGroupSync: should guard against uninitialized state": (await manager.startGroupSync()).isErrOr: raiseAssert "Expected error when not initialized" diff --git a/tests/wakunode_rest/test_rest_lightpush.nim b/tests/wakunode_rest/test_rest_lightpush.nim index 1e6ef9e835..2ff0bf26a5 100644 --- a/tests/wakunode_rest/test_rest_lightpush.nim +++ b/tests/wakunode_rest/test_rest_lightpush.nim @@ -96,6 +96,29 @@ proc shutdown(self: RestLightPushTest) {.async.} = await allFutures(self.serviceNode.stop(), self.pushNode.stop()) suite "Waku v2 Rest API - lightpush": + asyncTest "Push message with proof": + let restLightPushTest = await RestLightPushTest.init() + + let message: RelayWakuMessage = fakeWakuMessage( + contentTopic = DefaultContentTopic, + payload = toBytes("TEST-1"), + proof = toBytes("proof-test"), + ) + .toRelayWakuMessage() + + check message.proof.isSome() + + let requestBody = + PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: message) + + let response = await restLightPushTest.client.sendPushRequest(body = requestBody) + + ## Validate that the push request failed because the node is not + ## connected to other node but, doesn't fail because of not properly + ## handling the proof message attribute within the REST request. + check: + response.data == "Failed to request a message push: not_published_to_any_peer" + asyncTest "Push message request": # Given let restLightPushTest = await RestLightPushTest.init() diff --git a/waku/waku_api/rest/relay/types.nim b/waku/waku_api/rest/relay/types.nim index 6da0f401e7..ca7d1ff053 100644 --- a/waku/waku_api/rest/relay/types.nim +++ b/waku/waku_api/rest/relay/types.nim @@ -17,6 +17,7 @@ type RelayWakuMessage* = object timestamp*: Option[int64] meta*: Option[Base64String] ephemeral*: Option[bool] + proof*: Option[Base64String] type RelayGetMessagesResponse* = seq[RelayWakuMessage] @@ -36,6 +37,7 @@ proc toRelayWakuMessage*(msg: WakuMessage): RelayWakuMessage = else: none(Base64String), ephemeral: some(msg.ephemeral), + proof: some(base64.encode(msg.proof)), ) proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, string] = @@ -45,6 +47,7 @@ proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, str version = uint32(msg.version.get(version)) meta = ?msg.meta.get(Base64String("")).decode() ephemeral = msg.ephemeral.get(false) + proof = ?msg.proof.get(Base64String("")).decode() var timestamp = msg.timestamp.get(0) @@ -59,6 +62,7 @@ proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, str timestamp: timestamp, meta: meta, ephemeral: ephemeral, + proof: proof, ) ) @@ -79,6 +83,8 @@ proc writeValue*( writer.writeField("meta", value.meta.get()) if value.ephemeral.isSome(): writer.writeField("ephemeral", value.ephemeral.get()) + if value.proof.isSome(): + writer.writeField("proof", value.proof.get()) writer.endRecord() proc readValue*( @@ -91,6 +97,7 @@ proc readValue*( timestamp = none(int64) meta = none(Base64String) ephemeral = none(bool) + proof = none(Base64String) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -116,6 +123,8 @@ proc readValue*( meta = some(reader.readValue(Base64String)) of "ephemeral": ephemeral = some(reader.readValue(bool)) + of "proof": + proof = some(reader.readValue(Base64String)) else: unrecognizedFieldWarning(value) @@ -132,4 +141,5 @@ proc readValue*( timestamp: timestamp, meta: meta, ephemeral: ephemeral, + proof: proof, ) diff --git a/waku/waku_api/rest/serdes.nim b/waku/waku_api/rest/serdes.nim index 2c8ebb4b7e..eb6bc15457 100644 --- a/waku/waku_api/rest/serdes.nim +++ b/waku/waku_api/rest/serdes.nim @@ -65,8 +65,7 @@ proc decodeFromJsonBytes*[T]( ) ) except SerializationError: - # TODO: Do better error reporting here - err("Unable to deserialize data") + err("Unable to deserialize data: " & getCurrentExceptionMsg()) proc encodeIntoJsonString*(value: auto): SerdesResult[string] = var encoded: string diff --git a/waku/waku_store_sync.nim b/waku/waku_store_sync.nim index 06699d9fd0..03c1b33afc 100644 --- a/waku/waku_store_sync.nim +++ b/waku/waku_store_sync.nim @@ -1,8 +1,6 @@ {.push raises: [].} import - ./waku_store_sync/reconciliation, - ./waku_store_sync/transfer, - ./waku_store_sync/common + ./waku_store_sync/reconciliation, ./waku_store_sync/transfer, ./waku_store_sync/common export reconciliation, transfer, common