use lox::bridge_table::BridgeLine; use lox::cred; use lox::proto::open_invite; use lox::{IssuerPubKey, OPENINV_LENGTH}; use serde_json; use serde_wasm_bindgen; use std::array::TryFromSliceError; use std::panic; use wasm_bindgen::prelude::*; #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_namespace = console)] pub fn log(s: &str); } #[wasm_bindgen] pub fn set_panic_hook() { panic::set_hook(Box::new(console_error_panic_hook::hook)); } #[wasm_bindgen] pub fn open_invite(invite: &[u8]) -> Result { unsafe { log(&format!("Using invite: {:?}", invite)); } let token = match validate(invite) { Ok(token) => token, Err(e) => return Err(JsValue::from(e.to_string())), }; let (request, state) = open_invite::request(&token); let serialized_request = serde_json::to_string(&request).unwrap(); let serialized_state = serde_json::to_string(&state).unwrap(); unsafe { log(&format!( "Formatted open invite request: {}", serialized_request )); } let open_lox_result = concat_string(serialized_request, serialized_state); Ok(open_lox_result) } fn concat_string(request: String, state: String) -> String { let mut new_string: String = "Request:".to_owned(); new_string.push_str(&request); new_string.push_str(", State:"); new_string.push_str(&state); return new_string; } /* #[wasm_bindgen] pub fn handle_new_lox_credential(state: String, response: String) -> Result { unsafe { log(&format!("Using server response: {:?}", response)); } let deserialized_state = serde_json::from_str(&state).unwrap(); let deserialized_response = serde_json::from_str(&response).unwrap(); let lox_cred = match open_invite::handle_response(deserialized_state, deserialized_response, lox_pub) { Ok(lox_cred) => lox_cred, Err(e) => return Err(JsValue::from(e.to_string())), }; let serialized_credential = serde_json::to_string(&lox_cred.0).unwrap(); let serialized_bridgeline= serde_json::to_string(&lox_cred.1).unwrap(); unsafe { log(&format!("Got new Lox Credential: {}", serialized_credential)); log(&format!("Got new bridgeline: {}", serialized_bridgeline)); } Ok((serialized_credential, serialized_bridgeline)) } */ /* Somehow get pubkeys and return to function #[wasm_bindgen] pub async fn get_pubkey(key_type: String) -> Result { let mut url = "http://localhost:8001/".to_owned() + &key_type; let res = reqwest::Client::new() .get(url) .send() .await?; let text = res.text().await?; let pub_key: IssuerPubKey = serde_json::from_str(&text).unwrap(); Ok(pub_key) } */ // This should also check the pubkey fn validate(invite: &[u8]) -> Result<[u8; OPENINV_LENGTH], TryFromSliceError> { invite.try_into() }