summaryrefslogtreecommitdiff
path: root/server/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/main.rs')
-rw-r--r--server/src/main.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/server/src/main.rs b/server/src/main.rs
index 3787783..dae6662 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -1,17 +1,18 @@
pub mod protocol;
pub mod room;
-use hyper::StatusCode;
+use hyper::{header, StatusCode, Uri};
use listenfd::ListenFd;
use log::error;
use room::Room;
use std::collections::HashMap;
use std::convert::Infallible;
+use std::str::FromStr;
use std::sync::Arc;
use tokio::sync::RwLock;
use warp::hyper::Server;
use warp::ws::WebSocket;
-use warp::{Filter, Rejection, Reply};
+use warp::{reply, Filter, Rejection, Reply};
type Rooms = Arc<RwLock<HashMap<String, Arc<Room>>>>;
@@ -38,12 +39,21 @@ async fn run() {
let room: _ = warp::path!("room").and(warp::fs::file("../client-web/public/app.html"));
let assets: _ = warp::path("assets").and(warp::fs::dir("../client-web/public/assets"));
let favicon: _ = warp::path!("favicon.ico").map(|| "");
+ let old_format_redirect: _ = warp::path!("room" / String).map(|rname| {
+ reply::with_header(
+ StatusCode::MOVED_PERMANENTLY,
+ header::LOCATION,
+ format!("/room#{rname}?warn_redirect=true"),
+ )
+ .into_response()
+ });
let routes = assets
.or(room)
.or(index)
.or(signaling)
.or(favicon)
+ .or(old_format_redirect)
.recover(handle_rejection)
.with(warp::log("stuff"));