diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/Cargo.toml | 1 | ||||
-rw-r--r-- | server/src/routes/mod.rs | 4 | ||||
-rw-r--r-- | server/src/routes/stream.rs | 2 | ||||
-rw-r--r-- | server/src/routes/streamsync.rs | 11 | ||||
-rw-r--r-- | server/src/routes/ui/account/mod.rs | 8 | ||||
-rw-r--r-- | server/src/routes/ui/account/session/guard.rs | 2 |
6 files changed, 22 insertions, 6 deletions
diff --git a/server/Cargo.toml b/server/Cargo.toml index e6e6d20..a124876 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -32,6 +32,7 @@ tokio-util = { version = "0.7.10", features = ["io", "io-util"] } markup = "0.15.0" rocket = { workspace = true, features = ["secrets", "json"] } +rocket_ws = { workspace = true } [build-dependencies] glob = "0.3.1" diff --git a/server/src/routes/mod.rs b/server/src/routes/mod.rs index d6c1e9f..e4d05e5 100644 --- a/server/src/routes/mod.rs +++ b/server/src/routes/mod.rs @@ -37,8 +37,11 @@ use ui::{ }; use userdata::{r_node_userdata, r_player_progress, r_player_watched}; +use self::streamsync::r_streamsync; + pub mod api; pub mod stream; +pub mod streamsync; pub mod ui; pub mod userdata; @@ -85,6 +88,7 @@ pub fn build_rocket(database: DataAcid, federation: Federation) -> Rocket<Build> routes![ r_home, r_home_unpriv, + r_streamsync, r_favicon, r_item_assets, r_all_items_filter, diff --git a/server/src/routes/stream.rs b/server/src/routes/stream.rs index 5c21a5a..11fd094 100644 --- a/server/src/routes/stream.rs +++ b/server/src/routes/stream.rs @@ -231,7 +231,7 @@ impl<'r> FromRequest<'r> for RequestRange { match req.headers().get("range").next() { Some(v) => match Self::from_hv(v) { Ok(v) => rocket::outcome::Outcome::Success(v), - Err(e) => rocket::outcome::Outcome::Failure((Status::BadRequest, e)), + Err(e) => rocket::outcome::Outcome::Error((Status::BadRequest, e)), }, None => rocket::outcome::Outcome::Forward(Status::Ok), } diff --git a/server/src/routes/streamsync.rs b/server/src/routes/streamsync.rs new file mode 100644 index 0000000..d4a4d7e --- /dev/null +++ b/server/src/routes/streamsync.rs @@ -0,0 +1,11 @@ +use rocket::get; +use rocket_ws::{Stream, WebSocket}; + +#[get("/streamsync")] +pub fn r_streamsync(ws: WebSocket) -> Stream!['static] { + Stream! { ws => + for await message in ws { + yield message?; + } + } +} diff --git a/server/src/routes/ui/account/mod.rs b/server/src/routes/ui/account/mod.rs index 8af92a0..eeafce1 100644 --- a/server/src/routes/ui/account/mod.rs +++ b/server/src/routes/ui/account/mod.rs @@ -186,12 +186,12 @@ pub fn r_account_login_post( None => return Err(format_form_error(form)), }; jar.add( - Cookie::build( + Cookie::build(( "session", login_logic(database, &form.username, &form.password, None, None)?, - ) + )) .permanent() - .finish(), + .build(), ); Ok(Redirect::found(rocket::uri!(r_home()))) @@ -199,7 +199,7 @@ pub fn r_account_login_post( #[post("/account/logout")] pub fn r_account_logout_post(jar: &CookieJar) -> MyResult<Redirect> { - jar.remove_private(Cookie::named("session")); + jar.remove_private(Cookie::build("session")); Ok(Redirect::found(rocket::uri!(r_home()))) } diff --git a/server/src/routes/ui/account/session/guard.rs b/server/src/routes/ui/account/session/guard.rs index b2fd408..6969491 100644 --- a/server/src/routes/ui/account/session/guard.rs +++ b/server/src/routes/ui/account/session/guard.rs @@ -81,7 +81,7 @@ impl<'r> FromRequest<'r> for AdminSession { if x.user.admin { Outcome::Success(AdminSession(x)) } else { - Outcome::Failure(( + Outcome::Error(( Status::Unauthorized, MyError(anyhow!("you are not an admin")), )) |