aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-02-05 13:48:18 +0100
committermetamuffin <metamuffin@disroot.org>2025-02-05 13:48:18 +0100
commit4d5aae703751ae4715d4e0ea1c784826787ab0fd (patch)
tree6db52372c7ce0474182946dd681a8d16caa76c12
parent6bf4347c3a28a7578637a258eca95fcc6437ff27 (diff)
downloadjellything-4d5aae703751ae4715d4e0ea1c784826787ab0fd.tar
jellything-4d5aae703751ae4715d4e0ea1c784826787ab0fd.tar.bz2
jellything-4d5aae703751ae4715d4e0ea1c784826787ab0fd.tar.zst
fix escaped auth tokens
-rw-r--r--server/src/routes/ui/account/session/guard.rs14
1 files changed, 6 insertions, 8 deletions
diff --git a/server/src/routes/ui/account/session/guard.rs b/server/src/routes/ui/account/session/guard.rs
index fd451ef..208e45a 100644
--- a/server/src/routes/ui/account/session/guard.rs
+++ b/server/src/routes/ui/account/session/guard.rs
@@ -23,19 +23,20 @@ impl Session {
{
let token = req
.query_value("session")
- .or_else(|| req.query_value("api_key"))
- .or_else(|| req.headers().get_one("X-MediaBrowser-Token").map(Ok))
+ .map(|e| e.unwrap())
+ .or_else(|| req.query_value("api_key").map(|e| e.unwrap()))
+ .or_else(|| req.headers().get_one("X-MediaBrowser-Token"))
.or_else(|| {
req.headers()
.get_one("Authorization")
.and_then(parse_jellyfin_auth)
- .map(Ok)
}) // for jellyfin compat
- .map(|e| e.expect("str parse should not fail, right?"))
.or(req.cookies().get("session").map(|cookie| cookie.value()))
.ok_or(anyhow!("not logged in"))?;
- username = super::token::validate(token)?;
+ // jellyfin urlescapes the token for *some* requests
+ let token = token.replace("%3D", "=");
+ username = super::token::validate(&token)?;
};
#[cfg(feature = "bypass-auth")]
@@ -55,9 +56,6 @@ fn parse_jellyfin_auth(h: &str) -> Option<&str> {
for tok in h.split(" ") {
if let Some(tok) = tok.strip_prefix("Token=\"") {
if let Some(tok) = tok.strip_suffix("\"") {
- let tok = tok.strip_suffix("%3D").unwrap_or(tok);
- let tok = tok.strip_suffix("%3D").unwrap_or(tok);
- let tok = tok.strip_suffix("%3D").unwrap_or(tok);
return Some(tok);
}
}