fix session deserialize

This commit is contained in:
Robin Appelman 2023-11-26 16:42:21 +01:00
commit b36f989a23
4 changed files with 42 additions and 32 deletions

View file

@ -1,6 +1,6 @@
use maud::Render;
use sea_query::Value;
use serde::{Deserialize, Deserializer, Serialize};
use serde::{de::Error, Deserialize, Deserializer, Serialize};
use sqlx::database::HasValueRef;
use sqlx::error::BoxDynError;
use sqlx::{Database, Decode, Type};
@ -89,13 +89,23 @@ where
}
}
#[derive(Deserialize)]
#[serde(untagged)]
enum RawSteamId<'a> {
String(&'a str),
Num(u64),
}
impl<'de> Deserialize<'de> for SteamId {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let str = <&str as Deserialize>::deserialize(deserializer)?;
Ok(str.parse().unwrap())
let raw = RawSteamId::deserialize(deserializer)?;
match raw {
RawSteamId::String(str) => str.parse().map_err(D::Error::custom),
RawSteamId::Num(num) => Ok(SteamId::Id(num)),
}
}
}

View file

@ -245,6 +245,7 @@ async fn login_callback(
error!("{e:?}");
Error::SteamAuth
})?;
info!(steam_id, "received steam login callback");
let steam_id = SteamId::new(steam_id);
let user = User::get(&app.connection, steam_id).await?;
let mut session = Session::new();

View file

@ -11,6 +11,7 @@ use tracing::debug;
pub const COOKIE_NAME: &str = "tf_session";
#[derive(Debug)]
pub enum SessionData {
Authenticated(User),
UnAuthenticated,
@ -58,9 +59,7 @@ where
session_cookie.unwrap()
);
// continue to decode the session cookie
let Ok(Some(session)) = store
.load_session(session_cookie.unwrap().to_owned())
.await else {
let Ok(Some(session)) = store.load_session(session_cookie.unwrap().to_owned()).await else {
return Ok(Self::UnAuthenticated);
};
let Some(user) = session.get::<User>("user") else {