Skip to content

Commit 34631fa

Browse files
authored
Merge pull request #29 from CoLearn-Dev/request-info
- add version to RequestInfo - replace structopt with clap
2 parents 1be926b + 778b87f commit 34631fa

11 files changed

+37
-24
lines changed

.gitmodules

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[submodule "proto"]
22
path = proto
3-
url = git@github.com:CoLearn-Dev/colink-proto-dev.git
3+
url = https://github.com/CoLearn-Dev/colink-proto-dev.git
44
branch = main

Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "colink"
3-
version = "0.2.1"
3+
version = "0.2.2"
44
edition = "2021"
55
description = "CoLink Rust SDK"
66
license = "MIT"
@@ -13,6 +13,7 @@ repository = "https://github.com/CoLearn-Dev/colink-sdk-rust-dev"
1313
async-trait = "0.1"
1414
base64 = "0.13.0"
1515
chrono = "0.4"
16+
clap = { version = "4.0", features = ["derive", "env"] }
1617
futures-lite = "1.12"
1718
lapin = "2.1"
1819
prost = "0.10"
@@ -21,7 +22,6 @@ secp256k1 = { version = "0.21.2", features = ["rand-std"] }
2122
serde = { version = "1.0", features = ["derive"] }
2223
serde_json = "1.0"
2324
sha2 = "0.10"
24-
structopt = "0.3"
2525
tokio = { version = "1.18", features = ["macros", "rt-multi-thread", "rt", "fs"] }
2626
tonic = { version = "0.7", features = ["tls", "tls-roots"] }
2727
tracing = "0.1"

examples/host_import_user.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>
1515

