push it till it compiles, WIP

serde to structs, wip implementing sqlite requests
This commit is contained in:
DieMyst 2021-01-20 16:14:01 +03:00
parent 0b1b0a82a7
commit 0e2590d894
16 changed files with 237 additions and 25 deletions

81
Cargo.lock generated
View File

@ -191,6 +191,41 @@ dependencies = [
"zeroize", "zeroize",
] ]
[[package]]
name = "darling"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
dependencies = [
"darling_core",
"darling_macro",
]
[[package]]
name = "darling_core"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
"syn",
]
[[package]]
name = "darling_macro"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
dependencies = [
"darling_core",
"quote",
"syn",
]
[[package]] [[package]]
name = "data-encoding" name = "data-encoding"
version = "2.3.1" version = "2.3.1"
@ -232,6 +267,7 @@ version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef" checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef"
dependencies = [ dependencies = [
"serde",
"signature", "signature",
] ]
@ -245,6 +281,7 @@ dependencies = [
"ed25519", "ed25519",
"rand 0.7.3", "rand 0.7.3",
"serde", "serde",
"serde_bytes",
"sha2 0.9.2", "sha2 0.9.2",
"zeroize", "zeroize",
] ]
@ -580,6 +617,12 @@ dependencies = [
"hmac", "hmac",
] ]
[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]] [[package]]
name = "idna" name = "idna"
version = "0.2.0" version = "0.2.0"
@ -1160,6 +1203,15 @@ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]]
name = "serde_bytes"
version = "0.11.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.118" version = "1.0.118"
@ -1182,6 +1234,28 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "serde_with"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15f6201e064705553ece353a736a64be975680bd244908cf63e8fa71e478a51a"
dependencies = [
"serde",
"serde_with_macros",
]
[[package]]
name = "serde_with_macros"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1197ff7de45494f290c1e3e1a6f80e108974681984c87a3e480991ef3d0f1950"
dependencies = [
"darling",
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "sha2" name = "sha2"
version = "0.8.2" version = "0.8.2"
@ -1237,6 +1311,12 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "strsim"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
[[package]] [[package]]
name = "subtle" name = "subtle"
version = "1.0.0" version = "1.0.0"
@ -1345,6 +1425,7 @@ dependencies = [
"ref-cast", "ref-cast",
"serde", "serde",
"serde_json", "serde_json",
"serde_with",
"signature", "signature",
] ]

View File

@ -9,6 +9,7 @@ license = "Apache-2.0"
[dependencies] [dependencies]
libp2p-core = { package = "fluence-fork-libp2p-core", version = "0.26.0" } libp2p-core = { package = "fluence-fork-libp2p-core", version = "0.26.0" }
serde = { version = "=1.0.118", features = ["derive"] } serde = { version = "=1.0.118", features = ["derive"] }
fluence-identity = { path = "identity" } fluence-identity = { path = "identity" }
serde_json = "1.0.58" serde_json = "1.0.58"
bs58 = "0.3.1" bs58 = "0.3.1"
@ -16,6 +17,7 @@ failure = "0.1.6"
log = "0.4.11" log = "0.4.11"
ref-cast = "1.0.2" ref-cast = "1.0.2"
derivative = "2.1.1" derivative = "2.1.1"
ed25519-dalek = "1.0.1" ed25519-dalek = { version = "1.0.1", features = ["serde"] }
rand = "0.7.0" rand = "0.7.0"
signature = "1.3.0" signature = "1.3.0"
serde_with = "1.6.0"

82
bin/Cargo.lock generated
View File

