feat: token extractor middleware

This commit is contained in:
Ahmet Kaan Gümüş 2025-04-16 06:27:08 +03:00
parent 96199f71ef
commit 4f874d8789
9 changed files with 247 additions and 32 deletions

View file

@ -21,8 +21,11 @@ web-sys = { version = "0.3.77", features = [
"MediaTrackConstraintSet",
"Navigator",
"RtcConfiguration",
"RtcIceCandidate",
"RtcIceCandidateInit",
"RtcIceServer",
"RtcPeerConnection",
"RtcPeerConnectionState",
"RtcSdpType",
"RtcSessionDescription",
"RtcSessionDescriptionInit",

View file

@ -48,18 +48,25 @@ pub async fn offer(username: String) {
if let Err(err_val) = send_offer(&username, &data).await {
log!("Error: Send Offer | {}", err_val)
}
for _ in 0..10 {
match receive_answer(&username).await {
Ok(received_answer) => {
log!("{:#?}", received_answer);
Ok(received_user_and_signal_answer) => {
log!("{:#?}", received_user_and_signal_answer);
let peer_connection_session_answer =
RtcSessionDescriptionInit::new(RtcSdpType::Answer);
peer_connection_session_answer.set_sdp(received_answer.get_data().as_str());
peer_connection_session_answer
.set_sdp(received_user_and_signal_answer.signal.get_data().as_str());
JsFuture::from(
peer_connection.set_remote_description(&peer_connection_session_answer),
)
.await
.unwrap();
for _ in 0..100 {
log!("{:#?}", peer_connection.connection_state());
sleep(1000).await;
}
break;
}
Err(err_val) => log!("Error: Receive Answer | {}", err_val),
@ -71,11 +78,12 @@ pub async fn offer(username: String) {
pub async fn answer(username: String) {
for _ in 0..10 {
match receive_offer(&username).await {
Ok(offer) => {
Ok(received_user_and_signal_offer) => {
let peer_connection = create_peer_connection_with_configuration().await;
let peer_connection_session_offer =
RtcSessionDescriptionInit::new(RtcSdpType::Offer);
peer_connection_session_offer.set_sdp(offer.get_data().as_str());
peer_connection_session_offer
.set_sdp(received_user_and_signal_offer.signal.get_data().as_str());
JsFuture::from(
peer_connection.set_remote_description(&peer_connection_session_offer),
)
@ -99,6 +107,11 @@ pub async fn answer(username: String) {
let data = session_answer;
send_answer(&username, &data).await.unwrap();
for _ in 0..100 {
log!("{:#?}", peer_connection.connection_state());
sleep(1000).await;
}
break;
}
Err(err_val) => log!("Error: Receive Offer | {}", err_val),

View file

@ -1,11 +1,11 @@
use std::sync::LazyLock;
use leptos::logging::log;
use protocol::{Signal, SignalType};
use protocol::{Signal, SignalType, UserAndSignal};
use reqwest::{Response, header::HeaderMap};
use serde_json::{Value, json};
const SIGNALLING_ADDRESS: &str = "http://127.0.0.1:4546";
const SIGNALLING_ADDRESS: &str = "http://192.168.1.3:4546";
static REQUEST_CLIENT: LazyLock<reqwest::Client> = LazyLock::new(|| reqwest::Client::new());
async fn create_headers(headers: Vec<(&'static str, String)>) -> HeaderMap {
@ -58,15 +58,17 @@ pub async fn send_offer(username: &String, data: &String) -> Result<(), reqwest:
.map(|_| Ok(()))?
}
pub async fn receive_offer(username: &String) -> Result<Signal, Box<dyn std::error::Error>> {
pub async fn receive_offer(username: &String) -> Result<UserAndSignal, Box<dyn std::error::Error>> {
let result = get_json(username, SignalType::Offer)
.await
.map(async |response| response.json::<Signal>().await)?
.map(async |response| response.json::<UserAndSignal>().await)?
.await?;
if result.get_signal_type() == SignalType::Offer {
if result.signal.get_signal_type() == SignalType::Offer {
Ok(result)
} else {
Err(protocol::Error::SignalType(result.get_signal_type()))?
Err(protocol::Error::UnexpectedSignalType(
result.signal.get_signal_type(),
))?
}
}
@ -78,14 +80,42 @@ pub async fn send_answer(username: &String, data: &String) -> Result<(), reqwest
.map(|_| Ok(()))?
}
pub async fn receive_answer(username: &String) -> Result<Signal, Box<dyn std::error::Error>> {
pub async fn receive_answer(
username: &String,
) -> Result<UserAndSignal, Box<dyn std::error::Error>> {
let result = get_json(username, SignalType::Answer)
.await
.map(async |response| response.json::<Signal>().await)?
.map(async |response| response.json::<UserAndSignal>().await)?
.await?;
if result.get_signal_type() == SignalType::Answer {
if result.signal.get_signal_type() == SignalType::Answer {
Ok(result)
} else {
Err(protocol::Error::SignalType(result.get_signal_type()))?
Err(protocol::Error::UnexpectedSignalType(
result.signal.get_signal_type(),
))?
}
}
pub async fn send_ice_candidate(username: &String, data: &String) -> Result<(), reqwest::Error> {
let rtc_session_answer_signal = Signal::new(&SignalType::ICECandidate, data);
let rtc_session_answer_signal = json!(rtc_session_answer_signal);
post_json(username, &rtc_session_answer_signal)
.await
.map(|_| Ok(()))?
}
pub async fn receive_ice_candidate(
username: &String,
) -> Result<UserAndSignal, Box<dyn std::error::Error>> {
let result = get_json(username, SignalType::Answer)
.await
.map(async |response| response.json::<UserAndSignal>().await)?
.await?;
if result.signal.get_signal_type() == SignalType::ICECandidate {
Ok(result)
} else {
Err(protocol::Error::UnexpectedSignalType(
result.signal.get_signal_type(),
))?
}
}