1616
let cl = CoLink::new(addr, jwt);
1717
let (pk, sk) = generate_user();
18-
let (_, core_pub_key, _) = cl.request_info().await?;
18+
let core_pub_key = cl.request_info().await?.core_public_key;
1919
let (signature_timestamp, sig) =
2020
prepare_import_user_signature(&pk, &sk, &core_pub_key, expiration_timestamp);
2121
println!(

examples/host_import_users.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>
1919
let mut users = vec![];
2020
for _ in 0..num {
2121
let (pk, sk) = generate_user();
22-
let (_, core_pub_key, _) = cl.request_info().await?;
22+
let core_pub_key = cl.request_info().await?.core_public_key;
2323
let (signature_timestamp, sig) =
2424
prepare_import_user_signature(&pk, &sk, &core_pub_key, expiration_timestamp);
2525
users.push(

examples/host_import_users_and_exchange_guest_jwts.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>
2020
let mut guest_jwts = vec![];
2121
for i in 0..num {
2222
let (pk, sk) = generate_user();
23-
let (_, core_pub_key, _) = cl.request_info().await?;
23+
let core_pub_key = cl.request_info().await?.core_public_key;
2424
let (signature_timestamp, sig) =
2525
prepare_import_user_signature(&pk, &sk, &core_pub_key, expiration_timestamp);
2626
users.push(

examples/host_import_users_and_set_registry.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>
1919
let cl = CoLink::new(addr, jwt);
2020
let mut users = vec![];
2121
let (pk, sk) = generate_user();
22-
let (_, core_pub_key, _) = cl.request_info().await?;
22+
let core_pub_key = cl.request_info().await?.core_public_key;
2323
let (signature_timestamp, sig) =
2424
prepare_import_user_signature(&pk, &sk, &core_pub_key, expiration_timestamp);
2525
let registry_user = cl
@@ -42,7 +42,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>
4242
clt.update_registries(&registries).await?;
4343
for i in 0..num {
4444
let (pk, sk) = generate_user();
45-
let (_, core_pub_key, _) = cl.request_info().await?;
45+
let core_pub_key = cl.request_info().await?.core_public_key;
4646
let (signature_timestamp, sig) =
4747
prepare_import_user_signature(&pk, &sk, &core_pub_key, expiration_timestamp);
4848
users.push(

examples/mtls_request_info.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>
1212
let cl = CoLink::new(addr, "")
1313
.ca_certificate(ca_certificate)
1414
.identity(client_cert, client_key);
15-
let (_, core_pub_key, _) = cl.request_info().await?;
15+
let core_pub_key = cl.request_info().await?.core_public_key;
1616
println!("{}", core_pub_key);
1717

1818
Ok(())

proto

Submodule proto updated 1 file

src/application.rs

+16-3
Original file line numberDiff line numberDiff line change
@@ -350,13 +350,14 @@ impl CoLink {
350350
Ok(())
351351
}
352352

353-
pub async fn request_info(&self) -> Result<(String, secp256k1::PublicKey, String), Error> {
353+
pub async fn request_info(&self) -> Result<CoLinkInfo, Error> {
354354
let mut client = self._grpc_connect(&self.core_addr).await?;
355355
let request = generate_request(&self.jwt, Empty::default());
356356
let response = client.request_info(request).await?;
357357
debug!("RESPONSE={:?}", response);
358358
let mq_uri = response.get_ref().mq_uri.clone();
359359
let requestor_ip = response.get_ref().requestor_ip.clone();
360+
let version = response.get_ref().version.clone();
360361
let core_public_key_vec: Vec<u8> = response.get_ref().core_public_key.clone();
361362
let core_public_key: secp256k1::PublicKey =
362363
match secp256k1::PublicKey::from_slice(&core_public_key_vec) {
@@ -368,7 +369,12 @@ impl CoLink {
368369
))))
369370
}
370371
};
371-
Ok((mq_uri, core_public_key, requestor_ip))
372+
Ok(CoLinkInfo {
373+
mq_uri,
374+
core_public_key,
375+
requestor_ip,
376+
version,
377+
})
372378
}
373379

374380
pub async fn subscribe(
@@ -407,7 +413,7 @@ impl CoLink {
407413
}
408414

409415
pub async fn new_subscriber(&self, queue_name: &str) -> Result<CoLinkSubscriber, Error> {
410-
let (mq_uri, _, _) = self.request_info().await?;
416+
let mq_uri = self.request_info().await?.mq_uri;
411417
let subscriber = CoLinkSubscriber::new(&mq_uri, queue_name).await?;
412418
Ok(subscriber)
413419
}
@@ -446,6 +452,13 @@ impl CoLink {
446452
}
447453
}
448454

455+
pub struct CoLinkInfo {
456+
pub mq_uri: String,
457+
pub core_public_key: secp256k1::PublicKey,
458+
pub requestor_ip: String,
459+
pub version: String,
460+
}
461+
449462
pub struct CoLinkSubscriber {
450463
consumer: Consumer,
451464
}

src/extensions/switch_to_generated_user.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ impl crate::application::CoLink {
77
let auth_content = decode_jwt_without_validation(&self.jwt)?;
88
let expiration_timestamp = auth_content.exp;
99
let (pk, sk) = crate::generate_user();
10-
let (_, core_pub_key, _) = self.request_info().await?;
10+
let core_pub_key = self.request_info().await?.core_public_key;
1111
let (signature_timestamp, sig) =
1212
crate::prepare_import_user_signature(&pk, &sk, &core_pub_key, expiration_timestamp);
1313
self.import_user(&pk, signature_timestamp, expiration_timestamp, &sig)

src/protocol.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::{application::*, utils::get_path_timestamp};
22
pub use async_trait::async_trait;
3+
use clap::Parser;
34
use futures_lite::stream::StreamExt;
45
use lapin::{
56
options::{BasicAckOptions, BasicConsumeOptions, BasicQosOptions},
@@ -12,7 +13,6 @@ use std::{
1213
sync::{Arc, Mutex},
1314
thread,
1415
};
15-
use structopt::StructOpt;
1616
use tracing::{debug, error};
1717

1818
type Error = Box<dyn std::error::Error + Send + Sync + 'static>;
@@ -98,7 +98,7 @@ impl CoLinkProtocol {
9898
};
9999
self.cl.unlock(lock).await?;
100100

101-
let (mq_addr, _, _) = self.cl.request_info().await?;
101+
let mq_addr = self.cl.request_info().await?.mq_uri;
102102
let mq = Connection::connect(&mq_addr, ConnectionProperties::default()).await?;
103103
let channel = mq.create_channel().await?;
104104
channel.basic_qos(1, BasicQosOptions::default()).await?;
@@ -241,27 +241,27 @@ pub fn _protocol_start(
241241
Ok(())
242242
}
243243

244-
#[derive(Debug, StructOpt)]
245-
#[structopt(name = "CoLink-SDK", about = "CoLink-SDK")]
244+
#[derive(Debug, Parser)]
245+
#[command(name = "CoLink-SDK", about = "CoLink-SDK")]
246246
pub struct CommandLineArgs {
247247
/// Address of CoLink server
248-
#[structopt(short, long, env = "COLINK_CORE_ADDR")]
248+
#[arg(short, long, env = "COLINK_CORE_ADDR")]
249249
pub addr: String,
250250

251251
/// User JWT
252-
#[structopt(short, long, env = "COLINK_JWT")]
252+
#[arg(short, long, env = "COLINK_JWT")]
253253
pub jwt: String,
254254

255255
/// Path to CA certificate.
256-
#[structopt(long, env = "COLINK_CA_CERT")]
256+
#[arg(long, env = "COLINK_CA_CERT")]
257257
pub ca: Option<String>,
258258

259259
/// Path to client certificate.
260-
#[structopt(long, env = "COLINK_CLIENT_CERT")]
260+
#[arg(long, env = "COLINK_CLIENT_CERT")]
261261
pub cert: Option<String>,
262262

263263
/// Path to private key.
264-
#[structopt(long, env = "COLINK_CLIENT_KEY")]
264+
#[arg(long, env = "COLINK_CLIENT_KEY")]
265265
pub key: Option<String>,
266266
}
267267

@@ -273,7 +273,7 @@ pub fn _colink_parse_args() -> CoLink {
273273
ca,
274274
cert,
275275
key,
276-
} = CommandLineArgs::from_args();
276+
} = CommandLineArgs::parse();
277277
let mut cl = CoLink::new(&addr, &jwt);
278278
if let Some(ca) = ca {
279279
cl = cl.ca_certificate(&ca);

0 commit comments

Comments
 (0)