Redirect anonymous user from authenticated pages

This commit is contained in:
2022-04-02 17:44:10 +02:00
parent 9e72e6a044
commit 91fd763fe1
3 changed files with 51 additions and 15 deletions

View File

@ -19,7 +19,7 @@ impl Default for SessionStatus {
#[derive(Debug, Serialize, Deserialize, Default)]
struct SessionIdentityData {
pub struct SessionIdentityData {
pub id: UserID,
pub is_admin: bool,
pub status: SessionStatus,
@ -28,17 +28,12 @@ struct SessionIdentityData {
pub struct SessionIdentity<'a>(pub &'a Identity);
impl<'a> SessionIdentity<'a> {
pub fn set_user(&self, user: &User) {
self.set_session_data(&SessionIdentityData {
id: user.uid.clone(),
is_admin: user.admin,
status: SessionStatus::SignedIn,
});
fn get_session_data(&self) -> Option<SessionIdentityData> {
Self::deserialize_session_data(self.0.identity())
}
fn get_session_data(&self) -> Option<SessionIdentityData> {
let res: Option<SessionIdentityData> = self.0.identity()
.as_deref()
pub fn deserialize_session_data(data: Option<String>) -> Option<SessionIdentityData> {
let res: Option<SessionIdentityData> = data.as_deref()
.map(serde_json::from_str)
.map(|f| match f {
Ok(d) => Some(d),
@ -66,6 +61,14 @@ impl<'a> SessionIdentity<'a> {
self.0.remember(s);
}
pub fn set_user(&self, user: &User) {
self.set_session_data(&SessionIdentityData {
id: user.uid.clone(),
is_admin: user.admin,
status: SessionStatus::SignedIn,
});
}
pub fn set_status(&self, status: SessionStatus) {
let mut sess = self.get_session_data().unwrap_or_default();
sess.status = status;