Skip to content
This repository was archived by the owner on Feb 3, 2025. It is now read-only.

Commit 5408ae0

Browse files
committed
DRAFT ws ohttp-keys
1 parent c514176 commit 5408ae0

File tree

6 files changed

+122
-66
lines changed

6 files changed

+122
-66
lines changed

Cargo.lock

Lines changed: 39 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ lightning-invoice = { git = 'https://github.com/MutinyWallet/rust-lightning.git'
2020
lightning-rapid-gossip-sync = { git = 'https://github.com/MutinyWallet/rust-lightning.git', rev = "e82635b32458a77d28a5a23b664696422eb526e4" }
2121
lightning-background-processor = { git = 'https://github.com/MutinyWallet/rust-lightning.git', rev = "e82635b32458a77d28a5a23b664696422eb526e4" }
2222
lightning-transaction-sync = { git = 'https://github.com/MutinyWallet/rust-lightning.git', rev = "e82635b32458a77d28a5a23b664696422eb526e4" }
23+
rustls-pki-types = { git = "https://github.com/DanGould/pki-types", rev = "15db00a170c6948f7bff5c7b514409a7e5136949" }

mutiny-core/Cargo.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ aes = { version = "0.8" }
4545
jwt-compact = { version = "0.8.0-beta.1", features = ["es256k"] }
4646
argon2 = { version = "0.5.0", features = ["password-hash", "alloc"] }
4747
payjoin = { version = "0.13.0", features = ["v2", "send", "receive", "base64"] }
48-
futures-rustls = { version = "0.25" }
49-
webpki-roots = "0.26"
48+
futures-rustls = { version = "0.25.1" }
49+
rustls-pki-types = { version = "1.3.1", features = ["web"] }
5050
gluesql = { version = "0.15", default-features = false, features = ["memory-storage"] }
5151
gluesql-core = "0.15.0"
5252
bincode = "1.3.3"
@@ -83,8 +83,9 @@ ignored_tests = []
8383
wasm-bindgen = "0.2.88"
8484
wasm-bindgen-futures = { version = "0.4.38" }
8585
web-sys = { version = "0.3.65", features = ["console"] }
86+
webpki-roots = "0.26.1"
8687
js-sys = "0.3.65"
87-
gloo-net = { version = "0.4.0" }
88+
gloo-net = { version = "0.5.0", features = ["io-util"] }
8889
instant = { version = "0.1", features = ["wasm-bindgen"] }
8990
getrandom = { version = "0.2", features = ["js"] }
9091
# add nip07 feature for wasm32

mutiny-core/src/networking/ws_io.rs

Lines changed: 47 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -112,41 +112,58 @@ mod test {
112112
use std::sync::Arc;
113113

114114
use gloo_net::websocket::futures::WebSocket;
115-
use wasm_bindgen_test::{wasm_bindgen_test as test};
115+
use wasm_bindgen_test::wasm_bindgen_test as test;
116+
117+
use wasm_bindgen::prelude::*;
118+
119+
// Bind to JavaScript's console.log
120+
#[wasm_bindgen]
121+
extern "C" {
122+
#[wasm_bindgen(js_namespace = console)]
123+
fn log(s: &str);
124+
}
125+
126+
// A utility function to use in Rust
127+
pub fn console_log(s: &str) {
128+
log(s);
129+
}
116130

117131
#[test]
118132
async fn test_ws_io() {
119133
use futures_util::{AsyncReadExt, AsyncWriteExt};
120134
assert!(true);
121-
// // DANGER! TODO get from &self config, do not get config directly from PAYJOIN_DIR ohttp-gateway
122-
// // That would reveal IP address
123-
// let tls_connector = {
124-
// let root_store = futures_rustls::rustls::RootCertStore {
125-
// roots: webpki_roots::TLS_SERVER_ROOTS.iter().cloned().collect(),
126-
// };
135+
// DANGER! TODO get from &self config, do not get config directly from PAYJOIN_DIR ohttp-gateway
136+
// That would reveal IP address
137+
let tls_connector = {
138+
let root_store = futures_rustls::rustls::RootCertStore {
139+
roots: webpki_roots::TLS_SERVER_ROOTS.iter().cloned().collect(),
140+
};
127141

128-
// let config = futures_rustls::rustls::ClientConfig::builder()
129-
// .with_root_certificates(root_store)
130-
// .with_no_client_auth();
131-
// futures_rustls::TlsConnector::from(Arc::new(config))
132-
// };
133-
134-
// let domain = futures_rustls::rustls::pki_types::ServerName::try_from("payjo.in")
135-
// .map_err(|_| {
136-
// std::io::Error::new(std::io::ErrorKind::InvalidInput, "invalid dnsname")
137-
// })
138-
// .unwrap()
139-
// .to_owned();
140-
141-
// let ws = WebSocket::open(&format!("ws://127.0.0.1:3030")).unwrap();
142-
// let ws_io = crate::networking::ws_io::WsIo::new(ws);
143-
// let mut tls_stream = tls_connector.connect(domain, ws_io).await.unwrap();
144-
// let ohttp_keys_req = b"GET /ohttp-keys HTTP/1.1\r\nHost: payjo.in\r\nConnection: close\r\n\r\n";
145-
// tls_stream.write_all(ohttp_keys_req).await.unwrap();
146-
// tls_stream.flush().await.unwrap();
147-
// let mut ohttp_keys = Vec::new();
148-
// tls_stream.read_to_end(&mut ohttp_keys).await.unwrap();
149-
// let ohttp_keys_base64 = base64::encode(ohttp_keys);
150-
// println!("{}", &ohttp_keys_base64);
142+
let config = futures_rustls::rustls::ClientConfig::builder()
143+
.with_root_certificates(root_store)
144+
.with_no_client_auth();
145+
futures_rustls::TlsConnector::from(Arc::new(config))
146+
};
147+
148+
let domain = futures_rustls::rustls::pki_types::ServerName::try_from("payjo.in")
149+
.map_err(|_| {
150+
std::io::Error::new(std::io::ErrorKind::InvalidInput, "invalid dnsname")
151+
})
152+
.unwrap()
153+
.to_owned();
154+
console_log("GGGGGG");
155+
let ws = WebSocket::open(&format!("wss://ohttp.payjoin.org:443")).unwrap();
156+
//let ws_io = crate::networking::ws_io::WsIo::new(ws);
157+
console_log("GGGGGG");
158+
let mut tls_stream = tls_connector.connect(domain, ws).await.unwrap();
159+
let ohttp_keys_req = b"GET /ohttp-keys HTTP/1.1\r\nHost: payjo.in\r\nConnection: close\r\n\r\n";
160+
console_log("GGGGGG");
161+
tls_stream.write_all(ohttp_keys_req).await.unwrap();
162+
tls_stream.flush().await.unwrap();
163+
let mut ohttp_keys = Vec::new();
164+
tls_stream.read_to_end(&mut ohttp_keys).await.unwrap();
165+
let ohttp_keys_base64 = base64::encode(ohttp_keys);
166+
console_log(&ohttp_keys_base64);
167+
println!("{}", &ohttp_keys_base64);
151168
}
152169
}

mutiny-core/src/nodemanager.rs

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -711,37 +711,38 @@ impl<S: MutinyStorage> NodeManager<S> {
711711
pub async fn start_payjoin_session(&self) -> Result<Enrolled, PayjoinError> {
712712
use futures_util::{AsyncReadExt, AsyncWriteExt};
713713

714-
// DANGER! TODO get from &self config, do not get config directly from PAYJOIN_DIR ohttp-gateway
715-
// That would reveal IP address
716-
let tls_connector = {
717-
let root_store = futures_rustls::rustls::RootCertStore {
718-
roots: webpki_roots::TLS_SERVER_ROOTS.iter().cloned().collect(),
719-
};
714+
// // DANGER! TODO get from &self config, do not get config directly from PAYJOIN_DIR ohttp-gateway
715+
// // That would reveal IP address
716+
// let tls_connector = {
717+
// let root_store = futures_rustls::rustls::RootCertStore {
718+
// roots: webpki_roots::TLS_SERVER_ROOTS.iter().cloned().collect(),
719+
// };
720720

721-
let config = futures_rustls::rustls::ClientConfig::builder()
722-
.with_root_certificates(root_store)
723-
.with_no_client_auth();
724-
futures_rustls::TlsConnector::from(Arc::new(config))
725-
};
726-
727-
let domain = futures_rustls::rustls::pki_types::ServerName::try_from("payjo.in")
728-
.map_err(|_| {
729-
std::io::Error::new(std::io::ErrorKind::InvalidInput, "invalid dnsname")
730-
})
731-
.unwrap()
732-
.to_owned();
733-
734-
let ws = WebSocket::open(&format!("ws://{}", crate::payjoin::OHTTP_RELAYS[0])).unwrap();
735-
let ws_io = crate::networking::ws_io::WsIo::new(ws);
736-
let mut tls_stream = tls_connector.connect(domain, ws_io).await.unwrap();
737-
let ohttp_keys_req = b"GET /ohttp-keys HTTP/1.1\r\nHost: payjo.in\r\nConnection: close\r\n\r\n";
738-
tls_stream.write_all(ohttp_keys_req).await.unwrap();
739-
tls_stream.flush().await.unwrap();
740-
let mut ohttp_keys = Vec::new();
741-
tls_stream.read_to_end(&mut ohttp_keys).await.unwrap();
721+
// let config = futures_rustls::rustls::ClientConfig::builder()
722+
// .with_root_certificates(root_store)
723+
// .with_no_client_auth();
724+
// futures_rustls::TlsConnector::from(Arc::new(config))
725+
// };
726+
727+
// let domain = futures_rustls::rustls::pki_types::ServerName::try_from("payjo.in")
728+
// .map_err(|_| {
729+
// std::io::Error::new(std::io::ErrorKind::InvalidInput, "invalid dnsname")
730+
// })
731+
// .unwrap()
732+
// .to_owned();
733+
734+
// let ws = WebSocket::open(&format!("ws://{}", crate::payjoin::OHTTP_RELAYS[0])).unwrap();
735+
// let ws_io = crate::networking::ws_io::WsIo::new(ws);
736+
// let mut tls_stream = tls_connector.connect(domain, ws_io).await.unwrap();
737+
// let ohttp_keys_req = b"GET /ohttp-keys HTTP/1.1\r\nHost: payjo.in\r\nConnection: close\r\n\r\n";
738+
// tls_stream.write_all(ohttp_keys_req).await.unwrap();
739+
// tls_stream.flush().await.unwrap();
740+
// let mut ohttp_keys = Vec::new();
741+
// tls_stream.read_to_end(&mut ohttp_keys).await.unwrap();
742+
// let ohttp_keys_base64 = base64::encode(ohttp_keys);
742743
let http_client = reqwest::Client::builder().build()?;
743-
let ohttp_keys_base64 = base64::encode(ohttp_keys);
744744

745+
let ohttp_keys_base64 = ""; // mock
745746
let mut enroller = payjoin::receive::v2::Enroller::from_relay_config(
746747
crate::payjoin::PAYJOIN_DIR,
747748
&ohttp_keys_base64,

mutiny-core/src/payjoin.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ use payjoin::receive::v2::Enrolled;
66
use serde::{Deserialize, Serialize};
77
use std::collections::HashMap;
88

9-
pub(crate) const OHTTP_RELAYS: [&str; 2] = [
9+
pub(crate) const OHTTP_RELAYS: [&str; 3] = [
10+
"https://ohttp.payjoin.org",
1011
"https://ohttp-relay.obscuravpn.io/payjoin",
1112
"https://bobspace-ohttp.duckdns.org",
1213
];

0 commit comments

Comments
 (0)