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

@ -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(),
))?
}
}