@ -197,6 +197,41 @@ dependencies = [
"zeroize", "zeroize",
] ]
[[package]]
name = "darling"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
dependencies = [
"darling_core",
"darling_macro",
]
[[package]]
name = "darling_core"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
"syn",
]
[[package]]
name = "darling_macro"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
dependencies = [
"darling_core",
"quote",
"syn",
]
[[package]] [[package]]
name = "data-encoding" name = "data-encoding"
version = "2.3.1" version = "2.3.1"
@ -238,6 +273,7 @@ version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef" checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef"
dependencies = [ dependencies = [
"serde",
"signature", "signature",
] ]
@ -251,6 +287,7 @@ dependencies = [
"ed25519", "ed25519",
"rand 0.7.3", "rand 0.7.3",
"serde", "serde",
"serde_bytes",
"sha2 0.9.2", "sha2 0.9.2",
"zeroize", "zeroize",
] ]
@ -639,6 +676,12 @@ dependencies = [
"hmac", "hmac",
] ]
[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]] [[package]]
name = "idna" name = "idna"
version = "0.2.0" version = "0.2.0"
@ -1219,6 +1262,15 @@ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]]
name = "serde_bytes"
version = "0.11.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.118" version = "1.0.118"
@ -1241,6 +1293,28 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "serde_with"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15f6201e064705553ece353a736a64be975680bd244908cf63e8fa71e478a51a"
dependencies = [
"serde",
"serde_with_macros",
]
[[package]]
name = "serde_with_macros"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1197ff7de45494f290c1e3e1a6f80e108974681984c87a3e480991ef3d0f1950"
dependencies = [
"darling",
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "sha2" name = "sha2"
version = "0.8.2" version = "0.8.2"
@ -1296,6 +1370,12 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "strsim"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
[[package]] [[package]]
name = "subtle" name = "subtle"
version = "1.0.0" version = "1.0.0"
@ -1404,6 +1484,7 @@ dependencies = [
"ref-cast", "ref-cast",
"serde", "serde",
"serde_json", "serde_json",
"serde_with",
"signature", "signature",
] ]
@ -1419,6 +1500,7 @@ dependencies = [
"log", "log",
"once_cell", "once_cell",
"parking_lot", "parking_lot",
"serde_json",
"trust-graph", "trust-graph",
] ]

View File

@ -19,4 +19,5 @@ anyhow = "1.0.31"
boolinator = "2.4.0" boolinator = "2.4.0"
once_cell = "1.4.1" once_cell = "1.4.1"
parking_lot = "0.11.1" parking_lot = "0.11.1"
fce-sqlite-connector = "0.1.3" fce-sqlite-connector = "0.1.3"
serde_json = "1.0"

View File

@ -1,7 +1,7 @@
use fluence::WasmLoggerBuilder; use fluence::WasmLoggerBuilder;
mod storage_impl;
mod service_api; mod service_api;
mod storage_impl;
pub fn main() { pub fn main() {
WasmLoggerBuilder::new() WasmLoggerBuilder::new()

View File

@ -3,4 +3,4 @@ use fluence::{fce, CallParameters};
#[fce] #[fce]
fn test(a: String) -> String { fn test(a: String) -> String {
a a
} }

View File

@ -2,13 +2,14 @@
// check if trust is already in list before adding // check if trust is already in list before adding
// if there is an older trust - don't add received trust // if there is an older trust - don't add received trust
use trust_graph::{Storage, TrustGraph, PublicKeyHashable, TrustNode, Weight, Auth, Revoke}; use fce_sqlite_connector;
use fce_sqlite_connector::Value;
use fce_sqlite_connector::{Connection, State};
use fluence_identity::public_key::PublicKey; use fluence_identity::public_key::PublicKey;
use once_cell::sync::OnceCell; use once_cell::sync::OnceCell;
use parking_lot::Mutex; use parking_lot::Mutex;
use std::time::Duration; use std::time::Duration;
use fce_sqlite_connector; use trust_graph::{Auth, PublicKeyHashable, Revoke, Storage, TrustGraph, TrustNode, Weight};
use fce_sqlite_connector::{State, Connection};
static INSTANCE: OnceCell<Mutex<TrustGraph>> = OnceCell::new(); static INSTANCE: OnceCell<Mutex<TrustGraph>> = OnceCell::new();
@ -26,12 +27,12 @@ struct SqliteStorage {
impl SqliteStorage { impl SqliteStorage {
pub fn init(&self) { pub fn init(&self) {
let init_sql = "CREATE TABLE IF NOT EXISTS trusts(\ let init_sql = "CREATE TABLE IF NOT EXISTS trustnodes(\
peer_id TEXT PRIMARY KEY,\ public_key TEXT PRIMARY KEY,\
relay TEXT NOT NULL,\ trustnode TEXT NOT NULL,\
sig TEXT NOT NULL,\
name TEXT NOT NULL\
);"; );";
self.connection.execute(init_sql).unwrap();
} }
} }
@ -39,22 +40,38 @@ impl Storage for SqliteStorage {
fn get(&self, pk: &PublicKeyHashable) -> Option<&TrustNode> { fn get(&self, pk: &PublicKeyHashable) -> Option<&TrustNode> {
None None
} }
fn insert(&mut self, pk: PublicKeyHashable, node: TrustNode) {
fn insert(&mut self, pk: PublicKeyHashable, node: TrustNode) {
let mut cursor = self
.connection
.prepare("INSERT INTO trustnodes VALUES (?, ?)")
.unwrap()
.cursor();
let tn_str = serde_json::to_string(&node).unwrap();
cursor.bind(&[Value::String(format!("{}", pk))]).unwrap();
cursor
.bind(&[Value::String(format!("{}", tn_str))])
.unwrap();
cursor.next().unwrap();
} }
fn get_root_weight(&self, pk: &PublicKeyHashable) -> Option<&Weight> { fn get_root_weight(&self, pk: &PublicKeyHashable) -> Option<&Weight> {
None None
} }
fn add_root_weight(&mut self, pk: PublicKeyHashable, weight: Weight) {
} fn add_root_weight(&mut self, pk: PublicKeyHashable, weight: Weight) {}
fn root_keys(&self) -> Vec<PublicKeyHashable> { fn root_keys(&self) -> Vec<PublicKeyHashable> {
vec![] vec![]
} }
fn revoke(&mut self, pk: &PublicKeyHashable, revoke: Revoke) -> Result<(), String> { fn revoke(&mut self, pk: &PublicKeyHashable, revoke: Revoke) -> Result<(), String> {
Err("not implemented".to_string()) Err("not implemented".to_string())
} }
fn update_auth( fn update_auth(
&mut self, &mut self,
pk: &PublicKeyHashable, pk: &PublicKeyHashable,
@ -62,6 +79,5 @@ impl Storage for SqliteStorage {
issued_for: &PublicKey, issued_for: &PublicKey,
cur_time: Duration, cur_time: Duration,
) { ) {
} }
} }

11
identity/Cargo.lock generated
View File

@ -192,6 +192,7 @@ version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef" checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef"
dependencies = [ dependencies = [
"serde",
"signature", "signature",
] ]
@ -205,6 +206,7 @@ dependencies = [
"ed25519", "ed25519",
"rand 0.7.3", "rand 0.7.3",
"serde", "serde",
"serde_bytes",
"sha2 0.9.2", "sha2 0.9.2",
"zeroize", "zeroize",
] ]
@ -1050,6 +1052,15 @@ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]]
name = "serde_bytes"
version = "0.11.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.118" version = "1.0.118"

