diff --git a/actix-session/src/session.rs b/actix-session/src/session.rs index bb7c395cf..3ff3ea159 100644 --- a/actix-session/src/session.rs +++ b/actix-session/src/session.rs @@ -79,7 +79,7 @@ impl Default for SessionStatus { struct SessionInner { state: HashMap, status: SessionStatus, - session_key: SessionKey, + session_key: Option, } impl Session { @@ -108,8 +108,10 @@ impl Session { /// /// Retrieve the overall session key pub fn get_session_key(&self) -> secrecy::Secret { - let key = todo!("populate key somehow"); - secrecy::Secret::new(key) + todo!("either grab the key or figure out how to populate InnerSession session_key field"); + // let key = Session::set_session(&mut self.0., self.0); + let key = self.0.borrow().session_key.clone(); // + secrecy::Secret::new(key.unwrap()) } /// Get all raw key-value data from the session. /// diff --git a/actix-session/src/storage/session_key.rs b/actix-session/src/storage/session_key.rs index fa0269b26..799e8b7f3 100644 --- a/actix-session/src/storage/session_key.rs +++ b/actix-session/src/storage/session_key.rs @@ -1,6 +1,7 @@ use std::convert::TryFrom; use derive_more::{Display, From}; +use secrecy::Secret; /// A session key, the string stored in a client-side cookie to associate a user with its session /// state on the backend. @@ -17,8 +18,8 @@ use derive_more::{Display, From}; /// let session_key: Result = key.try_into(); /// assert!(session_key.is_err()); /// ``` -#[derive(Debug, PartialEq, Eq, Default, Clone)] -pub struct SessionKey(pub String); +#[derive(Debug, Clone)] +pub struct SessionKey(secrecy::Secret); impl TryFrom for SessionKey { type Error = InvalidSessionKeyError; @@ -30,13 +31,13 @@ impl TryFrom for SessionKey { ) .into()); } - - Ok(SessionKey(val)) + let val_secret = Secret::new(val); + Ok(SessionKey(val_secret)) } } -impl AsRef for SessionKey { - fn as_ref(&self) -> &str { +impl AsRef> for SessionKey { + fn as_ref(&self) -> &secrecy::Secret { &self.0 } }