use super::handler; use crate::utils::filter::with_context; use crate::utils::structs::Context; use warp::{Filter, Rejection, Reply}; pub fn routes(context: Context) -> impl Filter + Clone { let cors = warp::cors().allow_any_origin(); static_files().or(index(context)).with(&cors) } fn index(context: Context) -> impl Filter + Clone { // let real_client_ip = warp::header::optional::("X-Real-IP"); let real_client_ip = warp::addr::remote(); let relay_information_document_path = warp::path::end().and( warp::header::header("Accept") .and(with_context(context.clone())) .and_then(handler::relay_config), ); let nostr_relay_path = warp::path::end().and( warp::ws() .and(with_context(context.clone())) .and(real_client_ip) .and_then(handler::ws_handler), ); relay_information_document_path.or(nostr_relay_path) } fn static_files() -> impl Filter + Clone { let mut exe_dir = std::env::current_exe().unwrap(); exe_dir.pop(); let mut www = exe_dir.clone(); www.pop(); www.push(std::path::Path::new("www/static")); warp::get().and(warp::fs::dir(www)) }