diff --git a/.circleci/config.yml b/.circleci/config.yml index 611c2ba..0fa58b3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -29,7 +29,7 @@ jobs: paths: - ~/.cargo - ~/.rustup - key: trust-graph00-{{ checksum "./Cargo.lock" }}-{{ checksum "./keypair/Cargo.lock" }} + key: trust-graph00-{{ checksum "./Cargo.lock" }-{{ checksum "./service/Cargo.lock" }}}-{{ checksum "./keypair/Cargo.lock" }} workflows: diff --git a/Cargo.lock b/Cargo.lock index bd8c151..c55c17a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -755,7 +755,7 @@ dependencies = [ [[package]] name = "fluence-keypair" -version = "0.4.0" +version = "0.4.1" dependencies = [ "asn1_der", "bs58 0.3.1", @@ -2478,7 +2478,7 @@ dependencies = [ [[package]] name = "trust-graph" -version = "0.2.8" +version = "0.2.9" dependencies = [ "bs58 0.3.1", "derivative", @@ -2498,7 +2498,7 @@ dependencies = [ [[package]] name = "trust-graph-wasm" -version = "0.2.0" +version = "0.2.1" dependencies = [ "anyhow", "bincode", diff --git a/Cargo.toml b/Cargo.toml index 8479ea4..78a9b81 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "trust-graph" -version = "0.2.8" +version = "0.2.9" authors = ["Fluence Labs"] edition = "2018" description = "trust graph" @@ -11,7 +11,7 @@ repository = "https://github.com/fluencelabs/trust-graph" libp2p-core = { package = "fluence-fork-libp2p-core", version = "0.27.2", features = ["secp256k1"] } serde = { version = "=1.0.118", features = ["derive"] } -fluence-keypair = { path = "./keypair", version = "0.4.0" } +fluence-keypair = { path = "./keypair", version = "0.4.1" } serde_json = "1.0.58" bs58 = "0.3.1" failure = "0.1.6" diff --git a/example/generated/export.ts b/example/generated/export.ts index 3084c64..1cd5109 100644 --- a/example/generated/export.ts +++ b/example/generated/export.ts @@ -120,6 +120,99 @@ h.on('getDataSrv', 'issuer_peer_id', () => {return issuer_peer_id;}); + export function revoke(node: string, revoke: {revoked_at:number;revoked_by:string;revoked_peer_id:string;sig_type:string;signature:string}, config?: {ttl?: number}) : Promise<{error:string;success:boolean}>; + export function revoke(peer: FluencePeer, node: string, revoke: {revoked_at:number;revoked_by:string;revoked_peer_id:string;sig_type:string;signature:string}, config?: {ttl?: number}) : Promise<{error:string;success:boolean}>; + export function revoke(...args: any) { + let peer: FluencePeer; + let node: any; +let revoke: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + node = args[1]; +revoke = args[2]; +config = args[3]; + } else { + peer = Fluence.getPeer(); + node = args[0]; +revoke = args[1]; +config = args[2]; + } + + let request: RequestFlow; + const promise = new Promise<{error:string;success:boolean}>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node") [] node) + ) + (call %init_peer_id% ("getDataSrv" "revoke") [] revoke) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (seq + (call node ("peer" "timestamp_sec") [] timestamp_sec) + (call node ("trust-graph" "revoke") [revoke timestamp_sec] result) + ) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'node', () => {return node;}); +h.on('getDataSrv', 'revoke', () => {return revoke;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for revoke'); + }) + if(config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + + + export function issue_trust(node: string, issued_for_peer_id: string, expires_at_sec: number, issued_at_sec: number, trust_bytes: number[], config?: {ttl?: number}) : Promise<{error:string;success:boolean;trust:{expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}}>; export function issue_trust(peer: FluencePeer, node: string, issued_for_peer_id: string, expires_at_sec: number, issued_at_sec: number, trust_bytes: number[], config?: {ttl?: number}) : Promise<{error:string;success:boolean;trust:{expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}}>; export function issue_trust(...args: any) { @@ -231,6 +324,214 @@ h.on('getDataSrv', 'trust_bytes', () => {return trust_bytes;}); + export function get_revoke_bytes(node: string, revoked_peer_id: string, revoked_at: number, config?: {ttl?: number}) : Promise<{error:string;result:number[];success:boolean}>; + export function get_revoke_bytes(peer: FluencePeer, node: string, revoked_peer_id: string, revoked_at: number, config?: {ttl?: number}) : Promise<{error:string;result:number[];success:boolean}>; + export function get_revoke_bytes(...args: any) { + let peer: FluencePeer; + let node: any; +let revoked_peer_id: any; +let revoked_at: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + node = args[1]; +revoked_peer_id = args[2]; +revoked_at = args[3]; +config = args[4]; + } else { + peer = Fluence.getPeer(); + node = args[0]; +revoked_peer_id = args[1]; +revoked_at = args[2]; +config = args[3]; + } + + let request: RequestFlow; + const promise = new Promise<{error:string;result:number[];success:boolean}>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node") [] node) + ) + (call %init_peer_id% ("getDataSrv" "revoked_peer_id") [] revoked_peer_id) + ) + (call %init_peer_id% ("getDataSrv" "revoked_at") [] revoked_at) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call node ("trust-graph" "get_revoke_bytes") [revoked_peer_id revoked_at] result) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'node', () => {return node;}); +h.on('getDataSrv', 'revoked_peer_id', () => {return revoked_peer_id;}); +h.on('getDataSrv', 'revoked_at', () => {return revoked_at;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for get_revoke_bytes'); + }) + if(config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + + + + export function issue_revocation(node: string, revoked_peer_id: string, revoked_by_peer_id: string, revoked_at_sec: number, signature_bytes: number[], config?: {ttl?: number}) : Promise<{error:string;revoke:{revoked_at:number;revoked_by:string;revoked_peer_id:string;sig_type:string;signature:string};success:boolean}>; + export function issue_revocation(peer: FluencePeer, node: string, revoked_peer_id: string, revoked_by_peer_id: string, revoked_at_sec: number, signature_bytes: number[], config?: {ttl?: number}) : Promise<{error:string;revoke:{revoked_at:number;revoked_by:string;revoked_peer_id:string;sig_type:string;signature:string};success:boolean}>; + export function issue_revocation(...args: any) { + let peer: FluencePeer; + let node: any; +let revoked_peer_id: any; +let revoked_by_peer_id: any; +let revoked_at_sec: any; +let signature_bytes: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + node = args[1]; +revoked_peer_id = args[2]; +revoked_by_peer_id = args[3]; +revoked_at_sec = args[4]; +signature_bytes = args[5]; +config = args[6]; + } else { + peer = Fluence.getPeer(); + node = args[0]; +revoked_peer_id = args[1]; +revoked_by_peer_id = args[2]; +revoked_at_sec = args[3]; +signature_bytes = args[4]; +config = args[5]; + } + + let request: RequestFlow; + const promise = new Promise<{error:string;revoke:{revoked_at:number;revoked_by:string;revoked_peer_id:string;sig_type:string;signature:string};success:boolean}>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node") [] node) + ) + (call %init_peer_id% ("getDataSrv" "revoked_peer_id") [] revoked_peer_id) + ) + (call %init_peer_id% ("getDataSrv" "revoked_by_peer_id") [] revoked_by_peer_id) + ) + (call %init_peer_id% ("getDataSrv" "revoked_at_sec") [] revoked_at_sec) + ) + (call %init_peer_id% ("getDataSrv" "signature_bytes") [] signature_bytes) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call node ("trust-graph" "issue_revocation") [revoked_peer_id revoked_by_peer_id revoked_at_sec signature_bytes] result) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'node', () => {return node;}); +h.on('getDataSrv', 'revoked_peer_id', () => {return revoked_peer_id;}); +h.on('getDataSrv', 'revoked_by_peer_id', () => {return revoked_by_peer_id;}); +h.on('getDataSrv', 'revoked_at_sec', () => {return revoked_at_sec;}); +h.on('getDataSrv', 'signature_bytes', () => {return signature_bytes;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for issue_revocation'); + }) + if(config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + + + export function insert_cert(node: string, certificate: {chain:{expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}[]}, config?: {ttl?: number}) : Promise<{error:string;success:boolean}>; export function insert_cert(peer: FluencePeer, node: string, certificate: {chain:{expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}[]}, config?: {ttl?: number}) : Promise<{error:string;success:boolean}>; export function insert_cert(...args: any) { diff --git a/example/index.ts b/example/index.ts index 673aa7f..56a5f24 100644 --- a/example/index.ts +++ b/example/index.ts @@ -33,7 +33,7 @@ let local: Node[] = [ ]; async function main(environment: Node[]) { - let builtins_keypair = await KeyPair.fromBytes(bs58.decode("5CGiJio6m76GxJ2wLj46PzSu6V7SRa5agv6meR3SJBKtvTgethRCmgBJKXWDSpSEBpgNUPd7Re5cZjF8mWW4kBfs")); + let builtins_keypair = await KeyPair.fromBytes(bs58.decode("5CGiJio6m76GxJ2wLj46PzSu6V7SRa5agv6meR3SJBKtvTgethRCmgBJKXWDSpSEBpgNUPd7Re5cZjF8mWW4kBfs").slice(32)); await Fluence.start({ connectTo: environment[0], KeyPair: builtins_keypair}); console.log( "📗 created a fluence peer %s with relay %s", diff --git a/keypair/Cargo.toml b/keypair/Cargo.toml index 3312288..516581b 100644 --- a/keypair/Cargo.toml +++ b/keypair/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fluence-keypair" -version = "0.4.0" +version = "0.4.1" authors = ["Fluence Labs"] edition = "2018" description = "identity" diff --git a/local-network/buitins_secret_key.ed25519 b/local-network/buitins_secret_key.ed25519 new file mode 100644 index 0000000..601d2d9 --- /dev/null +++ b/local-network/buitins_secret_key.ed25519 @@ -0,0 +1 @@ +5FwE32bDcphFzuMca7Y2qW1gdR64fTBYoRNvD4MLE1hecDGhCMQGKn8aseMr5wRo4Xo2CRFdrEAawUNLYkgQD78K diff --git a/local-network/docker-compose.yml b/local-network/docker-compose.yml index 8247496..911146b 100644 --- a/local-network/docker-compose.yml +++ b/local-network/docker-compose.yml @@ -18,6 +18,7 @@ services: volumes: - fluence-0:/.fluence - data-0:/config + - ./builtins_secret_key.ed25519:/.fluence/v1/builtins_secret_key.ed25519 networks: - fluence diff --git a/service/Cargo.toml b/service/Cargo.toml index e005acc..973047e 100644 --- a/service/Cargo.toml +++ b/service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "trust-graph-wasm" -version = "0.2.0" +version = "0.2.1" authors = ["Fluence Labs"] edition = "2018" description = "trust graph wasm" @@ -12,7 +12,7 @@ path = "src/main.rs" [dependencies] trust-graph = { version = "0.2.6", path = "../." } -fluence-keypair = { version = "0.4.0", path = "../keypair" } +fluence-keypair = { version = "0.4.1", path = "../keypair" } marine-rs-sdk = { version = "0.6.11", features = ["logger"] } marine-sqlite-connector = "0.5.1"