From c494379b4aa44060aae3628763bfe59d69d94ddf Mon Sep 17 00:00:00 2001
From: librelois <c@elo.tf>
Date: Fri, 14 May 2021 17:31:26 +0200
Subject: [PATCH] feat(peers): add field member for peers v1

---
 Cargo.lock                                  | 36 +++++++++----------
 neon/native/server.d.ts                     |  1 +
 neon/native/src/server.rs                   | 39 +++++++++++----------
 rust-libs/duniter-server/src/legacy/dunp.rs |  1 +
 4 files changed, 41 insertions(+), 36 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index aad889c51..aeff2fb5f 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -864,7 +864,7 @@ dependencies = [
 [[package]]
 name = "dubp-wot"
 version = "0.11.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#193a64f042500c7a0b327fc216db1773a904270c"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#520d3893ec9bc3f4ca523af5de27933a0b0bd52d"
 dependencies = [
  "log",
  "rayon",
@@ -874,7 +874,7 @@ dependencies = [
 [[package]]
 name = "duniter-bc-reader"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#193a64f042500c7a0b327fc216db1773a904270c"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#520d3893ec9bc3f4ca523af5de27933a0b0bd52d"
 dependencies = [
  "anyhow",
  "dubp",
@@ -885,7 +885,7 @@ dependencies = [
 [[package]]
 name = "duniter-bca"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#26602884a286a202c729b1a89a4e00c89152106a"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#34836303e693149ffe11439e34cdb049d6a69b83"
 dependencies = [
  "anyhow",
  "arrayvec",
@@ -908,7 +908,7 @@ dependencies = [
 [[package]]
 name = "duniter-bca-types"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#26602884a286a202c729b1a89a4e00c89152106a"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#34836303e693149ffe11439e34cdb049d6a69b83"
 dependencies = [
  "arrayvec",
  "bincode",
@@ -940,7 +940,7 @@ dependencies = [
 [[package]]
 name = "duniter-conf"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#193a64f042500c7a0b327fc216db1773a904270c"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#520d3893ec9bc3f4ca523af5de27933a0b0bd52d"
 dependencies = [
  "anyhow",
  "dubp",
@@ -954,7 +954,7 @@ dependencies = [
 [[package]]
 name = "duniter-core"
 version = "1.8.1"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#193a64f042500c7a0b327fc216db1773a904270c"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#520d3893ec9bc3f4ca523af5de27933a0b0bd52d"
 dependencies = [
  "duniter-bc-reader",
  "duniter-conf",
@@ -991,7 +991,7 @@ dependencies = [
 [[package]]
 name = "duniter-dbs"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#193a64f042500c7a0b327fc216db1773a904270c"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#520d3893ec9bc3f4ca523af5de27933a0b0bd52d"
 dependencies = [
  "arrayvec",
  "bincode",
@@ -1014,7 +1014,7 @@ dependencies = [
 [[package]]
 name = "duniter-dbs-write-ops"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#193a64f042500c7a0b327fc216db1773a904270c"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#520d3893ec9bc3f4ca523af5de27933a0b0bd52d"
 dependencies = [
  "chrono",
  "dubp",
@@ -1029,7 +1029,7 @@ dependencies = [
 [[package]]
 name = "duniter-global"
 version = "1.8.1"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#193a64f042500c7a0b327fc216db1773a904270c"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#520d3893ec9bc3f4ca523af5de27933a0b0bd52d"
 dependencies = [
  "async-rwlock",
  "dubp",
@@ -1042,7 +1042,7 @@ dependencies = [
 [[package]]
 name = "duniter-gva"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#26602884a286a202c729b1a89a4e00c89152106a"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#34836303e693149ffe11439e34cdb049d6a69b83"
 dependencies = [
  "anyhow",
  "arrayvec",
@@ -1073,7 +1073,7 @@ dependencies = [
 [[package]]
 name = "duniter-gva-conf"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#26602884a286a202c729b1a89a4e00c89152106a"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#34836303e693149ffe11439e34cdb049d6a69b83"
 dependencies = [
  "anyhow",
  "duniter-core",
@@ -1085,7 +1085,7 @@ dependencies = [
 [[package]]
 name = "duniter-gva-db"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#26602884a286a202c729b1a89a4e00c89152106a"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#34836303e693149ffe11439e34cdb049d6a69b83"
 dependencies = [
  "bincode",
  "chrono",
@@ -1102,7 +1102,7 @@ dependencies = [
 [[package]]
 name = "duniter-gva-dbs-reader"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#26602884a286a202c729b1a89a4e00c89152106a"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#34836303e693149ffe11439e34cdb049d6a69b83"
 dependencies = [
  "anyhow",
  "arrayvec",
@@ -1116,7 +1116,7 @@ dependencies = [
 [[package]]
 name = "duniter-gva-gql"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#26602884a286a202c729b1a89a4e00c89152106a"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#34836303e693149ffe11439e34cdb049d6a69b83"
 dependencies = [
  "anyhow",
  "arrayvec",
@@ -1137,7 +1137,7 @@ dependencies = [
 [[package]]
 name = "duniter-gva-indexer"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#26602884a286a202c729b1a89a4e00c89152106a"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#34836303e693149ffe11439e34cdb049d6a69b83"
 dependencies = [
  "anyhow",
  "bincode",
@@ -1169,7 +1169,7 @@ dependencies = [
 [[package]]
 name = "duniter-mempools"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#193a64f042500c7a0b327fc216db1773a904270c"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#520d3893ec9bc3f4ca523af5de27933a0b0bd52d"
 dependencies = [
  "dubp",
  "duniter-bc-reader",
@@ -1182,7 +1182,7 @@ dependencies = [
 [[package]]
 name = "duniter-module"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#193a64f042500c7a0b327fc216db1773a904270c"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#520d3893ec9bc3f4ca523af5de27933a0b0bd52d"
 dependencies = [
  "anyhow",
  "async-mutex",
@@ -1813,7 +1813,7 @@ dependencies = [
 [[package]]
 name = "kv_typed"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#193a64f042500c7a0b327fc216db1773a904270c"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#520d3893ec9bc3f4ca523af5de27933a0b0bd52d"
 dependencies = [
  "byteorder",
  "cfg-if 0.1.10",
diff --git a/neon/native/server.d.ts b/neon/native/server.d.ts
index 8e53fd2b9..763b49308 100644
--- a/neon/native/server.d.ts
+++ b/neon/native/server.d.ts
@@ -63,6 +63,7 @@ export class PeerCard {
     endpoints: string[]
     signature: string
     status: string
+    member: boolean
 }
 
 export class RustDbTx {
diff --git a/neon/native/src/server.rs b/neon/native/src/server.rs
index 3a603784d..ffabe4e94 100644
--- a/neon/native/src/server.rs
+++ b/neon/native/src/server.rs
@@ -380,15 +380,7 @@ declare_types! {
             let peer_js = cx.argument::<JsValue>(0)?;
 
             let peer_stringified: PeerCardStringified = neon_serde::from_value(&mut cx, peer_js)?;
-            let peer = duniter_server::PeerCardDbV1 {
-                version: peer_stringified.version,
-                currency: peer_stringified.currency,
-                pubkey: into_neon_res(&mut cx, PublicKey::from_base58(&peer_stringified.pubkey))?,
-                blockstamp: into_neon_res(&mut cx, Blockstamp::from_str(&peer_stringified.blockstamp))?,
-                endpoints: peer_stringified.endpoints,
-                status: &peer_stringified.status == "UP",
-                signature: into_neon_res(&mut cx, Signature::from_base64(&peer_stringified.signature))?,
-            };
+            let peer = peer_stringified.into_peer_card_db_v1(&mut cx)?;
 
             let this = cx.this();
             let res = {
@@ -402,15 +394,7 @@ declare_types! {
             let peer_js = cx.argument::<JsValue>(0)?;
 
             let peer_stringified: PeerCardStringified = neon_serde::from_value(&mut cx, peer_js)?;
-            let peer = duniter_server::PeerCardDbV1 {
-                version: peer_stringified.version,
-                currency: peer_stringified.currency,
-                pubkey: into_neon_res(&mut cx, PublicKey::from_base58(&peer_stringified.pubkey))?,
-                blockstamp: into_neon_res(&mut cx, Blockstamp::from_str(&peer_stringified.blockstamp))?,
-                endpoints: peer_stringified.endpoints,
-                status: &peer_stringified.status == "UP",
-                signature: into_neon_res(&mut cx, Signature::from_base64(&peer_stringified.signature))?,
-            };
+            let peer = peer_stringified.into_peer_card_db_v1(&mut cx)?;
 
             let this = cx.this();
             {
@@ -525,6 +509,25 @@ pub struct PeerCardStringified {
     pub endpoints: Vec<String>,
     pub status: String,
     pub signature: String,
+    pub member: bool,
+}
+
+impl PeerCardStringified {
+    fn into_peer_card_db_v1<'c, C: Context<'c>>(
+        self,
+        cx: &mut C,
+    ) -> NeonResult<duniter_server::PeerCardDbV1> {
+        Ok(duniter_server::PeerCardDbV1 {
+            version: self.version,
+            currency: self.currency,
+            pubkey: into_neon_res(cx, PublicKey::from_base58(&self.pubkey))?,
+            blockstamp: into_neon_res(cx, Blockstamp::from_str(&self.blockstamp))?,
+            endpoints: self.endpoints,
+            status: &self.status == "UP",
+            signature: into_neon_res(cx, Signature::from_base64(&self.signature))?,
+            member: self.member,
+        })
+    }
 }
 
 #[derive(Deserialize, Serialize)]
diff --git a/rust-libs/duniter-server/src/legacy/dunp.rs b/rust-libs/duniter-server/src/legacy/dunp.rs
index 59e9e54d6..637474d32 100644
--- a/rust-libs/duniter-server/src/legacy/dunp.rs
+++ b/rust-libs/duniter-server/src/legacy/dunp.rs
@@ -135,6 +135,7 @@ mod tests {
             endpoints: vec![],
             status: true,
             signature: Signature::from_base64("KBaoJuKIfkWJO015BTegUN8l81VYPfleVUfQUwPRPAAF1oB398hDb1bX/QUFe+3CKFz57aGT8bB745mz90x5Ag==")?,
+            member: false,
         };
         let pubkey = peer.pubkey;
 
-- 
GitLab