Redirect anonymous user from authenticated pages
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user