View File

@ -11,7 +11,7 @@ libp2p-core = { package = "fluence-fork-libp2p-core", version = "0.26.0" }
serde = { version = "=1.0.118", features = ["derive"] } serde = { version = "=1.0.118", features = ["derive"] }
serde_json = "1.0.58" serde_json = "1.0.58"
bs58 = "0.3.1" bs58 = "0.3.1"
ed25519-dalek = "1.0.1" ed25519-dalek = { version = "1.0.1", features = ["serde"] }
rand = "0.7.0" rand = "0.7.0"
signature = "1.3.0" signature = "1.3.0"
ed25519 = "1.0.3" ed25519 = "1.0.3"

View File

@ -17,8 +17,9 @@
use crate::signature::Signature; use crate::signature::Signature;
use core::fmt::Debug; use core::fmt::Debug;
use ed25519_dalek::SignatureError; use ed25519_dalek::SignatureError;
use serde::{Serialize, Deserialize};
#[derive(Copy, Clone, Default, Eq, PartialEq)] #[derive(Copy, Clone, Default, Eq, PartialEq, Serialize, Deserialize)]
pub struct PublicKey(pub(crate) ed25519_dalek::PublicKey); pub struct PublicKey(pub(crate) ed25519_dalek::PublicKey);
impl Debug for PublicKey { impl Debug for PublicKey {

View File

@ -15,7 +15,9 @@
*/ */
use ed25519_dalek::SignatureError; use ed25519_dalek::SignatureError;
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
pub struct SecretKey(ed25519_dalek::SecretKey); pub struct SecretKey(ed25519_dalek::SecretKey);
impl SecretKey { impl SecretKey {

View File

@ -15,8 +15,9 @@
*/ */
use signature::Signature as SigSignature; use signature::Signature as SigSignature;
use serde::{Serialize, Deserialize};
#[derive(Copy, Clone, Debug, PartialEq, Eq)] #[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct Signature(pub ed25519_dalek::Signature); pub struct Signature(pub ed25519_dalek::Signature);
pub const SIGNATURE_LENGTH: usize = 64; pub const SIGNATURE_LENGTH: usize = 64;

View File

@ -22,6 +22,7 @@ use std::{
fmt::{Display, Formatter}, fmt::{Display, Formatter},
hash::{Hash, Hasher}, hash::{Hash, Hasher},
}; };
use serde::ser::{Serializer};
/// Wrapper to use PublicKey in HashMap /// Wrapper to use PublicKey in HashMap
#[derive(PartialEq, Eq, Debug, Clone, RefCast)] #[derive(PartialEq, Eq, Debug, Clone, RefCast)]
@ -79,6 +80,14 @@ impl Display for PublicKeyHashable {
} }
} }
impl serde::Serialize for PublicKeyHashable {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer {
serializer.serialize_bytes(&self.0.to_bytes())
}
}
impl<'de> serde::Deserialize<'de> for PublicKeyHashable { impl<'de> serde::Deserialize<'de> for PublicKeyHashable {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where where

View File

@ -19,10 +19,11 @@ use fluence_identity::key_pair::KeyPair;
use fluence_identity::public_key::PublicKey; use fluence_identity::public_key::PublicKey;
use fluence_identity::signature::Signature; use fluence_identity::signature::Signature;
use std::time::Duration; use std::time::Duration;
use serde::{Serialize, Deserialize};
/// "A document" that cancels trust created before. /// "A document" that cancels trust created before.
/// TODO delete pk from Revoke (it is already in a trust node) /// TODO delete pk from Revoke (it is already in a trust node)
#[derive(Debug, Clone)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Revoke { pub struct Revoke {
/// who is revoked /// who is revoked
pub pk: PublicKey, pub pk: PublicKey,

View File

@ -20,6 +20,7 @@ use fluence_identity::public_key::PublicKey;
use fluence_identity::signature::Signature; use fluence_identity::signature::Signature;
use std::convert::TryInto; use std::convert::TryInto;
use std::time::Duration; use std::time::Duration;
use serde::{Serialize, Deserialize};
pub const SIG_LEN: usize = 64; pub const SIG_LEN: usize = 64;
pub const PK_LEN: usize = 32; pub const PK_LEN: usize = 32;
@ -30,7 +31,7 @@ pub const TRUST_LEN: usize = SIG_LEN + PK_LEN + EXPIRATION_LEN + ISSUED_LEN;
/// One element in chain of trust in a certificate. /// One element in chain of trust in a certificate.
/// TODO delete pk from Trust (it is already in a trust node) /// TODO delete pk from Trust (it is already in a trust node)
#[derive(Clone, PartialEq, Derivative, Eq)] #[derive(Clone, PartialEq, Derivative, Eq, Serialize, Deserialize)]
#[derivative(Debug)] #[derivative(Debug)]
pub struct Trust { pub struct Trust {
/// For whom this certificate is issued /// For whom this certificate is issued

View File

@ -20,8 +20,10 @@ use crate::trust::Trust;
use failure::_core::time::Duration; use failure::_core::time::Duration;
use fluence_identity::public_key::PublicKey; use fluence_identity::public_key::PublicKey;
use std::collections::HashMap; use std::collections::HashMap;
use serde::{Serialize, Deserialize};
use serde_with::serde_as;
#[derive(Debug, Clone)] #[derive(Debug, Clone, Serialize, Deserialize)]
enum TrustRelation { enum TrustRelation {
Auth(Auth), Auth(Auth),
Revoke(Revoke), Revoke(Revoke),
@ -46,7 +48,7 @@ impl TrustRelation {
} }
/// Represents who give a certificate /// Represents who give a certificate
#[derive(Debug, Clone)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Auth { pub struct Auth {
/// proof of this authorization /// proof of this authorization
pub trust: Trust, pub trust: Trust,
@ -56,12 +58,14 @@ pub struct Auth {
/// An element of trust graph that store relations (trust or revoke) /// An element of trust graph that store relations (trust or revoke)
/// that given by some owners of public keys. /// that given by some owners of public keys.
#[derive(Debug)] #[serde_as]
#[derive(Debug, Serialize, Deserialize)]
pub struct TrustNode { pub struct TrustNode {
/// identity key of this element /// identity key of this element
pub pk: PublicKey, pub pk: PublicKey,
/// one public key could be authorized or revoked by multiple certificates /// one public key could be authorized or revoked by multiple certificates
#[serde_as(as = "Vec<(_, _)>")]
trust_relations: HashMap<PublicKeyHashable, TrustRelation>, trust_relations: HashMap<PublicKeyHashable, TrustRelation>,
/// for maintain /// for maintain